From 5a8c6af6a9299414108a42c6507a1b5b9b92c717 Mon Sep 17 00:00:00 2001 From: moldy Date: Fri, 8 Nov 2024 18:00:29 -0500 Subject: [PATCH] chore: migrate to turbo repo to avoid nx issues --- .eslintignore | 4 +- .github/actions/setup-node/action.yml | 13 +- .github/workflows/on-pull-request.yml | 4 + .gitignore | 4 + examples/embedded-accounts-quickstart | 2 +- examples/ui-demo/next.config.mjs | 3 + package.json | 15 +- patches/vocs+1.0.0-alpha.55.patch | 54 - patches/vocs+1.0.0-alpha.62.patch | 22 + site/package.json | 4 +- site/pages/infra/sponsor-gas.mdx | 5 +- .../customization/authentication-modal.mdx | 8 +- .../upgrading-to-modular-account.mdx | 12 +- site/tailwind.config.cjs | 7 +- site/turbo.json | 9 + turbo.json | 22 + yarn.lock | 919 +++++++++++++----- 17 files changed, 748 insertions(+), 359 deletions(-) delete mode 100644 patches/vocs+1.0.0-alpha.55.patch create mode 100644 patches/vocs+1.0.0-alpha.62.patch create mode 100644 site/turbo.json create mode 100644 turbo.json diff --git a/.eslintignore b/.eslintignore index 84abbe65e5..6f5f781891 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,4 +6,6 @@ site/.vitepress/cache/**/* /examples/* !/examples/ui-demo -/examples/ui-demo/.next/* \ No newline at end of file +/examples/ui-demo/.next/* + +**/.turbo/* \ No newline at end of file diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml index 22e0468d67..5163d684bf 100644 --- a/.github/actions/setup-node/action.yml +++ b/.github/actions/setup-node/action.yml @@ -17,15 +17,4 @@ runs: - name: Install dependencies run: yarn install --frozen-lockfile - shell: bash - - - name: Cache Nx and Node modules - id: cache-nx - uses: actions/cache@v3 - with: - path: | - .nx - node_modules/.cache/nx - key: ${{ runner.os }}-nx-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-nx- \ No newline at end of file + shell: bash \ No newline at end of file diff --git a/.github/workflows/on-pull-request.yml b/.github/workflows/on-pull-request.yml index ba0e62ac34..cc98acfa54 100644 --- a/.github/workflows/on-pull-request.yml +++ b/.github/workflows/on-pull-request.yml @@ -26,6 +26,8 @@ jobs: env: REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.ALCHEMY_BOT_PAT }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} steps: - uses: actions/checkout@v3 with: @@ -55,6 +57,8 @@ jobs: runs-on: ubuntu-latest env: API_KEY: ${{ secrets.API_KEY }} + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} steps: - uses: actions/checkout@v3 with: diff --git a/.gitignore b/.gitignore index f7bbce8848..d373a4e5db 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,7 @@ site/**/*.js vocs.config.tsx.timestamp-*.mjs bin +**/.turbo + +# Turborepo +.turbo diff --git a/examples/embedded-accounts-quickstart b/examples/embedded-accounts-quickstart index e4d61eb57c..63d936ebe9 160000 --- a/examples/embedded-accounts-quickstart +++ b/examples/embedded-accounts-quickstart @@ -1 +1 @@ -Subproject commit e4d61eb57c094b0c566dfe8570fe04e11365e260 +Subproject commit 63d936ebe94c65e5a12e41805bee1a5e9a29ed96 diff --git a/examples/ui-demo/next.config.mjs b/examples/ui-demo/next.config.mjs index 2831a15913..82bcc683e0 100644 --- a/examples/ui-demo/next.config.mjs +++ b/examples/ui-demo/next.config.mjs @@ -13,6 +13,9 @@ const nextConfig = { }, ], }, + eslint: { + ignoreDuringBuilds: true, + }, webpack: (config) => { config.externals.push("pino-pretty", "lokijs", "encoding"); return config; diff --git a/package.json b/package.json index 19f1e7bdc2..ed66195c5c 100644 --- a/package.json +++ b/package.json @@ -22,20 +22,20 @@ "viem": "2.20.0" }, "scripts": { - "generate": "lerna run generate", + "generate": "turbo run generate", "postgenerate": "yarn lint:write", "preinstall": "yarn config set ignore-engines true", "postinstall": "git submodule update --init --recursive && patch-package", "build": "is-ci && yarn build:ci || yarn build:dev", - "build:base": "lerna run build --verbose --ignore=alchemy-daapp --ignore=embedded-accounts-quickstart --ignore=aa-simple-dapp --ignore=ui-demo", - "build:dev": "yarn build:base --ignore=docs", + "build:base": "turbo run build --filter=!embedded-accounts-quickstart --filter=!ui-demo", + "build:dev": "yarn build:base --filter=!docs", "build:ci": "yarn build:base && yarn lint:write", - "build:examples": "lerna run build", + "build:examples": "turbo run build", "clean": "yarn clean:nx && yarn clean:lerna && yarn clean:node_modules", "clean:nx": "nx reset", - "clean:lerna": "lerna run clean", - "clean:node_modules": "lerna clean && rm -rf node_modules", - "docs:gen": "lerna run docs:gen", + "clean:lerna": "turbo run clean", + "clean:node_modules": "lerna clean -y && rm -rf node_modules", + "docs:gen": "turbo run docs:gen", "test": "vitest dev", "test:ci": "vitest run", "lint:write": "eslint . --fix && yarn docs:gen && prettier --write --ignore-unknown .", @@ -69,6 +69,7 @@ "postinstall-postinstall": "^2.1.0", "prettier": "^2.8.8", "prool": "^0.0.15", + "turbo": "^2.2.3", "viem": "2.20.0", "vitest": "^2.0.4", "wagmi": "2.12.7", diff --git a/patches/vocs+1.0.0-alpha.55.patch b/patches/vocs+1.0.0-alpha.55.patch deleted file mode 100644 index 79e3854f57..0000000000 --- a/patches/vocs+1.0.0-alpha.55.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/node_modules/vocs/_lib/app/components/Sidebar.js b/node_modules/vocs/_lib/app/components/Sidebar.js -index ab059f9..8592615 100644 ---- a/node_modules/vocs/_lib/app/components/Sidebar.js -+++ b/node_modules/vocs/_lib/app/components/Sidebar.js -@@ -48,7 +48,7 @@ function getSidebarGroups(sidebar) { - } - function getActiveChildItem(items, pathname) { - return items.find((item) => { -- if (matchPath(pathname, item.link ?? '')) -+ if (matchPath(pathname, item.link ?? '') && pathname !== '/') - return true; - if (item.link === pathname) - return true; -@@ -64,7 +64,7 @@ function SidebarItem(props) { - const match = useMatch(item.link ?? ''); - const hasActiveChildItem = useMemo(() => (item.items ? Boolean(getActiveChildItem(item.items, pathname)) : false), [item.items, pathname]); - const [collapsed, setCollapsed] = useState(() => { -- if (match) -+ if (match && pathname !== '/') - return false; - if (!item.items) - return false; -diff --git a/node_modules/vocs/_lib/vite/.vocs/cache/search.json b/node_modules/vocs/_lib/vite/.vocs/cache/search.json -new file mode 100644 -index 0000000..b58e0ab ---- /dev/null -+++ b/node_modules/vocs/_lib/vite/.vocs/cache/search.json -@@ -0,0 +1 @@ -+"[[\"index.21a47c7927b151b016efbb50a9c6fc78c2f5415b3ef7bbe5e6d55e15bfbf4d78\",{\"mdx\":\"---\\ntitle: TODO\\ndescription: TODO\\n---\\n\\nTODO\\n\",\"document\":[]}],[\"index.1012e2991419027dacc3631d42fc7c2686578aaf499d77eaa67e5efe1891c048\",{\"mdx\":\"---\\ntitle: Sponsor Gas\\ndescription: Learn how to sponsor gas using Alchemy's infrastructure\\n---\\n\\nimport CreateGasManagerPolicySnippet from \\\"../../shared/create-gas-policy.mdx\\\";\\n\\n# Sponsor Gas\\n\\nIn the [Quickstart](/infra/quickstart), we covered an example that sends a user operation with gas sponsorship using our Gas Manager. In this guide, we'll recap how to sponsor gas using the Gas Manager, and also show you\\nhow to use other paymaster providers as well.\\n\\n## Sponsor Gas with Gas Manager\\n\\n### 1. Create gas policy\\n\\n\\n\\n### 2. Create a Smart Account Client\\n\\nNow you can create a Smart Account Client which is configured to sponsor gas.\\n\\n```ts twoslash\\n// [!include ~/shared/infra/client.ts]\\n```\\n\\n### 3. Send a user operation with gas sponsorship\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\\n```\\n\\n```ts twoslash [client.ts] filename=\\\"client.ts\\\"\\n// [!include ~/shared/infra/client.ts]\\n```\\n\\n:::\\n\\n## Sponsor Gas with 3rd-party paymaster\\n\\nIf you're using a 3rd party paymaster to sponsor gas, but our Bundler RPC endpoints, the set up is a bit more involved, but easily doable.\\n\\n### Prerequisite: install aa-sdk/core\\n\\nBecause the Smart Account Client exported from `@account-kit/infra` assumes you're using our infra for both gas sponsorship and bundler RPCs, you'll need to install `@aa-sdk/core`\\nso you can create more configurable clients.\\n\\n:::code-group\\n\\n```bash [yarn]\\nyarn add @aa-sdk/core\\n```\\n\\n```bash [npm]\\nnpm i -s @aa-sdk/core\\n```\\n\\n:::\\n\\n### ERC-7677 compliant paymasters\\n\\nIf your paymaster is [ERC-7677](https://eips.ethereum.org/EIPS/eip-7677) compliant, we export a paymaster middleware that makes it really easy to integrate with that paymaster.\\n\\n```ts twoslash\\nimport {\\n createSmartAccountClient,\\n erc7677Middleware,\\n split,\\n} from \\\"@aa-sdk/core\\\";\\nimport {\\n sepolia,\\n alchemyFeeEstimator,\\n createAlchemyPublicRpcClient,\\n} from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http, custom } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\n// 1. create an alchemy rpc client\\nconst alchemyRpcClient = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n});\\n\\n// 2. create a split transport to route traffic between the paymaster and the bundler\\nconst transport = split({\\n overrides: [\\n {\\n methods: [\\\"pm_getPaymasterStubData\\\", \\\"pm_getPaymasterData\\\"],\\n transport: http(\\\"PAYMASTER_URL\\\"),\\n },\\n ],\\n fallback: custom(alchemyRpcClient),\\n});\\n\\n// 3. create smart account client\\nexport const client = createSmartAccountClient({\\n transport,\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n // this is required to get correct fee estimates when using our Bundler RPC\\n feeEstimator: alchemyFeeEstimator(alchemyRpcClient),\\n ...erc7677Middleware(),\\n});\\n```\\n\\n### Other 3rd Party Paymasters\\n\\nIf your paymaster provider is not ERC-7677 compliant, the setup is very similar, but you'll need to provide your own `paymasterAndData` and `dummyPaymasterAndData` middleware overrides\\nto handle the paymaster calls. In this example, we'll show you how to use [Stackup](https://docs.stackup.sh/docs/paymaster-api) to provide ERC-20 gas payments.\\n\\n```ts twoslash\\nimport {\\n createSmartAccountClient,\\n split,\\n deepHexlify,\\n resolveProperties,\\n} from \\\"@aa-sdk/core\\\";\\nimport {\\n sepolia,\\n alchemyFeeEstimator,\\n createAlchemyPublicRpcClient,\\n} from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http, custom } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\n// 1. create an alchemy rpc client\\nconst alchemyRpcClient = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n});\\n\\n// 2. create a split transport to route traffic between the paymaster and the bundler\\nconst transport = split({\\n overrides: [\\n {\\n methods: [\\\"pm_sponsorUserOperation\\\"],\\n // TODO: Replace with your stackup API key here (https://docs.stackup.sh/docs/paymaster-api)\\n transport: http(\\\"https://api.stackup.sh/v1/paymaster/STACKUP_API_KEY\\\"),\\n },\\n ],\\n fallback: custom(alchemyRpcClient),\\n});\\n\\n// 3. create smart account client\\nexport const client = createSmartAccountClient({\\n transport,\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: custom(alchemyRpcClient),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n // Bypasses alchemy gas estimation and instead uses Stackup for gas estimation\\n // If your paymaster doesn't provide gas estimation, then don't replace the gasEstimator\\n gasEstimator: async (userOp) => ({\\n ...userOp,\\n callGasLimit: \\\"0x0\\\",\\n preVerificationGas: \\\"0x0\\\",\\n verificationGasLimit: \\\"0x0\\\",\\n }),\\n // this is required to get correct fee estimates when using our Bundler RPC\\n feeEstimator: alchemyFeeEstimator(alchemyRpcClient),\\n dummyPaymasterAndData: async (userop) => ({\\n ...userop,\\n paymasterAndData: \\\"0x\\\",\\n }),\\n paymasterAndData: async (userop, { client, account }) => {\\n const pmResponse: any = await client.request({\\n // @ts-ignore\\n method: \\\"pm_sponsorUserOperation\\\",\\n params: [\\n deepHexlify(await resolveProperties(userop)),\\n account.getEntryPoint().address,\\n {\\n // @ts-ignore\\n type: \\\"payg\\\", // Replace with ERC20 context based on stackups documentation\\n },\\n ],\\n });\\n return {\\n ...userop,\\n ...pmResponse,\\n };\\n },\\n});\\n```\\n\",\"document\":[]}],[\"index.508889e7316d1342db5d161c4561b8de09b1a8e79198c2f82ff218ceb4cd3e19\",{\"mdx\":\"---\\ntitle: Smart Account Client\\ndescription: What is the Smart Account Client?\\n---\\n\\n# Smart Account Client\\n\\nThe [`SmartAccountClient`](#TODO/link-to-type) is an extension of `viem`'s [Client](https://viem.sh/docs/clients/custom#build-your-own-client) which allows you to interact\\nwith [Smart Contract Accounts](/concepts/smart-contract-account). You can use the Smart Account Client to send User Operations, sign messages with your account, sponsor gas,\\nand other account-related actions.\\n\\nThe client is also EIP-1193 compliant, meaning it can easily be swapped out in place of other web3 providers (eg. `window.ethereum`).\\n\\n## Account hoisting\\n\\n:::tip\\nIf you're using the [React](/react/overview) or [Core](/core/overview) packages, the Smart Account Clients already handle hoisting and creation of account instances.\\nThe [Smart Contracts](/smart-contracts/overview) package exports client definitions for hoisted instances of the Smart Contract Accounts.\\n:::\\n\\nWhen creating a Smart Account Client, you have two options:\\n\\n1. You can pass an account instance directly into the client constructor. Doing so will use that account for all of the actions you perform with the client, and you won't have to\\n pass in the account each time you call a method. This is known as **\\\"account hoisting\\\"**.\\n2. You can create a client without passing in an account. As a result, you'll have to pass in an account instance to each method you call on the client. This is really useful if you\\n want to manage multiple instances of an account in your app, and want to use one client for all of them.\\n\\nLet's see an example:\\n\\n```ts twoslash\\nimport { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\n// with account hoisting\\n\\nconst hoistedClient = createAlchemySmartAccountClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n }),\\n});\\n\\nconst signature = await hoistedClient.signMessage({ message: \\\"Hello world! \\\" });\\n\\n// without account hoisting\\nconst nonHoistedClient = createAlchemySmartAccountClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst lightAccount = await createLightAccount({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n});\\n\\nconst signature2 = await nonHoistedClient.signMessage({\\n message: \\\"Hello world! \\\",\\n account: lightAccount,\\n});\\n```\\n\\n## Smart Account Client actions\\n\\nBecause the Smart Account Clients are extensions of viem's clients, they support extensions via the `.extend` method. The base client already includes a [number of actions](https://github.com/alchemyplatform/aa-sdk/tree/v4.x.x/aa-sdk/core/src/actions/smartAccount) by default.\\nYou can find additional details about these actions in the [`@aa-sdk/core` documentation](/reference/aa-sdk/core).\\n\",\"document\":[{\"href\":\"/concepts/smart-account-client#smart-account-client\",\"html\":\"\\n

The SmartAccountClient is an extension of viem's Client which allows you to interact\\nwith Smart Contract Accounts. You can use the Smart Account Client to send User Operations, sign messages with your account, sponsor gas,\\nand other account-related actions.

\\n

The client is also EIP-1193 compliant, meaning it can easily be swapped out in place of other web3 providers (eg. window.ethereum).

\\n\",\"id\":\"pages/concepts/smart-account-client.mdx#smart-account-client\",\"isPage\":true,\"text\":\"\\nThe SmartAccountClient is an extension of viem's Client which allows you to interact\\nwith Smart Contract Accounts. You can use the Smart Account Client to send User Operations, sign messages with your account, sponsor gas,\\nand other account-related actions.\\nThe client is also EIP-1193 compliant, meaning it can easily be swapped out in place of other web3 providers (eg. window.ethereum).\\n\",\"title\":\"Smart Account Client\",\"titles\":[]},{\"href\":\"/concepts/smart-account-client#account-hoisting\",\"html\":\"\\n\\n

When creating a Smart Account Client, you have two options:

\\n
    \\n
  1. You can pass an account instance directly into the client constructor. Doing so will use that account for all of the actions you perform with the client, and you won't have to\\npass in the account each time you call a method. This is known as "account hoisting".
  2. \\n
  3. You can create a client without passing in an account. As a result, you'll have to pass in an account instance to each method you call on the client. This is really useful if you\\nwant to manage multiple instances of an account in your app, and want to use one client for all of them.
  4. \\n
\\n

Let's see an example:

\\n
import { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\n// with account hoisting\\n \\nconst hoistedClient = createAlchemySmartAccountClient({\\n  apiKey: "your-api-key",\\n  chain: sepolia,\\n  account: await createLightAccount({\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n    chain: sepolia,\\n    transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n  }),\\n});\\n \\nconst signature = await hoistedClient.signMessage({ message: "Hello world! " });\\n \\n// without account hoisting\\nconst nonHoistedClient = createAlchemySmartAccountClient({\\n  apiKey: "your-api-key",\\n  chain: sepolia,\\n});\\n \\nconst lightAccount = await createLightAccount({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain: sepolia,\\n  transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n});\\n \\nconst signature2 = await nonHoistedClient.signMessage({\\n  message: "Hello world! ",\\n  account: lightAccount,\\n});
\\n\",\"id\":\"pages/concepts/smart-account-client.mdx#account-hoisting\",\"isPage\":false,\"text\":\"\\nIf you're using the React or Core packages, the Smart Account Clients already handle hoisting and creation of account instances.\\nThe Smart Contracts package exports client definitions for hoisted instances of the Smart Contract Accounts.\\nWhen creating a Smart Account Client, you have two options:\\n\\nYou can pass an account instance directly into the client constructor. Doing so will use that account for all of the actions you perform with the client, and you won't have to\\npass in the account each time you call a method. This is known as "account hoisting".\\nYou can create a client without passing in an account. As a result, you'll have to pass in an account instance to each method you call on the client. This is really useful if you\\nwant to manage multiple instances of an account in your app, and want to use one client for all of them.\\n\\nLet's see an example:\\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\n// with account hoisting\\n \\nconst hoistedClient = createAlchemySmartAccountClient({\\n apiKey: "your-api-key",\\n chain: sepolia,\\n account: await createLightAccount({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n }),\\n});\\n \\nconst signature = await hoistedClient.signMessage({ message: "Hello world! " });\\n \\n// without account hoisting\\nconst nonHoistedClient = createAlchemySmartAccountClient({\\n apiKey: "your-api-key",\\n chain: sepolia,\\n});\\n \\nconst lightAccount = await createLightAccount({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n});\\n \\nconst signature2 = await nonHoistedClient.signMessage({\\n message: "Hello world! ",\\n account: lightAccount,\\n});\\n\",\"title\":\"Account hoisting\",\"titles\":[\"Smart Account Client\"]},{\"href\":\"/concepts/smart-account-client#smart-account-client-actions\",\"html\":\"\\n

Because the Smart Account Clients are extensions of viem's clients, they support extensions via the .extend method. The base client already includes a number of actions by default.\\nYou can find additional details about these actions in the @aa-sdk/core documentation.

\",\"id\":\"pages/concepts/smart-account-client.mdx#smart-account-client-actions\",\"isPage\":false,\"text\":\"\\nBecause the Smart Account Clients are extensions of viem's clients, they support extensions via the .extend method. The base client already includes a number of actions by default.\\nYou can find additional details about these actions in the @aa-sdk/core documentation.\",\"title\":\"Smart Account Client actions\",\"titles\":[\"Smart Account Client\"]}]}],[\"index.d1b126546974a71795572affdd26cee6882d7ffacfefdce6a184a2f2deca0ecb\",{\"mdx\":\"---\\ntitle: Quickstart\\ndescription: Get started with Alchemy's ERC-4337 infrastructure\\n---\\n\\nimport GetApiKeySnippet from \\\"../../shared/get-api-key.mdx\\\";\\nimport CreateGasManagerPolicySnippet from \\\"../../shared/create-gas-policy.mdx\\\";\\n\\n# Infra Quickstart\\n\\nAccount Kit is composed of some lower-level libraries if you're looking for further customization of your stack or want more control over how you build your application.\\nOne of these libraries is `@account-kit/infra` which allows you to interact with our infrastructure directly, while bringing your own smart contracts or signer.\\nIn this guide, we'll cover how to get started with `@account-kit/infra` and send a user operation. For smart contracts, we'll leverage `@account-kit/smart-contracts` to use `LightAccount`,\\nbut you're free to use any smart contract you'd like.\\n\\n## Installation\\n\\n:::code-group\\n\\n```bash [yarn]\\nyarn add @account-kit/infra @account-kit/smart-contracts\\n```\\n\\n```bash [npm]\\nnpm i -s @account-kit/infra @account-kit/smart-contracts\\n```\\n\\n:::\\n\\n## Get your Alchemy API Key\\n\\n\\n\\n## Create a Gas Manager policy\\n\\nIf you want to sponsor gas, then you'll also want to create a gas policy in the Gas Manager dashboard.\\n\\n\\n\\n## Create a client\\n\\nNow that you have an API key and a Policy ID, you can create a [Smart Account Client](/concepts/smart-account-client) to interact with the infrastructure.\\n\\n:::warning\\nReplace `YOUR_API_KEY` and `YOUR_POLICY_ID` with the key and Policy ID created above.\\n:::\\n\\n```ts twoslash\\n// [!include ~/shared/infra/client.ts]\\n```\\n\\n## Send a user operation\\n\\nThe last step is to send a user operation using the client you just created.\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\\n```\\n\\n```ts twoslash [client.ts] filename=\\\"client.ts\\\"\\n// [!include ~/shared/infra/client.ts]\\n```\\n\\n:::\\n\",\"document\":[]}],[\"index.7e77b943512516e424039219002ace1801770935e1d96fccdc909587665b7541\",{\"mdx\":\"---\\noutline: deep\\ntitle: Migration Guide\\ndescription: How to upgrade through breaking changes of the aa-sdk and account-kit\\n---\\n\\n# Migration Guide\\n\\nBelow are the steps to migrate your project from older versions of the `aa-sdk` and `account-kit` to the latest version.\\n\\n## Migrating to version v4.x.x\\n\\n### Utils: `verifyEIP6492Signature` removed\\n\\nThis method has been removed. Use [`verifyMessage`](https://viem.sh/docs/actions/public/verifyMessage) from viem.\\n\\n### Utils: `defineReadOnly` removed\\n\\nThis method is no longer used internally and has been removed. The reference impl can be found within `ethers.js`.\\n\\n### Utils: `getChain` removed\\n\\nThis method was not super efficient and maintainable because it was importing all the chains from viem. That meant that if you used this method, it risked increasing your bundle size massively. Now all methods require a `Chain` instead of `chainId` in some places.\\n\\n### Ethers: `Chain` required param\\n\\nCertain methods required a `chainId` which would be converted into a `Chain` using the above method. This has been removed for the reasons above.\\n\\n### Alchemy `Chain` defs\\n\\nThe Alchemy `Chain` definitions have been moved from `@aa-sdk/core` to `@account-kit/infra`.\\n\\n### Ethers: `getPublicErc4337Client` → `getBundlerClient`\\n\\nThis method on the `AccountSigner` has been renamed.\\n\\n### Accounts: Default LightAccount version is now v2.0.0\\n\\nIf you were creating LightAccounts for users without explicitly specifying the version (ie. in `createLightAccount` or `useAccount` or `useSmartAccountClient`), you should manually specify the previous default of `v1.1.0`.\\n\\n### Accounts: `create*Client` methods now have the account parameters un-nested\\n\\nPreviously, the `create*Client` (ie. `createLightAccountClient`) methods used to have an `account` parameter which took in the params for the underlying account. This is resulted in different APIs for both the corresponding `create*AlchemyClient` (ie. `createLightAccountAlchemyClient`) which had these as top-level parameters.\\nIf you were using `createLightAccountClient` or similar methods, you should now pass the account parameters as top-level parameters.\\n\\n## Migrating to version 3.x.x\\n\\nThis version update brings a lot of breaking changes. As we began to support Modular Accounts and their interfaces, we realized that the previous version of the SDK was not as flexible as it could have been to handle the modularity of the new account interfaces.\\nTo address this, version 3.x.x of the SDK switches to an approach more idiomatic to `viem`.\\n\\n### Viem Version\\n\\nWe have updated our dependency to viem v2.x.x. This means you will need to update your project to use >= v2.5.0 of viem.\\n\\n### Client: `SmartAccountProvider` → `SmartAccountClient`\\n\\nThe biggest change is that the `SmartAccountProvider` class has been removed and replaced with a `SmartAccountClient` type that extends `viem`'s [`Client`](https://viem.sh/docs/clients/custom). To get started with the new clients, you can do the following:\\n\\n```ts\\nimport { SmartAccountProvider } from \\\"@aa-sdk/core\\\"; // [!code --]\\nimport { getDefaultEntryPointAddress } from \\\"@aa-sdk/core\\\"; // [!code --]\\nimport { http } from \\\"viem\\\"; // [!code ++]\\nimport { sepolia } from \\\"@aa-sdk/core\\\";\\n\\nconst provider = new SmartAccountProvider({ // [!code --]\\nconst client = createSmartAccountClient({ // [!code ++]\\n rpcProvider: \\\"RPC_URL\\\", // [!code --]\\n transport: http(\\\"RPC_URL\\\"), // [!code ++]\\n chain: sepolia,\\n entryPointAddress: getDefaultEntryPointAddress(sepolia), // [!code --]\\n});\\n```\\n\\n### Client: Removal of `with*` middleware override functions\\n\\nThe `SmartAccountProvider` in previous versions had a number of `with*` functions that mapped to the corresponding middleware functions on the provider.\\nThe concept of the middlewares is still present in this version, but their configuration has been moved to the `SmartAccountClient` creator. For example,\\n\\n```ts\\nimport { SmartAccountProvider } from \\\"@aa-sdk/core\\\"; // [!code --]\\nimport { getDefaultEntryPointAddress } from \\\"@aa-sdk/core\\\"; // [!code --]\\nimport { http } from \\\"viem\\\"; // [!code ++]\\nimport { sepolia } from \\\"@aa-sdk/core\\\";\\n\\nconst provider = new SmartAccountProvider({ // [!code --]\\nconst client = createSmartAccountClient({ // [!code ++]\\n rpcProvider: \\\"RPC_URL\\\", // [!code --]\\n transport: http(\\\"RPC_URL\\\"), // [!code ++]\\n chain: sepolia,\\n entryPointAddress: getDefaultEntryPointAddress(sepolia), // [!code --]\\n}).withGasEstimator(async () => ({ // [!code --]\\n gasEstimator: async (struct) => ({ // [!code ++]\\n ...struct, // [!code ++]\\n callGasLimit: 0n,\\n preVerificationGas: 0n,\\n verificationGasLimit: 0n,\\n }), // [!code ++]\\n});\\n```\\n\\n### Client: signature changes on methods\\n\\nTo support the various ways of connecting to a smart account, the signatures of the methods on `SmartAccountClient` have changed. Almost all methods now have an optional param for `account` and have been converted into single argument functions that take an object with the their properties instead.\\n\\n### Account: `BaseSmartContractAccount` → `SmartContractAccount`\\n\\nThe next big change is the removal of the class-based `BaseSmartContractAccount` that all accounts extended from. This has been replaced with a `SmartContractAccount` type that extends `viem`'s [`Account`](https://viem.sh/docs/accounts/custom), and instantiation of an account is now an `async` action. To get started with the new accounts (using `LightAccount` as an example), you will have to make the following changes:\\n\\n```ts\\nimport {\\n LightSmartContractAccount, // [!code --]\\n createLightAccount, // [!code ++]\\n getDefaultLightAccountFactoryAddress, // [!code --]\\n} from \\\"@account-kit/smart-contracts\\\";\\nimport {\\n LocalAccountSigner,\\n type Hex,\\n} from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@aa-sdk/core\\\";\\n\\nconst chain = sepolia;\\n\\nconst account = new LightSmartContractAccount({ // [!code --]\\nconst account = await createLightAccount({ // [!code ++]\\n rpcClient: client, // [!code --]\\n transport: http(\\\"RPC_URL\\\"), // [!code ++]\\n signer,\\n chain,\\n factoryAddress: getDefaultLightAccountFactoryAddress(chain), // [!code --]\\n });\\n```\\n\\n### Account: Connecting to a Smart Account\\n\\nIn earlier versions, a provider could not be used with a smart account until it was connected to one using `.connect`. In version 3.x.x, you have the option of keeping the two disconnected and passing the account to the client methods directly. You also have the option to hoist the account\\nso that you don't have to pass the account to every method.\\n\\n#### Option 1: Passing the Account to the Client Methods\\n\\n```ts\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport {\\n createBundlerClient,\\n createSmartAccountClientFromExisting\\n LocalAccountSigner,\\n type Hex,\\n} from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@aa-sdk/core\\\";\\nimport { custom, http } from \\\"viem\\\";\\n\\nconst chain = sepolia;\\n\\nconst client = createBundlerClient({\\n chain,\\n transport: http(\\\"JSON_RPC_URL\\\"),\\n});\\n\\n// [!code focus:99]\\n// createSmartAccountClientFromExisting is a helper method that allows you\\n// to reuse a JSON RPC client to create a Smart Account client.\\nconst smartAccountClient = createSmartAccountClientFromExisting({\\n client,\\n});\\n\\nconst account = await createLightAccount({\\n signer,\\n chain,\\n transport: custom(client),\\n});\\n\\nconst { hash } = await smartAccountClient.sendUserOperation({\\n uo: {\\n target: \\\"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\\\",\\n data: \\\"0x\\\",\\n value: 10n,\\n },\\n account, // [!code ++]\\n});\\n```\\n\\n#### Option 2: Hoisting the Account\\n\\nHoisting the account is similar to using `.connect` in previous versions. You simply create your client with an account passed in to it.\\n\\n```ts\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport {\\n createBundlerClient,\\n createSmartAccountClientFromExisting\\n LocalAccountSigner,\\n type Hex,\\n} from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@aa-sdk/core\\\";\\nimport { http, custom } from \\\"viem\\\";\\n\\nconst chain = sepolia;\\n\\nconst client = createBundlerClient({\\n chain,\\n transport: http(\\\"JSON_RPC_URL\\\"),\\n});\\n\\n// [!code focus:99]\\nconst account = await createLightAccount({\\n signer,\\n transport: custom(client),\\n chain,\\n});\\n\\nconst smartAccountClient = createSmartAccountClientFromExisting({\\n account, // [!code ++]\\n client,\\n});\\n\\nconst { hash } = await smartAccountClient.sendUserOperation({\\n uo: {\\n target: \\\"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\\\",\\n data: \\\"0x\\\",\\n value: 10n,\\n },\\n account, // [!code --]\\n});\\n```\\n\\n### Account: Custom Accounts\\n\\nIn prior versions, using your own smart contract account implementations required that you extend `BaseSmartContractAccount`. In version 3.x.x, you can use the `toSmartContractAccount` method which will allow you to use any account with `SmartAccountClient`. `toSmartContractAccount` has the form of:\\n\\n```ts\\ntype toSmartContractAccount = <\\n Name extends string = string,\\n TTransport extends Transport = Transport\\n>({\\n transport,\\n chain,\\n source,\\n entryPointAddress,\\n accountAddress,\\n getAccountInitCode,\\n signMessage,\\n signTypedData,\\n encodeBatchExecute,\\n encodeExecute,\\n getDummySignature,\\n signUserOperationHash,\\n encodeUpgradeToAndCall,\\n}: ToSmartContractAccountParams) => Promise<\\n SmartContractAccount\\n>;\\n```\\n\\n### Account: SimpleAccount and NaniAccount initialization params\\n\\n`chain` and `transport` have been added to the constructor and `rpcClient` has been removed.\\n\\n### Account: SimpleAccount and LightAccount intialization params\\n\\n`index` is now called `salt`\\n\\n### Signer: `signTypedData` signature change\\n\\nThe `signTypedData` method found on `SmartAccountSigner` has been updated to match the signature found on `SmartContractAccount` and viem's `Account`.\\n\\n```ts\\n(params: SignTypedDataParams) => Promise; // [!code --]\\n\\n<\\n const TTypedData extends TypedData | { [key: string]: unknown },\\n TPrimaryType extends string = string\\n>(\\n params: TypedDataDefinition\\n) => Promise;\\n```\\n\\n### Ethers: Removed methods\\n\\nThe `with*` methods have been removed from the Provider and Signer classes.\\nThe `connect` methods has been removed in favor of immutable properties on the Provider and Signer classes. See updated AccountSigner constructor below.\\n\\n### Ethers: `getPublicErc4337Client` → `getBundlerClient`\\n\\nThe `getPublicErc4337Client` method has been renamed to `getBundlerClient` to match the naming found in `aa-core`.\\n\\n### Ethers: Updated Signer Adapter constructor\\n\\nThe `AccountSigner` now takes in a `SmartContractAccount` as a param in its constructor.\\n\\n### Core: Transition from ~~`Percent`~~ to `Multiplier` api and types\\n\\nThe `Percent` type and `PercentSchema` have been removed in favor of the `Multiplier` type and `MultiplierSchema`.\\n\\nGoing forward when using the feeOptions, you can specify the `Multiplier` type instead of a `Percent`. The `Multiplier` type is a number that represents direct multipliaction of the estimation. For example, `0.1` is 10% of the estimated value and `1` is 100% of the estimated value.\\n\\n```ts\\ncreateModularAccountAlchemyClient({\\n ...\\n opts: {\\n ...\\n // The maxFeePerGas and maxPriorityFeePerGas estimated values will now be multipled by 1.5\\n feeOptions: {\\n // This was previously { percent: 50n }\\n maxFeePerGas: { multiplier: 1.5 },\\n // This was previously { percent: 25n }\\n maxPriorityFeePerGas: { multiplier: 1.25 },\\n },\\n },\\n });\\n```\\n\",\"document\":[{\"href\":\"/migration-guide#migration-guide\",\"html\":\"\\n

Below are the steps to migrate your project from older versions of the aa-sdk and account-kit to the latest version.

\\n\",\"id\":\"pages/migration-guide.mdx#migration-guide\",\"isPage\":true,\"text\":\"\\nBelow are the steps to migrate your project from older versions of the aa-sdk and account-kit to the latest version.\\n\",\"title\":\"Migration Guide\",\"titles\":[]},{\"href\":\"/migration-guide#migrating-to-version-v4xx\",\"html\":\"\\n\",\"id\":\"pages/migration-guide.mdx#migrating-to-version-v4xx\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Migrating to version v4.x.x\",\"titles\":[\"Migration Guide\"]},{\"href\":\"/migration-guide#utils-verifyeip6492signature-removed\",\"html\":\"\\n

This method has been removed. Use verifyMessage from viem.

\\n\",\"id\":\"pages/migration-guide.mdx#utils-verifyeip6492signature-removed\",\"isPage\":false,\"text\":\"\\nThis method has been removed. Use verifyMessage from viem.\\n\",\"title\":\"Utils: verifyEIP6492Signature removed\",\"titles\":[\"Migration Guide\",\"Migrating to version v4.x.x\"]},{\"href\":\"/migration-guide#utils-definereadonly-removed\",\"html\":\"\\n

This method is no longer used internally and has been removed. The reference impl can be found within ethers.js.

\\n\",\"id\":\"pages/migration-guide.mdx#utils-definereadonly-removed\",\"isPage\":false,\"text\":\"\\nThis method is no longer used internally and has been removed. The reference impl can be found within ethers.js.\\n\",\"title\":\"Utils: defineReadOnly removed\",\"titles\":[\"Migration Guide\",\"Migrating to version v4.x.x\"]},{\"href\":\"/migration-guide#utils-getchain-removed\",\"html\":\"\\n

This method was not super efficient and maintainable because it was importing all the chains from viem. That meant that if you used this method, it risked increasing your bundle size massively. Now all methods require a Chain instead of chainId in some places.

\\n\",\"id\":\"pages/migration-guide.mdx#utils-getchain-removed\",\"isPage\":false,\"text\":\"\\nThis method was not super efficient and maintainable because it was importing all the chains from viem. That meant that if you used this method, it risked increasing your bundle size massively. Now all methods require a Chain instead of chainId in some places.\\n\",\"title\":\"Utils: getChain removed\",\"titles\":[\"Migration Guide\",\"Migrating to version v4.x.x\"]},{\"href\":\"/migration-guide#ethers-chain-required-param\",\"html\":\"\\n

Certain methods required a chainId which would be converted into a Chain using the above method. This has been removed for the reasons above.

\\n\",\"id\":\"pages/migration-guide.mdx#ethers-chain-required-param\",\"isPage\":false,\"text\":\"\\nCertain methods required a chainId which would be converted into a Chain using the above method. This has been removed for the reasons above.\\n\",\"title\":\"Ethers: Chain required param\",\"titles\":[\"Migration Guide\",\"Migrating to version v4.x.x\"]},{\"href\":\"/migration-guide#alchemy-chain-defs\",\"html\":\"\\n

The Alchemy Chain definitions have been moved from @aa-sdk/core to @account-kit/infra.

\\n\",\"id\":\"pages/migration-guide.mdx#alchemy-chain-defs\",\"isPage\":false,\"text\":\"\\nThe Alchemy Chain definitions have been moved from @aa-sdk/core to @account-kit/infra.\\n\",\"title\":\"Alchemy Chain defs\",\"titles\":[\"Migration Guide\",\"Migrating to version v4.x.x\"]},{\"href\":\"/migration-guide#ethers-getpublicerc4337client--getbundlerclient\",\"html\":\"\\n

This method on the AccountSigner has been renamed.

\\n\",\"id\":\"pages/migration-guide.mdx#ethers-getpublicerc4337client--getbundlerclient\",\"isPage\":false,\"text\":\"\\nThis method on the AccountSigner has been renamed.\\n\",\"title\":\"Ethers: getPublicErc4337Client → getBundlerClient\",\"titles\":[\"Migration Guide\",\"Migrating to version v4.x.x\"]},{\"href\":\"/migration-guide#accounts-default-lightaccount-version-is-now-v200\",\"html\":\"\\n

If you were creating LightAccounts for users without explicitly specifying the version (ie. in createLightAccount or useAccount or useSmartAccountClient), you should manually specify the previous default of v1.1.0.

\\n\",\"id\":\"pages/migration-guide.mdx#accounts-default-lightaccount-version-is-now-v200\",\"isPage\":false,\"text\":\"\\nIf you were creating LightAccounts for users without explicitly specifying the version (ie. in createLightAccount or useAccount or useSmartAccountClient), you should manually specify the previous default of v1.1.0.\\n\",\"title\":\"Accounts: Default LightAccount version is now v2.0.0\",\"titles\":[\"Migration Guide\",\"Migrating to version v4.x.x\"]},{\"href\":\"/migration-guide#accounts-createclient-methods-now-have-the-account-parameters-un-nested\",\"html\":\"\\n

Previously, the create*Client (ie. createLightAccountClient) methods used to have an account parameter which took in the params for the underlying account. This is resulted in different APIs for both the corresponding create*AlchemyClient (ie. createLightAccountAlchemyClient) which had these as top-level parameters.\\nIf you were using createLightAccountClient or similar methods, you should now pass the account parameters as top-level parameters.

\\n\",\"id\":\"pages/migration-guide.mdx#accounts-createclient-methods-now-have-the-account-parameters-un-nested\",\"isPage\":false,\"text\":\"\\nPreviously, the create*Client (ie. createLightAccountClient) methods used to have an account parameter which took in the params for the underlying account. This is resulted in different APIs for both the corresponding create*AlchemyClient (ie. createLightAccountAlchemyClient) which had these as top-level parameters.\\nIf you were using createLightAccountClient or similar methods, you should now pass the account parameters as top-level parameters.\\n\",\"title\":\"Accounts: create*Client methods now have the account parameters un-nested\",\"titles\":[\"Migration Guide\",\"Migrating to version v4.x.x\"]},{\"href\":\"/migration-guide#migrating-to-version-3xx\",\"html\":\"\\n

This version update brings a lot of breaking changes. As we began to support Modular Accounts and their interfaces, we realized that the previous version of the SDK was not as flexible as it could have been to handle the modularity of the new account interfaces.\\nTo address this, version 3.x.x of the SDK switches to an approach more idiomatic to viem.

\\n\",\"id\":\"pages/migration-guide.mdx#migrating-to-version-3xx\",\"isPage\":false,\"text\":\"\\nThis version update brings a lot of breaking changes. As we began to support Modular Accounts and their interfaces, we realized that the previous version of the SDK was not as flexible as it could have been to handle the modularity of the new account interfaces.\\nTo address this, version 3.x.x of the SDK switches to an approach more idiomatic to viem.\\n\",\"title\":\"Migrating to version 3.x.x\",\"titles\":[\"Migration Guide\"]},{\"href\":\"/migration-guide#viem-version\",\"html\":\"\\n

We have updated our dependency to viem v2.x.x. This means you will need to update your project to use >= v2.5.0 of viem.

\\n\",\"id\":\"pages/migration-guide.mdx#viem-version\",\"isPage\":false,\"text\":\"\\nWe have updated our dependency to viem v2.x.x. This means you will need to update your project to use >= v2.5.0 of viem.\\n\",\"title\":\"Viem Version\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#client-smartaccountprovider--smartaccountclient\",\"html\":\"\\n

The biggest change is that the SmartAccountProvider class has been removed and replaced with a SmartAccountClient type that extends viem's Client. To get started with the new clients, you can do the following:

\\n
import { SmartAccountProvider } from "@aa-sdk/core"; \\nimport { getDefaultEntryPointAddress } from "@aa-sdk/core"; \\nimport { http } from "viem"; \\nimport { sepolia } from "@aa-sdk/core";\\n \\nconst provider = new SmartAccountProvider({ \\nconst client = createSmartAccountClient({ \\n  rpcProvider: "RPC_URL", \\n  transport: http("RPC_URL"), \\n  chain: sepolia,\\n  entryPointAddress: getDefaultEntryPointAddress(sepolia), \\n});
\\n\",\"id\":\"pages/migration-guide.mdx#client-smartaccountprovider--smartaccountclient\",\"isPage\":false,\"text\":\"\\nThe biggest change is that the SmartAccountProvider class has been removed and replaced with a SmartAccountClient type that extends viem's Client. To get started with the new clients, you can do the following:\\nimport { SmartAccountProvider } from "@aa-sdk/core"; \\nimport { getDefaultEntryPointAddress } from "@aa-sdk/core"; \\nimport { http } from "viem"; \\nimport { sepolia } from "@aa-sdk/core";\\n \\nconst provider = new SmartAccountProvider({ \\nconst client = createSmartAccountClient({ \\n rpcProvider: "RPC_URL", \\n transport: http("RPC_URL"), \\n chain: sepolia,\\n entryPointAddress: getDefaultEntryPointAddress(sepolia), \\n});\\n\",\"title\":\"Client: SmartAccountProvider → SmartAccountClient\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#client-removal-of-with-middleware-override-functions\",\"html\":\"\\n

The SmartAccountProvider in previous versions had a number of with* functions that mapped to the corresponding middleware functions on the provider.\\nThe concept of the middlewares is still present in this version, but their configuration has been moved to the SmartAccountClient creator. For example,

\\n
import { SmartAccountProvider } from "@aa-sdk/core"; \\nimport { getDefaultEntryPointAddress } from "@aa-sdk/core"; \\nimport { http } from "viem"; \\nimport { sepolia } from "@aa-sdk/core";\\n \\nconst provider = new SmartAccountProvider({ \\nconst client = createSmartAccountClient({ \\n    rpcProvider: "RPC_URL", \\n    transport: http("RPC_URL"), \\n    chain: sepolia,\\n    entryPointAddress: getDefaultEntryPointAddress(sepolia), \\n}).withGasEstimator(async () => ({ \\n    gasEstimator: async (struct) => ({ \\n        ...struct, \\n        callGasLimit: 0n,\\n        preVerificationGas: 0n,\\n        verificationGasLimit: 0n,\\n    }), \\n});
\\n\",\"id\":\"pages/migration-guide.mdx#client-removal-of-with-middleware-override-functions\",\"isPage\":false,\"text\":\"\\nThe SmartAccountProvider in previous versions had a number of with* functions that mapped to the corresponding middleware functions on the provider.\\nThe concept of the middlewares is still present in this version, but their configuration has been moved to the SmartAccountClient creator. For example,\\nimport { SmartAccountProvider } from "@aa-sdk/core"; \\nimport { getDefaultEntryPointAddress } from "@aa-sdk/core"; \\nimport { http } from "viem"; \\nimport { sepolia } from "@aa-sdk/core";\\n \\nconst provider = new SmartAccountProvider({ \\nconst client = createSmartAccountClient({ \\n rpcProvider: "RPC_URL", \\n transport: http("RPC_URL"), \\n chain: sepolia,\\n entryPointAddress: getDefaultEntryPointAddress(sepolia), \\n}).withGasEstimator(async () => ({ \\n gasEstimator: async (struct) => ({ \\n ...struct, \\n callGasLimit: 0n,\\n preVerificationGas: 0n,\\n verificationGasLimit: 0n,\\n }), \\n});\\n\",\"title\":\"Client: Removal of with* middleware override functions\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#client-signature-changes-on-methods\",\"html\":\"\\n

To support the various ways of connecting to a smart account, the signatures of the methods on SmartAccountClient have changed. Almost all methods now have an optional param for account and have been converted into single argument functions that take an object with the their properties instead.

\\n\",\"id\":\"pages/migration-guide.mdx#client-signature-changes-on-methods\",\"isPage\":false,\"text\":\"\\nTo support the various ways of connecting to a smart account, the signatures of the methods on SmartAccountClient have changed. Almost all methods now have an optional param for account and have been converted into single argument functions that take an object with the their properties instead.\\n\",\"title\":\"Client: signature changes on methods\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#account-basesmartcontractaccount--smartcontractaccount\",\"html\":\"\\n

The next big change is the removal of the class-based BaseSmartContractAccount that all accounts extended from. This has been replaced with a SmartContractAccount type that extends viem's Account, and instantiation of an account is now an async action. To get started with the new accounts (using LightAccount as an example), you will have to make the following changes:

\\n
import {\\n  LightSmartContractAccount, \\n  createLightAccount, \\n  getDefaultLightAccountFactoryAddress, \\n} from "@account-kit/smart-contracts";\\nimport {\\n  LocalAccountSigner,\\n  type Hex,\\n} from "@aa-sdk/core";\\nimport { sepolia } from "@aa-sdk/core";\\n \\nconst chain = sepolia;\\n \\nconst account = new LightSmartContractAccount({ \\nconst account = await createLightAccount({ \\n    rpcClient: client, \\n    transport: http("RPC_URL"), \\n    signer,\\n    chain,\\n    factoryAddress: getDefaultLightAccountFactoryAddress(chain), \\n  });
\\n\",\"id\":\"pages/migration-guide.mdx#account-basesmartcontractaccount--smartcontractaccount\",\"isPage\":false,\"text\":\"\\nThe next big change is the removal of the class-based BaseSmartContractAccount that all accounts extended from. This has been replaced with a SmartContractAccount type that extends viem's Account, and instantiation of an account is now an async action. To get started with the new accounts (using LightAccount as an example), you will have to make the following changes:\\nimport {\\n LightSmartContractAccount, \\n createLightAccount, \\n getDefaultLightAccountFactoryAddress, \\n} from "@account-kit/smart-contracts";\\nimport {\\n LocalAccountSigner,\\n type Hex,\\n} from "@aa-sdk/core";\\nimport { sepolia } from "@aa-sdk/core";\\n \\nconst chain = sepolia;\\n \\nconst account = new LightSmartContractAccount({ \\nconst account = await createLightAccount({ \\n rpcClient: client, \\n transport: http("RPC_URL"), \\n signer,\\n chain,\\n factoryAddress: getDefaultLightAccountFactoryAddress(chain), \\n });\\n\",\"title\":\"Account: BaseSmartContractAccount → SmartContractAccount\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#account-connecting-to-a-smart-account\",\"html\":\"\\n

In earlier versions, a provider could not be used with a smart account until it was connected to one using .connect. In version 3.x.x, you have the option of keeping the two disconnected and passing the account to the client methods directly. You also have the option to hoist the account\\nso that you don't have to pass the account to every method.

\\n\",\"id\":\"pages/migration-guide.mdx#account-connecting-to-a-smart-account\",\"isPage\":false,\"text\":\"\\nIn earlier versions, a provider could not be used with a smart account until it was connected to one using .connect. In version 3.x.x, you have the option of keeping the two disconnected and passing the account to the client methods directly. You also have the option to hoist the account\\nso that you don't have to pass the account to every method.\\n\",\"title\":\"Account: Connecting to a Smart Account\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#option-1-passing-the-account-to-the-client-methods\",\"html\":\"\\n
import { createLightAccount } from "@account-kit/smart-contracts";\\nimport {\\n  createBundlerClient,\\n  createSmartAccountClientFromExisting\\n  LocalAccountSigner,\\n  type Hex,\\n} from "@aa-sdk/core";\\nimport { sepolia } from "@aa-sdk/core";\\nimport { custom, http } from "viem";\\n \\nconst chain = sepolia;\\n \\nconst client = createBundlerClient({\\n  chain,\\n  transport: http("JSON_RPC_URL"),\\n});\\n \\n\\n// createSmartAccountClientFromExisting is a helper method that allows you\\n// to reuse a JSON RPC client to create a Smart Account client.\\nconst smartAccountClient = createSmartAccountClientFromExisting({\\n  client,\\n});\\n \\nconst account = await createLightAccount({\\n  signer,\\n  chain,\\n  transport: custom(client),\\n});\\n \\nconst { hash } = await smartAccountClient.sendUserOperation({\\n    uo: {\\n        target: "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",\\n        data: "0x",\\n        value: 10n,\\n    },\\n    account, \\n});
\\n\",\"id\":\"pages/migration-guide.mdx#option-1-passing-the-account-to-the-client-methods\",\"isPage\":false,\"text\":\"\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport {\\n createBundlerClient,\\n createSmartAccountClientFromExisting\\n LocalAccountSigner,\\n type Hex,\\n} from "@aa-sdk/core";\\nimport { sepolia } from "@aa-sdk/core";\\nimport { custom, http } from "viem";\\n \\nconst chain = sepolia;\\n \\nconst client = createBundlerClient({\\n chain,\\n transport: http("JSON_RPC_URL"),\\n});\\n \\n\\n// createSmartAccountClientFromExisting is a helper method that allows you\\n// to reuse a JSON RPC client to create a Smart Account client.\\nconst smartAccountClient = createSmartAccountClientFromExisting({\\n client,\\n});\\n \\nconst account = await createLightAccount({\\n signer,\\n chain,\\n transport: custom(client),\\n});\\n \\nconst { hash } = await smartAccountClient.sendUserOperation({\\n uo: {\\n target: "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",\\n data: "0x",\\n value: 10n,\\n },\\n account, \\n});\\n\",\"title\":\"Option 1: Passing the Account to the Client Methods\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\",\"Account: Connecting to a Smart Account\"]},{\"href\":\"/migration-guide#option-2-hoisting-the-account\",\"html\":\"\\n

Hoisting the account is similar to using .connect in previous versions. You simply create your client with an account passed in to it.

\\n
import { createLightAccount } from "@account-kit/smart-contracts";\\nimport {\\n  createBundlerClient,\\n  createSmartAccountClientFromExisting\\n  LocalAccountSigner,\\n  type Hex,\\n} from "@aa-sdk/core";\\nimport { sepolia } from "@aa-sdk/core";\\nimport { http, custom } from "viem";\\n \\nconst chain = sepolia;\\n \\nconst client = createBundlerClient({\\n  chain,\\n  transport: http("JSON_RPC_URL"),\\n});\\n \\n\\nconst account = await createLightAccount({\\n  signer,\\n  transport: custom(client),\\n  chain,\\n});\\n \\nconst smartAccountClient = createSmartAccountClientFromExisting({\\n  account, \\n  client,\\n});\\n \\nconst { hash } = await smartAccountClient.sendUserOperation({\\n  uo: {\\n    target: "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",\\n    data: "0x",\\n    value: 10n,\\n  },\\n  account, \\n});
\\n\",\"id\":\"pages/migration-guide.mdx#option-2-hoisting-the-account\",\"isPage\":false,\"text\":\"\\nHoisting the account is similar to using .connect in previous versions. You simply create your client with an account passed in to it.\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport {\\n createBundlerClient,\\n createSmartAccountClientFromExisting\\n LocalAccountSigner,\\n type Hex,\\n} from "@aa-sdk/core";\\nimport { sepolia } from "@aa-sdk/core";\\nimport { http, custom } from "viem";\\n \\nconst chain = sepolia;\\n \\nconst client = createBundlerClient({\\n chain,\\n transport: http("JSON_RPC_URL"),\\n});\\n \\n\\nconst account = await createLightAccount({\\n signer,\\n transport: custom(client),\\n chain,\\n});\\n \\nconst smartAccountClient = createSmartAccountClientFromExisting({\\n account, \\n client,\\n});\\n \\nconst { hash } = await smartAccountClient.sendUserOperation({\\n uo: {\\n target: "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",\\n data: "0x",\\n value: 10n,\\n },\\n account, \\n});\\n\",\"title\":\"Option 2: Hoisting the Account\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\",\"Account: Connecting to a Smart Account\"]},{\"href\":\"/migration-guide#account-custom-accounts\",\"html\":\"\\n

In prior versions, using your own smart contract account implementations required that you extend BaseSmartContractAccount. In version 3.x.x, you can use the toSmartContractAccount method which will allow you to use any account with SmartAccountClient. toSmartContractAccount has the form of:

\\n
type toSmartContractAccount = <\\n  Name extends string = string,\\n  TTransport extends Transport = Transport\\n>({\\n  transport,\\n  chain,\\n  source,\\n  entryPointAddress,\\n  accountAddress,\\n  getAccountInitCode,\\n  signMessage,\\n  signTypedData,\\n  encodeBatchExecute,\\n  encodeExecute,\\n  getDummySignature,\\n  signUserOperationHash,\\n  encodeUpgradeToAndCall,\\n}: ToSmartContractAccountParams<Name, TTransport>) => Promise<\\n  SmartContractAccount<Name>\\n>;
\\n\",\"id\":\"pages/migration-guide.mdx#account-custom-accounts\",\"isPage\":false,\"text\":\"\\nIn prior versions, using your own smart contract account implementations required that you extend BaseSmartContractAccount. In version 3.x.x, you can use the toSmartContractAccount method which will allow you to use any account with SmartAccountClient. toSmartContractAccount has the form of:\\ntype toSmartContractAccount = <\\n Name extends string = string,\\n TTransport extends Transport = Transport\\n>({\\n transport,\\n chain,\\n source,\\n entryPointAddress,\\n accountAddress,\\n getAccountInitCode,\\n signMessage,\\n signTypedData,\\n encodeBatchExecute,\\n encodeExecute,\\n getDummySignature,\\n signUserOperationHash,\\n encodeUpgradeToAndCall,\\n}: ToSmartContractAccountParams<Name, TTransport>) => Promise<\\n SmartContractAccount<Name>\\n>;\\n\",\"title\":\"Account: Custom Accounts\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#account-simpleaccount-and-naniaccount-initialization-params\",\"html\":\"\\n

chain and transport have been added to the constructor and rpcClient has been removed.

\\n\",\"id\":\"pages/migration-guide.mdx#account-simpleaccount-and-naniaccount-initialization-params\",\"isPage\":false,\"text\":\"\\nchain and transport have been added to the constructor and rpcClient has been removed.\\n\",\"title\":\"Account: SimpleAccount and NaniAccount initialization params\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#account-simpleaccount-and-lightaccount-intialization-params\",\"html\":\"\\n

index is now called salt

\\n\",\"id\":\"pages/migration-guide.mdx#account-simpleaccount-and-lightaccount-intialization-params\",\"isPage\":false,\"text\":\"\\nindex is now called salt\\n\",\"title\":\"Account: SimpleAccount and LightAccount intialization params\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#signer-signtypeddata-signature-change\",\"html\":\"\\n

The signTypedData method found on SmartAccountSigner has been updated to match the signature found on SmartContractAccount and viem's Account.

\\n
(params: SignTypedDataParams) => Promise<Hex>; \\n \\n<\\n  const TTypedData extends TypedData | { [key: string]: unknown },\\n  TPrimaryType extends string = string\\n>(\\n  params: TypedDataDefinition<TTypedData, TPrimaryType>\\n) => Promise<Hex>;
\\n\",\"id\":\"pages/migration-guide.mdx#signer-signtypeddata-signature-change\",\"isPage\":false,\"text\":\"\\nThe signTypedData method found on SmartAccountSigner has been updated to match the signature found on SmartContractAccount and viem's Account.\\n(params: SignTypedDataParams) => Promise<Hex>; \\n \\n<\\n const TTypedData extends TypedData | { [key: string]: unknown },\\n TPrimaryType extends string = string\\n>(\\n params: TypedDataDefinition<TTypedData, TPrimaryType>\\n) => Promise<Hex>;\\n\",\"title\":\"Signer: signTypedData signature change\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#ethers-removed-methods\",\"html\":\"\\n

The with* methods have been removed from the Provider and Signer classes.\\nThe connect methods has been removed in favor of immutable properties on the Provider and Signer classes. See updated AccountSigner constructor below.

\\n\",\"id\":\"pages/migration-guide.mdx#ethers-removed-methods\",\"isPage\":false,\"text\":\"\\nThe with* methods have been removed from the Provider and Signer classes.\\nThe connect methods has been removed in favor of immutable properties on the Provider and Signer classes. See updated AccountSigner constructor below.\\n\",\"title\":\"Ethers: Removed methods\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#ethers-getpublicerc4337client--getbundlerclient-1\",\"html\":\"\\n

The getPublicErc4337Client method has been renamed to getBundlerClient to match the naming found in aa-core.

\\n\",\"id\":\"pages/migration-guide.mdx#ethers-getpublicerc4337client--getbundlerclient-1\",\"isPage\":false,\"text\":\"\\nThe getPublicErc4337Client method has been renamed to getBundlerClient to match the naming found in aa-core.\\n\",\"title\":\"Ethers: getPublicErc4337Client → getBundlerClient\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#ethers-updated-signer-adapter-constructor\",\"html\":\"\\n

The AccountSigner now takes in a SmartContractAccount as a param in its constructor.

\\n\",\"id\":\"pages/migration-guide.mdx#ethers-updated-signer-adapter-constructor\",\"isPage\":false,\"text\":\"\\nThe AccountSigner now takes in a SmartContractAccount as a param in its constructor.\\n\",\"title\":\"Ethers: Updated Signer Adapter constructor\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]},{\"href\":\"/migration-guide#core-transition-from-percent-to-multiplier-api-and-types\",\"html\":\"\\n

The Percent type and PercentSchema have been removed in favor of the Multiplier type and MultiplierSchema.

\\n

Going forward when using the feeOptions, you can specify the Multiplier type instead of a Percent. The Multiplier type is a number that represents direct multipliaction of the estimation. For example, 0.1 is 10% of the estimated value and 1 is 100% of the estimated value.

\\n
createModularAccountAlchemyClient({\\n    ...\\n    opts: {\\n      ...\\n      // The maxFeePerGas and maxPriorityFeePerGas estimated values will now be multipled by 1.5\\n      feeOptions: {\\n        // This was previously { percent: 50n }\\n        maxFeePerGas: { multiplier: 1.5 },\\n        // This was previously { percent: 25n }\\n        maxPriorityFeePerGas: { multiplier: 1.25 },\\n      },\\n    },\\n  });
\",\"id\":\"pages/migration-guide.mdx#core-transition-from-percent-to-multiplier-api-and-types\",\"isPage\":false,\"text\":\"\\nThe Percent type and PercentSchema have been removed in favor of the Multiplier type and MultiplierSchema.\\nGoing forward when using the feeOptions, you can specify the Multiplier type instead of a Percent. The Multiplier type is a number that represents direct multipliaction of the estimation. For example, 0.1 is 10% of the estimated value and 1 is 100% of the estimated value.\\ncreateModularAccountAlchemyClient({\\n ...\\n opts: {\\n ...\\n // The maxFeePerGas and maxPriorityFeePerGas estimated values will now be multipled by 1.5\\n feeOptions: {\\n // This was previously { percent: 50n }\\n maxFeePerGas: { multiplier: 1.5 },\\n // This was previously { percent: 25n }\\n maxPriorityFeePerGas: { multiplier: 1.25 },\\n },\\n },\\n });\",\"title\":\"Core: Transition from Percent to Multiplier api and types\",\"titles\":[\"Migration Guide\",\"Migrating to version 3.x.x\"]}]}],[\"index.86205aab8a6d72f2e7401f60d5be023eb735c5e3fb51e8d5406147afaef077f6\",{\"mdx\":\"---\\ntitle: Middleware\\ndescription: What is Middleware?\\n---\\n\\n# Middleware\\n\\nThe [Smart Account Client](/concepts/smart-account-client) is extended with a series of middleware. When building user operations for signing and sending, the flow can be pretty involved.\\nSending a UO requires you to get the latest nonce for an account, check if the account is deployed to set the `initCode` or `factory` and `factoryData` in the user operation, estimate fees, estimate gas, and then sign the user operation.\\nIf you want to use a paymaster, you need to generate some `dummyPaymasterAndData` to use during gas estimation, and after estimating gas you can request gas sponsorship from your paymaster.\\nMiddleware allows you to avoid having to write the same flows over and over when all you want to do is call a contract with some data or send some ETH to a destination.\\n\\n## Middleware order\\n\\n:::tip\\nWhen using the [React](/react/overview), [Core](/core/overview), or [Infra](/infra/overview) packages, the Smart Account Clients are already configured to use the appropriate middleware for your needs.\\nIf you want to sponsor gas, the Smart Account Clients in these packages abstract the relevant middleware away from you since all you need is a `policyId` to sponsor gas with Alchemy.\\n:::\\n\\nAs mentioned abve, the client can be configured with a series of middleware that always run in the same order:\\n\\n1. `dummyPaymasterAndData` - Generates a dummy paymaster and data for gas estimation if using a paymaster (default: noop)\\n2. `feeEstimator` - Estimates the fees for a user operation. If you are using our RPCs, it's important to use the [`alchemyFeeEstimator`](/reference/account-kit/infra/functions/alchemyFeeEstimator) middleware.\\n3. `gasEstimator` - Estimates the gas limits for a user operation. The default middleware calls the underlying bundler RPC to `eth_estimateUserOperationGas`.\\n4. `customMiddleware` - Allows you define custom middleware to run before requesting sponsorhip if there are any additional steps you need to take before requesting sponsorship. (default: noop)\\n5. `paymasterAndData` - Requests a gas sponsorship from a paymaster. (default: noop)\\n6. `userOperationSimulator` - Simulates a user operation to check if it will be successful. (default: noop)\\n\",\"document\":[{\"href\":\"/concepts/middleware#middleware\",\"html\":\"\\n

The Smart Account Client is extended with a series of middleware. When building user operations for signing and sending, the flow can be pretty involved.\\nSending a UO requires you to get the latest nonce for an account, check if the account is deployed to set the initCode or factory and factoryData in the user operation, estimate fees, estimate gas, and then sign the user operation.\\nIf you want to use a paymaster, you need to generate some dummyPaymasterAndData to use during gas estimation, and after estimating gas you can request gas sponsorship from your paymaster.\\nMiddleware allows you to avoid having to write the same flows over and over when all you want to do is call a contract with some data or send some ETH to a destination.

\\n\",\"id\":\"pages/concepts/middleware.mdx#middleware\",\"isPage\":true,\"text\":\"\\nThe Smart Account Client is extended with a series of middleware. When building user operations for signing and sending, the flow can be pretty involved.\\nSending a UO requires you to get the latest nonce for an account, check if the account is deployed to set the initCode or factory and factoryData in the user operation, estimate fees, estimate gas, and then sign the user operation.\\nIf you want to use a paymaster, you need to generate some dummyPaymasterAndData to use during gas estimation, and after estimating gas you can request gas sponsorship from your paymaster.\\nMiddleware allows you to avoid having to write the same flows over and over when all you want to do is call a contract with some data or send some ETH to a destination.\\n\",\"title\":\"Middleware\",\"titles\":[]},{\"href\":\"/concepts/middleware#middleware-order\",\"html\":\"\\n\\n

As mentioned abve, the client can be configured with a series of middleware that always run in the same order:

\\n
    \\n
  1. dummyPaymasterAndData - Generates a dummy paymaster and data for gas estimation if using a paymaster (default: noop)
  2. \\n
  3. feeEstimator - Estimates the fees for a user operation. If you are using our RPCs, it's important to use the alchemyFeeEstimator middleware.
  4. \\n
  5. gasEstimator - Estimates the gas limits for a user operation. The default middleware calls the underlying bundler RPC to eth_estimateUserOperationGas.
  6. \\n
  7. customMiddleware - Allows you define custom middleware to run before requesting sponsorhip if there are any additional steps you need to take before requesting sponsorship. (default: noop)
  8. \\n
  9. paymasterAndData - Requests a gas sponsorship from a paymaster. (default: noop)
  10. \\n
  11. userOperationSimulator - Simulates a user operation to check if it will be successful. (default: noop)
  12. \\n
\",\"id\":\"pages/concepts/middleware.mdx#middleware-order\",\"isPage\":false,\"text\":\"\\nWhen using the React, Core, or Infra packages, the Smart Account Clients are already configured to use the appropriate middleware for your needs.\\nIf you want to sponsor gas, the Smart Account Clients in these packages abstract the relevant middleware away from you since all you need is a policyId to sponsor gas with Alchemy.\\nAs mentioned abve, the client can be configured with a series of middleware that always run in the same order:\\n\\ndummyPaymasterAndData - Generates a dummy paymaster and data for gas estimation if using a paymaster (default: noop)\\nfeeEstimator - Estimates the fees for a user operation. If you are using our RPCs, it's important to use the alchemyFeeEstimator middleware.\\ngasEstimator - Estimates the gas limits for a user operation. The default middleware calls the underlying bundler RPC to eth_estimateUserOperationGas.\\ncustomMiddleware - Allows you define custom middleware to run before requesting sponsorhip if there are any additional steps you need to take before requesting sponsorship. (default: noop)\\npaymasterAndData - Requests a gas sponsorship from a paymaster. (default: noop)\\nuserOperationSimulator - Simulates a user operation to check if it will be successful. (default: noop)\\n\",\"title\":\"Middleware order\",\"titles\":[\"Middleware\"]}]}],[\"index.82814a42631b7c517b00016aec3f54834e2d08ebdf37d64099639b0bd7d977a4\",{\"mdx\":\"---\\ntitle: Bundler Client\\ndescription: What is the Bundler Client?\\n---\\n\\n# Bundler Client\\n\\nThe Bundler Client is similar to the [Smart Account Client](/concepts/smart-account-client) but is account agnostic. The Bundler Client only exposes methods for interacting directly with Bundler RPC and ETH RPC\\nmethods. The client also exposes the same methods as `viem`'s [`PublicClient`](https://viem.sh/docs/actions/public/introduction). In the vast majority of cases, you will not be using this client directly and will instead be using the [Smart Account Client](/concepts/smart-account-client) which wraps an instance of the Bundler Client\\nand provides the same actions as the Bundler Client.\\n\\nThe Bundler Client is EIP-1193 compliant, meaning it can easily be swapped out in place of other web3 providers (eg. `window.ethereum`).\\n\\n## Bundler Client actions\\n\\nSimilarly to the Smart Account Client, the Bundler Client is extended with a set of actions that make it easier to interact with RPC methods. The actions are all defined in [`@aa-sdk/core`](https://github.com/alchemyplatform/aa-sdk/tree/v4.x.x/aa-sdk/core/src/actions/bundler). For detailed documentation on these methods, check out the [SDK Reference Docs](/reference/aa-sdk/core).\\n\",\"document\":[{\"href\":\"/concepts/bundler-client#bundler-client\",\"html\":\"\\n

The Bundler Client is similar to the Smart Account Client but is account agnostic. The Bundler Client only exposes methods for interacting directly with Bundler RPC and ETH RPC\\nmethods. The client also exposes the same methods as viem's PublicClient. In the vast majority of cases, you will not be using this client directly and will instead be using the Smart Account Client which wraps an instance of the Bundler Client\\nand provides the same actions as the Bundler Client.

\\n

The Bundler Client is EIP-1193 compliant, meaning it can easily be swapped out in place of other web3 providers (eg. window.ethereum).

\\n\",\"id\":\"pages/concepts/bundler-client.mdx#bundler-client\",\"isPage\":true,\"text\":\"\\nThe Bundler Client is similar to the Smart Account Client but is account agnostic. The Bundler Client only exposes methods for interacting directly with Bundler RPC and ETH RPC\\nmethods. The client also exposes the same methods as viem's PublicClient. In the vast majority of cases, you will not be using this client directly and will instead be using the Smart Account Client which wraps an instance of the Bundler Client\\nand provides the same actions as the Bundler Client.\\nThe Bundler Client is EIP-1193 compliant, meaning it can easily be swapped out in place of other web3 providers (eg. window.ethereum).\\n\",\"title\":\"Bundler Client\",\"titles\":[]},{\"href\":\"/concepts/bundler-client#bundler-client-actions\",\"html\":\"\\n

Similarly to the Smart Account Client, the Bundler Client is extended with a set of actions that make it easier to interact with RPC methods. The actions are all defined in @aa-sdk/core. For detailed documentation on these methods, check out the SDK Reference Docs.

\",\"id\":\"pages/concepts/bundler-client.mdx#bundler-client-actions\",\"isPage\":false,\"text\":\"\\nSimilarly to the Smart Account Client, the Bundler Client is extended with a set of actions that make it easier to interact with RPC methods. The actions are all defined in @aa-sdk/core. For detailed documentation on these methods, check out the SDK Reference Docs.\",\"title\":\"Bundler Client actions\",\"titles\":[\"Bundler Client\"]}]}],[\"index.db6e0c64f610b67d07a3f6d3983802403941121814d9fb545fcf128e231735cc\",{\"mdx\":\"---\\ntitle: Drop and Replace\\ndescription: Learn how to use Drop and Replace to retry failing user operations.\\n---\\n\\n# Drop and replace failing user operations\\n\\nIn the previous guides, we learned how to send user operations with gas sponsorship, but what happens when a user operation fails to mine? In this guide,\\nwe'll cover how to use drop and replace to resend failing user operations and ensure they get mined.\\n\\n## What is drop and replace?\\n\\nIf fees change and your user operation gets stuck in the mempool, you can use drop and replace to resend the user operation with higher fees. This is most useful\\nwhen used in combination with [`waitForUserOperationTransaction`](/reference/aa-sdk/core/functions/waitForUserOperationTransaction) to ensure the transaction is mined\\nand then resend the user operation with higher fees if waiting times out.\\n\\nDrop and replace works by resubmitting a user operation with the greater of:\\n\\n1. 10% higher fees\\n2. The current minimum fees\\n\\nWe export a `dropAndReplace` function from `@aa-sdk/core` that you can use to handle this flow for you and is automatically added to the Smart Account Client.\\n\\n## How to drop and replace effectively\\n\\nLet's run through an example that uses drop and replace if waiting for a user operation to mine times out.\\n\\n:::warning\\nIf sponsoring gas, like in the example below, each call to `sendUserOperation` and `dropAndReplace` will generate pending gas sponsorships in your dashboard. This can result in you hitting your gas manager limit.\\nAt the moment, pending sponsorships expire after 10 minutes of inactivity, but it is possible that retrying excessively can temporarily exhaust your sponsorship limits.\\n:::\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { client } from \\\"./client\\\";\\n\\n// 1. send a user operation\\nconst { hash, request } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\\n\\ntry {\\n // 2. wait for it to be mined\\n const txHash = await client.waitForUserOperationTransaction({ hash });\\n} catch (e) {\\n // 3. if it fails, resubmit the user operation via drop and replace\\n const { hash: newHash } = await client.dropAndReplaceUserOperation({\\n uoToDrop: request,\\n });\\n\\n // 4. wait for the new user operation to be mined\\n await client.waitForUserOperationTransaction({ hash: newHash });\\n}\\n```\\n\\n```ts twoslash [client.ts] filename=\\\"client.ts\\\"\\n// [!include ~/shared/infra/client.ts]\\n```\\n\\n:::\\n\\nIn the above example, we only try to drop and replace once before failing completely, but you can build more complex retry logic using this combination of `waitForUserOperationTransaction` and `dropAndReplace`.\\n\",\"document\":[{\"href\":\"/infra/drop-and-replace#drop-and-replace-failing-user-operations\",\"html\":\"\\n

In the previous guides, we learned how to send user operations with gas sponsorship, but what happens when a user operation fails to mine? In this guide,\\nwe'll cover how to use drop and replace to resend failing user operations and ensure they get mined.

\\n\",\"id\":\"pages/infra/drop-and-replace.mdx#drop-and-replace-failing-user-operations\",\"isPage\":true,\"text\":\"\\nIn the previous guides, we learned how to send user operations with gas sponsorship, but what happens when a user operation fails to mine? In this guide,\\nwe'll cover how to use drop and replace to resend failing user operations and ensure they get mined.\\n\",\"title\":\"Drop and replace failing user operations\",\"titles\":[]},{\"href\":\"/infra/drop-and-replace#what-is-drop-and-replace\",\"html\":\"\\n

If fees change and your user operation gets stuck in the mempool, you can use drop and replace to resend the user operation with higher fees. This is most useful\\nwhen used in combination with waitForUserOperationTransaction to ensure the transaction is mined\\nand then resend the user operation with higher fees if waiting times out.

\\n

Drop and replace works by resubmitting a user operation with the greater of:

\\n
    \\n
  1. 10% higher fees
  2. \\n
  3. The current minimum fees
  4. \\n
\\n

We export a dropAndReplace function from @aa-sdk/core that you can use to handle this flow for you and is automatically added to the Smart Account Client.

\\n\",\"id\":\"pages/infra/drop-and-replace.mdx#what-is-drop-and-replace\",\"isPage\":false,\"text\":\"\\nIf fees change and your user operation gets stuck in the mempool, you can use drop and replace to resend the user operation with higher fees. This is most useful\\nwhen used in combination with waitForUserOperationTransaction to ensure the transaction is mined\\nand then resend the user operation with higher fees if waiting times out.\\nDrop and replace works by resubmitting a user operation with the greater of:\\n\\n10% higher fees\\nThe current minimum fees\\n\\nWe export a dropAndReplace function from @aa-sdk/core that you can use to handle this flow for you and is automatically added to the Smart Account Client.\\n\",\"title\":\"What is drop and replace?\",\"titles\":[\"Drop and replace failing user operations\"]},{\"href\":\"/infra/drop-and-replace#how-to-drop-and-replace-effectively\",\"html\":\"\\n

Let's run through an example that uses drop and replace if waiting for a user operation to mine times out.

\\n\\n
// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n  apiKey: "YOUR_API_KEY",\\n  policyId: "YOUR_POLICY_ID",\\n  chain: sepolia,\\n  account: await createLightAccount({\\n    chain: sepolia,\\n    transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  }),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./client";\\n \\n// 1. send a user operation\\nconst { hash, request } = await client.sendUserOperation({\\n  uo: {\\n    target: "0xTARGET_ADDRESS",\\n    data: "0x",\\n    value: 0n,\\n  },\\n});\\n \\ntry {\\n  // 2. wait for it to be mined\\n  const txHash = await client.waitForUserOperationTransaction({ hash });\\n} catch (e) {\\n  // 3. if it fails, resubmit the user operation via drop and replace\\n  const { hash: newHash } = await client.dropAndReplaceUserOperation({\\n    uoToDrop: request,\\n  });\\n \\n  // 4. wait for the new user operation to be mined\\n  await client.waitForUserOperationTransaction({ hash: newHash });\\n}
import { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n  apiKey: "YOUR_API_KEY",\\n  policyId: "YOUR_POLICY_ID",\\n  chain: sepolia,\\n  account: await createLightAccount({\\n    chain: sepolia,\\n    transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  }),\\n});
\\n

In the above example, we only try to drop and replace once before failing completely, but you can build more complex retry logic using this combination of waitForUserOperationTransaction and dropAndReplace.

\",\"id\":\"pages/infra/drop-and-replace.mdx#how-to-drop-and-replace-effectively\",\"isPage\":false,\"text\":\"\\nLet's run through an example that uses drop and replace if waiting for a user operation to mine times out.\\nIf sponsoring gas, like in the example below, each call to sendUserOperation and dropAndReplace will generate pending gas sponsorships in your dashboard. This can result in you hitting your gas manager limit.\\nAt the moment, pending sponsorships expire after 10 minutes of inactivity, but it is possible that retrying excessively can temporarily exhaust your sponsorship limits.\\n// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n apiKey: "YOUR_API_KEY",\\n policyId: "YOUR_POLICY_ID",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./client";\\n \\n// 1. send a user operation\\nconst { hash, request } = await client.sendUserOperation({\\n uo: {\\n target: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: 0n,\\n },\\n});\\n \\ntry {\\n // 2. wait for it to be mined\\n const txHash = await client.waitForUserOperationTransaction({ hash });\\n} catch (e) {\\n // 3. if it fails, resubmit the user operation via drop and replace\\n const { hash: newHash } = await client.dropAndReplaceUserOperation({\\n uoToDrop: request,\\n });\\n \\n // 4. wait for the new user operation to be mined\\n await client.waitForUserOperationTransaction({ hash: newHash });\\n}import { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n apiKey: "YOUR_API_KEY",\\n policyId: "YOUR_POLICY_ID",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\nIn the above example, we only try to drop and replace once before failing completely, but you can build more complex retry logic using this combination of waitForUserOperationTransaction and dropAndReplace.\",\"title\":\"How to drop and replace effectively\",\"titles\":[\"Drop and replace failing user operations\"]}]}],[\"index.091593a8a61fc9591c0773330e8d33395db926acb3133c4f4f799b75f29a536f\",{\"mdx\":\"---\\ntitle: Authenticate Users\\ndescription: Learn how to authenticate users using Account Kit in a React application.\\n---\\n\\n# Authenticate users\\n\\nAccount Kit makes it really easy to authenticate your users using a number of different authentication methods. If you followed the [quickstart](/react/quickstart), then your app is already setup to authenticate users and you can skip this guide!\\n\\nIn this guide, we'll show you two different ways to authenticate users:\\n\\n1. Using our UI components to handle the entire authentication flow.\\n2. Using our React hooks to build your own custom UI.\\n\\n## Using our UI components\\n\\nAccount Kit allows you to use pre-built, [highly customizable](https://aa-sdk-ui-demo.vercel.app/) UI components to handle authenticating your users. The way you use them is very flexible since you can use the pre-built modal or even embed the Auth card directly in your application.\\n\\n### Modal auth\\n\\nAssuming your application has been [set up](/react/quickstart), using UI components is the easiest way to authenticate users. All you have to do is leverage the [`useAuthModal`](/reference/account-kit/react/hooks/useAuthModal) hook and provide users a CTA to open the modal.\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport { useAuthModal } from \\\"@account-kit/react\\\";\\n\\nexport default function MyPage() {\\n const { openAuthModal } = useAuthModal();\\n\\n return ;\\n}\\n```\\n\\nThat's it! When the user clicks that button, the modal will open and they can complete authentication. Once they are authenticated, you can use the [`useAccount`](/reference/account-kit/react/hooks/useAccount) hook to get the logged in user's SCA address\\n\\n### Embedded auth\\n\\nThe body of the Auth Modal is also exported for you to use directly in your application. This is useful if you don't want a modal flow for login and want a standalone page using the card.\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport { AuthCard } from \\\"@account-kit/react\\\";\\n\\nexport default function MyLoginPage() {\\n return (\\n
\\n \\n
\\n );\\n}\\n```\\n\\nThat's it! The user can now input their credentials and complete login. Once they are authenticated, you can use the [`useAccount`](/reference/account-kit/react/hooks/useAccount) hook to get the logged in user's SCA address\\n\\n## Using our React hooks\\n\\nIf you don't want to use our pre-built UI components, you can also use the [`useAuthenticate`](/reference/account-kit/react/hooks/useAuthenticate) hook to build your own custom UI.\\n\\n### Email authentication\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from \\\"@account-kit/react\\\";\\n\\n// This examples uses email authentication\\n// you can also use passkeys if the user has one created\\nexport default function MyLoginPage() {\\n const { authenticate, isPending } = useAuthenticate();\\n const [email, setEmail] = React.useState(\\\"\\\");\\n\\n return (\\n
\\n setEmail(e.target.value)}\\n />\\n \\n
\\n );\\n}\\n```\\n\\n### Passkey auth with email backup\\n\\nThis approach will allow you to login or signup users using a passkey as the primary auth mechanism and register an email as a backup.\\n\\n:::danger\\nIt's important that you verify this email to be correct first! Otherwise, if a user loses their passkey, they will not be able to recover their account.\\n:::\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyLoginPage() {\\n const { authenticate, isPending } = useAuthenticate();\\n const [email, setEmail] = React.useState(\\\"\\\");\\n\\n return (\\n
\\n setEmail(e.target.value)}\\n />\\n \\n
\\n );\\n}\\n```\\n\\n### Existing Passkey\\n\\nIf your user already has a passkey, then you can authenticate with that directly. This is useful if you want to use email as a signup mechanism, but provide easier login methods for your users via passkeys.\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyLoginPage() {\\n const { authenticate } = useAuthenticate();\\n\\n return (\\n
\\n authenticate({ type: \\\"passkey\\\", createNew: false })}\\n >\\n Login\\n \\n
\\n );\\n}\\n```\\n\",\"document\":[{\"href\":\"/react/authenticate-users#authenticate-users\",\"html\":\"\\n

Account Kit makes it really easy to authenticate your users using a number of different authentication methods. If you followed the quickstart, then your app is already setup to authenticate users and you can skip this guide!

\\n

In this guide, we'll show you two different ways to authenticate users:

\\n
    \\n
  1. Using our UI components to handle the entire authentication flow.
  2. \\n
  3. Using our React hooks to build your own custom UI.
  4. \\n
\\n\",\"id\":\"pages/react/authenticate-users.mdx#authenticate-users\",\"isPage\":true,\"text\":\"\\nAccount Kit makes it really easy to authenticate your users using a number of different authentication methods. If you followed the quickstart, then your app is already setup to authenticate users and you can skip this guide!\\nIn this guide, we'll show you two different ways to authenticate users:\\n\\nUsing our UI components to handle the entire authentication flow.\\nUsing our React hooks to build your own custom UI.\\n\\n\",\"title\":\"Authenticate users\",\"titles\":[]},{\"href\":\"/react/authenticate-users#using-our-ui-components\",\"html\":\"\\n

Account Kit allows you to use pre-built, highly customizable UI components to handle authenticating your users. The way you use them is very flexible since you can use the pre-built modal or even embed the Auth card directly in your application.

\\n\",\"id\":\"pages/react/authenticate-users.mdx#using-our-ui-components\",\"isPage\":false,\"text\":\"\\nAccount Kit allows you to use pre-built, highly customizable UI components to handle authenticating your users. The way you use them is very flexible since you can use the pre-built modal or even embed the Auth card directly in your application.\\n\",\"title\":\"Using our UI components\",\"titles\":[\"Authenticate users\"]},{\"href\":\"/react/authenticate-users#modal-auth\",\"html\":\"\\n

Assuming your application has been set up, using UI components is the easiest way to authenticate users. All you have to do is leverage the useAuthModal hook and provide users a CTA to open the modal.

\\n
import React from "react";\\nimport { useAuthModal } from "@account-kit/react";\\n \\nexport default function MyPage() {\\n  const { openAuthModal } = useAuthModal();\\n \\n  return <button onClick={openAuthModal}>Authenticate</button>;\\n}
\\n

That's it! When the user clicks that button, the modal will open and they can complete authentication. Once they are authenticated, you can use the useAccount hook to get the logged in user's SCA address

\\n\",\"id\":\"pages/react/authenticate-users.mdx#modal-auth\",\"isPage\":false,\"text\":\"\\nAssuming your application has been set up, using UI components is the easiest way to authenticate users. All you have to do is leverage the useAuthModal hook and provide users a CTA to open the modal.\\nimport React from "react";\\nimport { useAuthModal } from "@account-kit/react";\\n \\nexport default function MyPage() {\\n const { openAuthModal } = useAuthModal();\\n \\n return <button onClick={openAuthModal}>Authenticate</button>;\\n}\\nThat's it! When the user clicks that button, the modal will open and they can complete authentication. Once they are authenticated, you can use the useAccount hook to get the logged in user's SCA address\\n\",\"title\":\"Modal auth\",\"titles\":[\"Authenticate users\",\"Using our UI components\"]},{\"href\":\"/react/authenticate-users#embedded-auth\",\"html\":\"\\n

The body of the Auth Modal is also exported for you to use directly in your application. This is useful if you don't want a modal flow for login and want a standalone page using the card.

\\n
import React from "react";\\nimport { AuthCard } from "@account-kit/react";\\n \\nexport default function MyLoginPage() {\\n  return (\\n    <div className="flex flex-row p-4 bg-white border border-gray-200 rounded-lg">\\n      <AuthCard />\\n    </div>\\n  );\\n}
\\n

That's it! The user can now input their credentials and complete login. Once they are authenticated, you can use the useAccount hook to get the logged in user's SCA address

\\n\",\"id\":\"pages/react/authenticate-users.mdx#embedded-auth\",\"isPage\":false,\"text\":\"\\nThe body of the Auth Modal is also exported for you to use directly in your application. This is useful if you don't want a modal flow for login and want a standalone page using the card.\\nimport React from "react";\\nimport { AuthCard } from "@account-kit/react";\\n \\nexport default function MyLoginPage() {\\n return (\\n <div className="flex flex-row p-4 bg-white border border-gray-200 rounded-lg">\\n <AuthCard />\\n </div>\\n );\\n}\\nThat's it! The user can now input their credentials and complete login. Once they are authenticated, you can use the useAccount hook to get the logged in user's SCA address\\n\",\"title\":\"Embedded auth\",\"titles\":[\"Authenticate users\",\"Using our UI components\"]},{\"href\":\"/react/authenticate-users#using-our-react-hooks\",\"html\":\"\\n

If you don't want to use our pre-built UI components, you can also use the useAuthenticate hook to build your own custom UI.

\\n\",\"id\":\"pages/react/authenticate-users.mdx#using-our-react-hooks\",\"isPage\":false,\"text\":\"\\nIf you don't want to use our pre-built UI components, you can also use the useAuthenticate hook to build your own custom UI.\\n\",\"title\":\"Using our React hooks\",\"titles\":[\"Authenticate users\"]},{\"href\":\"/react/authenticate-users#email-authentication\",\"html\":\"\\n
import React from "react";\\nimport {\\n  type UseAuthenticateResult,\\n  useAuthenticate,\\n} from "@account-kit/react";\\n \\n// This examples uses email authentication\\n// you can also use passkeys if the user has one created\\nexport default function MyLoginPage() {\\n  const { authenticate, isPending } = useAuthenticate();\\n  const [email, setEmail] = React.useState("");\\n \\n  return (\\n    <div>\\n      <input\\n        type="email"\\n        value={email}\\n        onChange={(e) => setEmail(e.target.value)}\\n      />\\n      <button onClick={() => authenticate({ type: "email", email })}>\\n        Login\\n      </button>\\n    </div>\\n  );\\n}
\\n\",\"id\":\"pages/react/authenticate-users.mdx#email-authentication\",\"isPage\":false,\"text\":\"\\nimport React from "react";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from "@account-kit/react";\\n \\n// This examples uses email authentication\\n// you can also use passkeys if the user has one created\\nexport default function MyLoginPage() {\\n const { authenticate, isPending } = useAuthenticate();\\n const [email, setEmail] = React.useState("");\\n \\n return (\\n <div>\\n <input\\n type="email"\\n value={email}\\n onChange={(e) => setEmail(e.target.value)}\\n />\\n <button onClick={() => authenticate({ type: "email", email })}>\\n Login\\n </button>\\n </div>\\n );\\n}\\n\",\"title\":\"Email authentication\",\"titles\":[\"Authenticate users\",\"Using our React hooks\"]},{\"href\":\"/react/authenticate-users#passkey-auth-with-email-backup\",\"html\":\"\\n

This approach will allow you to login or signup users using a passkey as the primary auth mechanism and register an email as a backup.

\\n\\n
import React from "react";\\nimport {\\n  type UseAuthenticateResult,\\n  useAuthenticate,\\n} from "@account-kit/react";\\n \\nexport default function MyLoginPage() {\\n  const { authenticate, isPending } = useAuthenticate();\\n  const [email, setEmail] = React.useState("");\\n \\n  return (\\n    <div>\\n      <input\\n        type="email"\\n        value={email}\\n        onChange={(e) => setEmail(e.target.value)}\\n      />\\n      <button onClick={() => authenticate({ type: "passkey", email })}>\\n        Login\\n      </button>\\n    </div>\\n  );\\n}
\\n\",\"id\":\"pages/react/authenticate-users.mdx#passkey-auth-with-email-backup\",\"isPage\":false,\"text\":\"\\nThis approach will allow you to login or signup users using a passkey as the primary auth mechanism and register an email as a backup.\\nIt's important that you verify this email to be correct first! Otherwise, if a user loses their passkey, they will not be able to recover their account.\\nimport React from "react";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from "@account-kit/react";\\n \\nexport default function MyLoginPage() {\\n const { authenticate, isPending } = useAuthenticate();\\n const [email, setEmail] = React.useState("");\\n \\n return (\\n <div>\\n <input\\n type="email"\\n value={email}\\n onChange={(e) => setEmail(e.target.value)}\\n />\\n <button onClick={() => authenticate({ type: "passkey", email })}>\\n Login\\n </button>\\n </div>\\n );\\n}\\n\",\"title\":\"Passkey auth with email backup\",\"titles\":[\"Authenticate users\",\"Using our React hooks\"]},{\"href\":\"/react/authenticate-users#existing-passkey\",\"html\":\"\\n

If your user already has a passkey, then you can authenticate with that directly. This is useful if you want to use email as a signup mechanism, but provide easier login methods for your users via passkeys.

\\n
import React from "react";\\nimport {\\n  type UseAuthenticateResult,\\n  useAuthenticate,\\n} from "@account-kit/react";\\n \\nexport default function MyLoginPage() {\\n  const { authenticate } = useAuthenticate();\\n \\n  return (\\n    <div>\\n      <button\\n        onClick={() => authenticate({ type: "passkey", createNew: false })}\\n      >\\n        Login\\n      </button>\\n    </div>\\n  );\\n}
\",\"id\":\"pages/react/authenticate-users.mdx#existing-passkey\",\"isPage\":false,\"text\":\"\\nIf your user already has a passkey, then you can authenticate with that directly. This is useful if you want to use email as a signup mechanism, but provide easier login methods for your users via passkeys.\\nimport React from "react";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from "@account-kit/react";\\n \\nexport default function MyLoginPage() {\\n const { authenticate } = useAuthenticate();\\n \\n return (\\n <div>\\n <button\\n onClick={() => authenticate({ type: "passkey", createNew: false })}\\n >\\n Login\\n </button>\\n </div>\\n );\\n}\",\"title\":\"Existing Passkey\",\"titles\":[\"Authenticate users\",\"Using our React hooks\"]}]}],[\"index.2b8d86d768f660c23e73695fbeee7bef986f5ff5a8a3c862ee8e159d659e893f\",{\"mdx\":\"---\\ntitle: Types\\ndescription: Glossary of types in aa-sdk\\n---\\n\\n# Types\\n\\n## `BatchUserOperationCallData`\\n\\nAn array of `UserOperationCallData`, representing a sequence of `UserOperations` to be executed in batch by calling the `executeBatch` function on the `SmartContractAccount` contract. Check out our guide on [How to submit batch transactions](#TODO/using-smart-accounts/batch-user-operations) to learn more about batching multiple transactions into a single `UserOperation`.\\n\\n:::details[BatchUserOperationCallData]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/types.ts:BatchUserOperationCallData]\\n```\\n\\n:::\\n\\n## `BigNumberish`\\n\\nA type that can be a hexadecimal string prefixed with [`Hex`](https://viem.sh/docs/glossary/types#hex), a `bigint`, or a `number`. It is used to represent values that can be converted to or operate as big integers.\\n\\n:::details[BigNumberish]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/utils/schema.ts:BigNumberish]\\n```\\n\\n:::\\n\\n## `BigNumberishRange`\\n\\nAn object type that may contain optional `min` and `max` fields, each of which accepts a `BigNumberish` value. This type is used to specify a numerical range, including both the minimum and maximum bounds.\\n\\n:::details[BigNumberishRange]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/utils/schema.ts:BigNumberishRange]\\n```\\n\\n:::\\n\\n## `BundlerAction`\\n\\nBundler Actions are `viem` [`Actions`](https://viem.sh/docs/actions/public/introduction) that map one-to-one with \\\"public\\\" [`Bundler`](./terms#bundler) RPC methods (`eth_sendUserOperation`, `eth_getUserOperationByHash`, etc.) under the [EIP-4337](https://eips.ethereum.org/EIPS/eip-4337) and [EIP-6900](https://eips.ethereum.org/EIPS/eip-6900) standards. They are used with a [`BundlerClient`](#bundlerclient). `BundlerActions` do not require any special permissions, nor do they provide \\\"signing\\\" capabilities to the user. Examples of `BundlerActions` include retrieving the details of a specific user operation, estimating user operation gas, etc.\\n\\n:::details[BundlerAction]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/client/decorators/bundlerClient.ts:BundlerActions]\\n```\\n\\n:::\\n\\n## `BundlerClient`\\n\\n`BundlerClient` is a custom `viem` [`Client`](https://viem.sh/docs/clients/custom) we have built our own, where we extended viem's [`PublicClient`](https://viem.sh/docs/clients/public) with [`BundlerActions`](#bundleraction), which are `Actions` that provide custom functionalities of [EIP-4337](https://eips.ethereum.org/EIPS/eip-4337) and [EIP-6900](https://eips.ethereum.org/EIPS/eip-6900) standards. `BundlerClient` is an intermediary or connector that enables client applications to interact with the [`Bundler`](https://eips.ethereum.org/EIPS/eip-4337#definitions) that you are using. `BundlerClient`, because it extends `PublicClient`, supports [`Public Actions`](https://viem.sh/docs/actions/public/introduction) for client applications to connect, query, and interact with the blockchain (i.e., sending transactions, smart contract executions, data retrieval, etc.).\\n\\n:::details[BundlerClient]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/client/bundlerClient.ts:BundlerClient]\\n```\\n\\n:::\\n\\n## `ClientMiddleware`\\n\\nMiddleware represents different operations involved in the [`SmartAccountClient`](/concepts/smart-account-client) pipeline for constructing a user operation given the user inputs by populating the UO with other data, including gas fees, paymaster data, etc.\\n\\n:::details[ClientMiddleware]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/middleware/types.ts:ClientMiddleware]\\n```\\n\\n:::\\n\\n## `ClientMiddlewareConfig`\\n\\nConfiguration object to configure `ClientMiddleware` of the [`SmartAccountClient`](/concepts/smart-account-client) during the client instantiation. You can configure using this object to configure the middleware of your interest selectively.\\n\\n:::details[ClientMiddlewareFn]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/client/types.ts:ClientMiddlewareConfig]\\n```\\n\\n:::\\n\\n## `ClientMiddlewareFn`\\n\\nEach middleware is a function that takes in a user operation object, `UserOperationStruct`, performs its job to retrieve or compute the data, and populate different fields of the user operation to pass onto the next middleware in the pipeline before being signed and sent to the network. `ClientMiddlewareFn` is the function type that represents each middleware. In optional [`UserOperationOverrides`](#useroperationoverrides), and [`UserOperationFeeOptions`](https://github.com/alchemyplatform/aa-sdk/blob/v4.x.x/aa-sdk/core/src/types.ts#L55), and returns a promise that resolves to a modified `UserOperationStruct`. This function is what you specify as your overridden middleware value for applying custom logic during the `UserOperationStruct` object to be sent to the bundler for on-chain execution.\\n\\n:::details[ClientMiddlewareFn]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/middleware/types.ts:ClientMiddlewareFn]\\n```\\n\\n:::\\n\\n## `EntryPointDef`\\n\\nAn object type that defines the interface for `EntryPoint` functions for packing the user operation to the optimized data structure to enhance performance and reduce gas costs of transactions, and generating the hash of the user operation for the format compatible to the specified `Chain` and `EntryPointVersion`.\\n\\n:::details[EntryPointDef]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/entrypoint/types.ts:EntryPointDef]\\n```\\n\\n:::\\n\\n## `Multiplier`\\n\\nAn object type with a required `multipler` field, which is a `number` value with max precision of 4 decimal places.\\n\\n:::details[Multiplier]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/utils/schema.ts:Multiplier\\n```\\n\\n:::\\n\\n## `SmartAccountAuthenticator`\\n\\nAn extension of the [`SmartAccountSigner`](#smartaccountsigner) interface, this interface contains authentication-related functions in addition to the signing methods of the `SmartAccountSigner`. It provides methods to authenticate the signer (`authenticate`) as the \\\"authorized\\\" signer, often as the owner, of the `SmartContractAccount`. It also has methods to retrieve authentication details (`getAuthDetails`) about the signer instance that the user is using to authenticate to one's account.\\n\\n:::details[SmartAccountAuthenticator]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/signer/types.ts:SmartAccountAuthenticator]\\n```\\n\\n:::\\n\\n## `SmartAccountClient`\\n\\n`SmartAccountClient` is a custom `viem` `Client`, like the [`BundlerClient`](#bundlerclient), which is an intermediary or connector that enables your client application to interact with the `SmartContractAccount`. `SmartAccountClient` is analogous to the [`WalletClient`](https://viem.sh/docs/clients/wallet). The difference is that while `WalletClient` has [`WalletActions`](https://viem.sh/docs/actions/wallet/introduction) that lets your client application interact with an [Externally-owned account (EOA)](https://ethereum.org/developers/docs/accounts) with a [wallet](./terms#wallet), `SmartAccountClient` provides [`SmartAccountClientActions`](#smartaccountclientaction) for client applications to interact with `SmartContractAccounts`.\\n\\n:::details[SmartAccountClient]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/client/smartAccountClient.ts:SmartAccountClient]\\n```\\n\\n:::\\n\\n## `SmartAccountClientAction`\\n\\n`SmartAccountClientActions` are `viem` [`Actions`](https://viem.sh/docs/actions/wallet/introduction) that map one-to-one with smart contract account-related or \\\"signable\\\" actions, such as constructing user operation requests to be sent to the [`Bundler`](./terms#bundler), signing messages or user operation requests, sending user operations to the `Bundler`, upgrading accounts to different implementation address, etc. They are used with a `SmartAccountClient`. `SmartAccountClientActions` require special permissions and provide signing capabilities for `SmartContractAccounts`.\\n\\n:::details[SmartAccountClientAction]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/client/smartAccountClient.ts:SmartAccountClientActions]\\n```\\n\\n:::\\n\\n## `SmartAccountSigner`\\n\\nAn interface representing a signer capable of signing messages and typed data. It provides methods to retrieve the signer's address (`getAddress`), sign a message (`signMessage`), and sign typed data (`signTypedData`). `SmartAccountSigner` refers to the [`Signer`](./terms#signer) instance responsible for the signing activities using its private key for smart account activities. Often, the `Signer` is referred to as the `Owner` of the account as it has the authority to use the smart account on-chain with its signatures.\\n\\n:::details[SmartAccountSigner]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/signer/types.ts:SmartAccountSigner]\\n```\\n\\n:::\\n\\n## `SmartContractAccount`\\n\\nAs smart contract accounts are essentially the contract codes that operate on the blockchain, `SmartContractAccount` defines the interface with different functionalities for managing and interacting with the contract account. It includes different functionalities for creating, managing, and using your smart account. In addition to supporting all functionalities achieved with a basic [EOA](./terms#wallet) alone, `SmartContractAccount` can have custom capabilities such as automating processes or executing actions based on predefined conditions. Smart contract wallets allow users to customize how they manage their digital assets, offering a more tailored approach to handling funds securely. `SmartContractAccount` type extends `viem`'s [`Account`](https://viem.sh/docs/accounts/custom), and instantiation of an account is done using the [`toSmartContractAccount`](/reference/aa-sdk/core/functions/toSmartContractAccount) action.\\n\\n:::details[SmartContractAccount]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/account/smartContractAccount.ts:SmartContractAccount]\\n```\\n\\n:::\\n\\n## `StateOverride`\\n\\nA type defining state overrides for [`eth_call`](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-eth#eth-call) method. An optional address-to-state mapping, where each entry specifies some state to be ephemerally overridden prior to executing the call.\\nState overrides allow you to customize the network state for the purpose of the simulation, so this feature is useful when you need to test or simulate scenarios under conditions that aren’t currently present on the live network.\\n\\n## `ToSmartContractAccountParams`\\n\\nThis type defines the parameters to the `SmartContractAccount` instantiation action, [`toSmartContractAccount`](/reference/aa-sdk/core/functions/toSmartContractAccount). You can configure this parameter to specify the [`Transport`](https://viem.sh/docs/clients/intro#transports), [`Chain`](https://viem.sh/docs/glossary/types#chain), [`EntryPointDef`](#entrypointdef), and other base functionalities of the smart account that you are creating.\\n\\n:::details[ToSmartContractAccountParams]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/account/smartContractAccount.ts:ToSmartContractAccountParams]\\n```\\n\\n:::\\n\\n## `User`\\n\\n`User` is a type that defines the model for the details of a user's Embedded Account via an Alchemy Signer. It includes the user's `email`, `orgId`, `userId`, `userId`, `address` (the EOA signer address corresponding to the user credentials), and `credentialId`. You can use the [`useUser`](/reference/account-kit/react/hooks/useUser) react hook to look up a user.\\n\\n:::details[User]\\n\\n```ts\\n// [!include ~/../account-kit/signer/src/client/types.ts:User]\\n```\\n\\n:::\\n\\n## `UserOperationCallData`\\n\\n`UserOperationCallData` is a type that represents the user's \\\"intent\\\" or the desired outcome representing a specific objective a user aims to accomplish. It includes `target` (the destination address), `data` (the [`Transaction calldata`](./terms#transaction-calldata)), and `value` (the amount value of ETH, or the native token to send). It acts as the input to the `sendUserOperation` method on [`SmartAccountClient`](#smartaccountclient).\\n\\n:::details[UserOperationCallData]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/types.ts:UserOperationCallData]\\n```\\n\\n:::\\n\\n## `UserOperationEstimateGasResponse`\\n\\nAn interface that defines the structure for the response received from the RPC method [`eth_estimateUserOperationGas`](https://docs.alchemy.com/reference/eth-estimateuseroperationgas). This response provides detailed information about the estimated gas usage for a `UserOperation`.\\n\\n:::details[UserOperationEstimateGasResponse]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/types.ts:UserOperationEstimateGasResponse]\\n```\\n\\n:::\\n\\n## `UserOperationOverrides`\\n\\nPartial structure for overriding default values in a `UserOperationStruct`, such as gas limits and fees. Available fields include `maxFeePerGas`, `maxPriorityFeePerGas`, `callGasLimit`, `preVerificationGas`, `verificationGasLimit`, `paymasterAndData`, or `nonceKey`. You can also specify a `stateOverride` to be passed into `eth_estimateUserOperationGas` during gas estimation. These override values are available from each [`ClientMiddleware`](#clientmiddleware) of the `SmartAccountClient`. Check out [`UserOperationOverrides`](https://github.com/alchemyplatform/aa-sdk/blob/v4.x.x/aa-sdk/core/src/types.ts#L97) page to learn more.\\n\\n:::details[UserOperationOverrides]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/types.ts:UserOperationOverrides]\\n```\\n\\n:::\\n\\n## `UserOperationReceipt`\\n\\nAn interface that defines the structure for the response received from the RPC method [`eth_getUserOperationReceipt`](https://docs.alchemy.com/reference/eth-getuseroperationreceipt). It includes details like sender, nonce, gas cost, and success status of the `UserOperation`.\\n\\n:::details[UserOperationReceipt]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/types.ts#UserOperationReceipt\\n```\\n\\n:::\\n\\n## `UserOperationRequest`\\n\\nInterface for the request format required for a JSON-RPC request to `eth_sendUserOperation`. It includes sender, nonce, gas limits, fees, and more fields.\\n\\n:::details[UserOperationRequest]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/types.ts#UserOperationRequest\\n```\\n\\n:::\\n\\n## `UserOperationResponse`\\n\\nAn interface that defines the structure for the response received from the RPC method [`eth_getUserOperationByHash`](https://docs.alchemy.com/reference/eth-getuseroperationbyhash), detailing the result of executing a `UserOperation`. It includes the block number, block hash, transaction hash and more information associated with the UO.\\n\\n:::details[UserOperationResponse]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/types.ts#UserOperationResponse\\n```\\n\\n:::\\n\\n## `UserOperationStruct`\\n\\nInterface for structuring a `UserOperation`, with fields similar to `UserOperationRequest` but used for building requests.\\n\\n:::details[UserOperationStruct]\\n\\n```ts\\n// [!include ~/../aa-sdk/core/src/types.ts#UserOperationStruct\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/resources/types#types\",\"html\":\"\\n\",\"id\":\"pages/resources/types.mdx#types\",\"isPage\":true,\"text\":\"\\n\",\"title\":\"Types\",\"titles\":[]},{\"href\":\"/resources/types#batchuseroperationcalldata\",\"html\":\"\\n

An array of UserOperationCallData, representing a sequence of UserOperations to be executed in batch by calling the executeBatch function on the SmartContractAccount contract. Check out our guide on How to submit batch transactions to learn more about batching multiple transactions into a single UserOperation.

\\n
BatchUserOperationCallData
export type BatchUserOperationCallData = Exclude<UserOperationCallData, Hex>[];
\\n\",\"id\":\"pages/resources/types.mdx#batchuseroperationcalldata\",\"isPage\":false,\"text\":\"\\nAn array of UserOperationCallData, representing a sequence of UserOperations to be executed in batch by calling the executeBatch function on the SmartContractAccount contract. Check out our guide on How to submit batch transactions to learn more about batching multiple transactions into a single UserOperation.\\nBatchUserOperationCallDataexport type BatchUserOperationCallData = Exclude<UserOperationCallData, Hex>[];\\n\",\"title\":\"BatchUserOperationCallData\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#bignumberish\",\"html\":\"\\n

A type that can be a hexadecimal string prefixed with Hex, a bigint, or a number. It is used to represent values that can be converted to or operate as big integers.

\\n
BigNumberish
export const BigNumberishSchema = z.union([HexSchema, z.number(), z.bigint()]);
\\n\",\"id\":\"pages/resources/types.mdx#bignumberish\",\"isPage\":false,\"text\":\"\\nA type that can be a hexadecimal string prefixed with Hex, a bigint, or a number. It is used to represent values that can be converted to or operate as big integers.\\nBigNumberishexport const BigNumberishSchema = z.union([HexSchema, z.number(), z.bigint()]);\\n\",\"title\":\"BigNumberish\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#bignumberishrange\",\"html\":\"\\n

An object type that may contain optional min and max fields, each of which accepts a BigNumberish value. This type is used to specify a numerical range, including both the minimum and maximum bounds.

\\n
BigNumberishRange
export const BigNumberishRangeSchema = z\\n  .object({\\n    min: BigNumberishSchema.optional(),\\n    max: BigNumberishSchema.optional(),\\n  })\\n  .strict();
\\n\",\"id\":\"pages/resources/types.mdx#bignumberishrange\",\"isPage\":false,\"text\":\"\\nAn object type that may contain optional min and max fields, each of which accepts a BigNumberish value. This type is used to specify a numerical range, including both the minimum and maximum bounds.\\nBigNumberishRangeexport const BigNumberishRangeSchema = z\\n .object({\\n min: BigNumberishSchema.optional(),\\n max: BigNumberishSchema.optional(),\\n })\\n .strict();\\n\",\"title\":\"BigNumberishRange\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#bundleraction\",\"html\":\"\\n

Bundler Actions are viem Actions that map one-to-one with "public" Bundler RPC methods (eth_sendUserOperation, eth_getUserOperationByHash, etc.) under the EIP-4337 and EIP-6900 standards. They are used with a BundlerClient. BundlerActions do not require any special permissions, nor do they provide "signing" capabilities to the user. Examples of BundlerActions include retrieving the details of a specific user operation, estimating user operation gas, etc.

\\n
BundlerAction
export type BundlerActions = {\\n  /**\\n   * calls `eth_estimateUserOperationGas` and  returns the result\\n   *\\n   * @param request - the UserOperationRequest to estimate gas for\\n   * @param entryPoint - the entry point address the op will be sent to\\n   * @param stateOverride - the state override to use for the estimation\\n   * @returns the gas estimates for the given response\\n   */\\n  estimateUserOperationGas<\\n    TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n  >(\\n    request: UserOperationRequest<TEntryPointVersion>,\\n    entryPoint: Address,\\n    stateOverride?: StateOverride\\n  ): Promise<UserOperationEstimateGasResponse<TEntryPointVersion>>;\\n \\n  /**\\n   * calls `eth_sendUserOperation` and returns the hash of the sent UserOperation\\n   *\\n   * @param request - the UserOperationRequest to send\\n   * @param entryPoint - the entry point address the op will be sent to\\n   * @returns the hash of the sent UserOperation\\n   */\\n  sendRawUserOperation<\\n    TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n  >(\\n    request: UserOperationRequest<TEntryPointVersion>,\\n    entryPoint: Address\\n  ): Promise<Hash>;\\n \\n  /**\\n   * calls `eth_getUserOperationByHash` and returns the UserOperationResponse\\n   *\\n   * @param hash - the hash of the UserOperation to fetch\\n   * @returns - the user operation if found or null\\n   */\\n  getUserOperationByHash(hash: Hash): Promise<UserOperationResponse | null>;\\n \\n  /**\\n   * calls `eth_getUserOperationReceipt` and returns the UserOperationReceipt\\n   *\\n   * @param hash - the hash of the UserOperation to get the receipt for\\n   * @returns - a user operation receipt or null if not found\\n   */\\n  getUserOperationReceipt(hash: Hash): Promise<UserOperationReceipt | null>;\\n \\n  /**\\n   * calls `eth_supportedEntryPoints` and returns the entry points the RPC supports\\n   *\\n   * @returns - an array of the entrypoint addresses supported\\n   */\\n  getSupportedEntryPoints(): Promise<Address[]>;\\n};
\\n\",\"id\":\"pages/resources/types.mdx#bundleraction\",\"isPage\":false,\"text\":\"\\nBundler Actions are viem Actions that map one-to-one with "public" Bundler RPC methods (eth_sendUserOperation, eth_getUserOperationByHash, etc.) under the EIP-4337 and EIP-6900 standards. They are used with a BundlerClient. BundlerActions do not require any special permissions, nor do they provide "signing" capabilities to the user. Examples of BundlerActions include retrieving the details of a specific user operation, estimating user operation gas, etc.\\nBundlerActionexport type BundlerActions = {\\n /**\\n * calls `eth_estimateUserOperationGas` and returns the result\\n *\\n * @param request - the UserOperationRequest to estimate gas for\\n * @param entryPoint - the entry point address the op will be sent to\\n * @param stateOverride - the state override to use for the estimation\\n * @returns the gas estimates for the given response\\n */\\n estimateUserOperationGas<\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n >(\\n request: UserOperationRequest<TEntryPointVersion>,\\n entryPoint: Address,\\n stateOverride?: StateOverride\\n ): Promise<UserOperationEstimateGasResponse<TEntryPointVersion>>;\\n \\n /**\\n * calls `eth_sendUserOperation` and returns the hash of the sent UserOperation\\n *\\n * @param request - the UserOperationRequest to send\\n * @param entryPoint - the entry point address the op will be sent to\\n * @returns the hash of the sent UserOperation\\n */\\n sendRawUserOperation<\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n >(\\n request: UserOperationRequest<TEntryPointVersion>,\\n entryPoint: Address\\n ): Promise<Hash>;\\n \\n /**\\n * calls `eth_getUserOperationByHash` and returns the UserOperationResponse\\n *\\n * @param hash - the hash of the UserOperation to fetch\\n * @returns - the user operation if found or null\\n */\\n getUserOperationByHash(hash: Hash): Promise<UserOperationResponse | null>;\\n \\n /**\\n * calls `eth_getUserOperationReceipt` and returns the UserOperationReceipt\\n *\\n * @param hash - the hash of the UserOperation to get the receipt for\\n * @returns - a user operation receipt or null if not found\\n */\\n getUserOperationReceipt(hash: Hash): Promise<UserOperationReceipt | null>;\\n \\n /**\\n * calls `eth_supportedEntryPoints` and returns the entry points the RPC supports\\n *\\n * @returns - an array of the entrypoint addresses supported\\n */\\n getSupportedEntryPoints(): Promise<Address[]>;\\n};\\n\",\"title\":\"BundlerAction\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#bundlerclient\",\"html\":\"\\n

BundlerClient is a custom viem Client we have built our own, where we extended viem's PublicClient with BundlerActions, which are Actions that provide custom functionalities of EIP-4337 and EIP-6900 standards. BundlerClient is an intermediary or connector that enables client applications to interact with the Bundler that you are using. BundlerClient, because it extends PublicClient, supports Public Actions for client applications to connect, query, and interact with the blockchain (i.e., sending transactions, smart contract executions, data retrieval, etc.).

\\n
BundlerClient
export type BundlerClient<T extends Transport = Transport> = Client<\\n  T,\\n  Chain,\\n  undefined,\\n  [...PublicRpcSchema, ...BundlerRpcSchema],\\n  PublicActions<T, Chain> & BundlerActions\\n>;\\n \\n/**\\n * Creates a bundler client from an existing public client with the provided transport and chain.\\n *\\n * @example\\n * ```ts\\n * import { createPublicClient } from "viem";\\n * import { createBundlerClientFromExisting } from "@aa-sdk/core";\\n *\\n * const publicClient = createPublicClient(...);\\n * const bundlerClient = createBundlerClientFromExisting(publicClient);\\n * ```\\n *\\n * @param {PublicClient<T, Chain>} client The existing public client to be extended with bundler actions\\n * @returns {BundlerClient<T>} A bundler client that extends the functionality of the provided public client\\n */\\nexport const createBundlerClientFromExisting: <\\n  T extends Transport | FallbackTransport = Transport\\n>(\\n  client: PublicClient<T, Chain>\\n) => BundlerClient<T> = <T extends Transport | FallbackTransport = Transport>(\\n  client: PublicClient<T, Chain>\\n): BundlerClient<T> => {\\n  return client.extend(bundlerActions);\\n};
\\n\",\"id\":\"pages/resources/types.mdx#bundlerclient\",\"isPage\":false,\"text\":\"\\nBundlerClient is a custom viem Client we have built our own, where we extended viem's PublicClient with BundlerActions, which are Actions that provide custom functionalities of EIP-4337 and EIP-6900 standards. BundlerClient is an intermediary or connector that enables client applications to interact with the Bundler that you are using. BundlerClient, because it extends PublicClient, supports Public Actions for client applications to connect, query, and interact with the blockchain (i.e., sending transactions, smart contract executions, data retrieval, etc.).\\nBundlerClientexport type BundlerClient<T extends Transport = Transport> = Client<\\n T,\\n Chain,\\n undefined,\\n [...PublicRpcSchema, ...BundlerRpcSchema],\\n PublicActions<T, Chain> & BundlerActions\\n>;\\n \\n/**\\n * Creates a bundler client from an existing public client with the provided transport and chain.\\n *\\n * @example\\n * ```ts\\n * import { createPublicClient } from "viem";\\n * import { createBundlerClientFromExisting } from "@aa-sdk/core";\\n *\\n * const publicClient = createPublicClient(...);\\n * const bundlerClient = createBundlerClientFromExisting(publicClient);\\n * ```\\n *\\n * @param {PublicClient<T, Chain>} client The existing public client to be extended with bundler actions\\n * @returns {BundlerClient<T>} A bundler client that extends the functionality of the provided public client\\n */\\nexport const createBundlerClientFromExisting: <\\n T extends Transport | FallbackTransport = Transport\\n>(\\n client: PublicClient<T, Chain>\\n) => BundlerClient<T> = <T extends Transport | FallbackTransport = Transport>(\\n client: PublicClient<T, Chain>\\n): BundlerClient<T> => {\\n return client.extend(bundlerActions);\\n};\\n\",\"title\":\"BundlerClient\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#clientmiddleware\",\"html\":\"\\n

Middleware represents different operations involved in the SmartAccountClient pipeline for constructing a user operation given the user inputs by populating the UO with other data, including gas fees, paymaster data, etc.

\\n
ClientMiddleware
export type ClientMiddleware<\\n  TContext extends UserOperationContext | undefined =\\n    | UserOperationContext\\n    | undefined\\n> = {\\n  dummyPaymasterAndData: ClientMiddlewareFn<TContext>;\\n  feeEstimator: ClientMiddlewareFn<TContext>;\\n  gasEstimator: ClientMiddlewareFn<TContext>;\\n  customMiddleware: ClientMiddlewareFn<TContext>;\\n  paymasterAndData: ClientMiddlewareFn<TContext>;\\n  userOperationSimulator: ClientMiddlewareFn<TContext>;\\n  signUserOperation: ClientMiddlewareFn<TContext>;\\n};
\\n\",\"id\":\"pages/resources/types.mdx#clientmiddleware\",\"isPage\":false,\"text\":\"\\nMiddleware represents different operations involved in the SmartAccountClient pipeline for constructing a user operation given the user inputs by populating the UO with other data, including gas fees, paymaster data, etc.\\nClientMiddlewareexport type ClientMiddleware<\\n TContext extends UserOperationContext | undefined =\\n | UserOperationContext\\n | undefined\\n> = {\\n dummyPaymasterAndData: ClientMiddlewareFn<TContext>;\\n feeEstimator: ClientMiddlewareFn<TContext>;\\n gasEstimator: ClientMiddlewareFn<TContext>;\\n customMiddleware: ClientMiddlewareFn<TContext>;\\n paymasterAndData: ClientMiddlewareFn<TContext>;\\n userOperationSimulator: ClientMiddlewareFn<TContext>;\\n signUserOperation: ClientMiddlewareFn<TContext>;\\n};\\n\",\"title\":\"ClientMiddleware\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#clientmiddlewareconfig\",\"html\":\"\\n

Configuration object to configure ClientMiddleware of the SmartAccountClient during the client instantiation. You can configure using this object to configure the middleware of your interest selectively.

\\n
ClientMiddlewareFn
export type ClientMiddlewareConfig<\\n  TContext extends UserOperationContext | undefined =\\n    | UserOperationContext\\n    | undefined\\n> = Partial<ClientMiddleware<TContext>>;
\\n\",\"id\":\"pages/resources/types.mdx#clientmiddlewareconfig\",\"isPage\":false,\"text\":\"\\nConfiguration object to configure ClientMiddleware of the SmartAccountClient during the client instantiation. You can configure using this object to configure the middleware of your interest selectively.\\nClientMiddlewareFnexport type ClientMiddlewareConfig<\\n TContext extends UserOperationContext | undefined =\\n | UserOperationContext\\n | undefined\\n> = Partial<ClientMiddleware<TContext>>;\\n\",\"title\":\"ClientMiddlewareConfig\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#clientmiddlewarefn\",\"html\":\"\\n

Each middleware is a function that takes in a user operation object, UserOperationStruct, performs its job to retrieve or compute the data, and populate different fields of the user operation to pass onto the next middleware in the pipeline before being signed and sent to the network. ClientMiddlewareFn is the function type that represents each middleware. In optional UserOperationOverrides, and UserOperationFeeOptions, and returns a promise that resolves to a modified UserOperationStruct. This function is what you specify as your overridden middleware value for applying custom logic during the UserOperationStruct object to be sent to the bundler for on-chain execution.

\\n
ClientMiddlewareFn
export type ClientMiddlewareFn<\\n  TContext extends UserOperationContext | undefined =\\n    | UserOperationContext\\n    | undefined\\n> = <\\n  TAccount extends SmartContractAccount,\\n  C extends MiddlewareClient,\\n  TEntryPointVersion extends GetEntryPointFromAccount<TAccount> = GetEntryPointFromAccount<TAccount>\\n>(\\n  struct: Deferrable<UserOperationStruct<TEntryPointVersion>>,\\n  args: ClientMiddlewareArgs<TAccount, C, TContext, TEntryPointVersion>\\n) => Promise<Deferrable<UserOperationStruct<TEntryPointVersion>>>;
\\n\",\"id\":\"pages/resources/types.mdx#clientmiddlewarefn\",\"isPage\":false,\"text\":\"\\nEach middleware is a function that takes in a user operation object, UserOperationStruct, performs its job to retrieve or compute the data, and populate different fields of the user operation to pass onto the next middleware in the pipeline before being signed and sent to the network. ClientMiddlewareFn is the function type that represents each middleware. In optional UserOperationOverrides, and UserOperationFeeOptions, and returns a promise that resolves to a modified UserOperationStruct. This function is what you specify as your overridden middleware value for applying custom logic during the UserOperationStruct object to be sent to the bundler for on-chain execution.\\nClientMiddlewareFnexport type ClientMiddlewareFn<\\n TContext extends UserOperationContext | undefined =\\n | UserOperationContext\\n | undefined\\n> = <\\n TAccount extends SmartContractAccount,\\n C extends MiddlewareClient,\\n TEntryPointVersion extends GetEntryPointFromAccount<TAccount> = GetEntryPointFromAccount<TAccount>\\n>(\\n struct: Deferrable<UserOperationStruct<TEntryPointVersion>>,\\n args: ClientMiddlewareArgs<TAccount, C, TContext, TEntryPointVersion>\\n) => Promise<Deferrable<UserOperationStruct<TEntryPointVersion>>>;\\n\",\"title\":\"ClientMiddlewareFn\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#entrypointdef\",\"html\":\"\\n

An object type that defines the interface for EntryPoint functions for packing the user operation to the optimized data structure to enhance performance and reduce gas costs of transactions, and generating the hash of the user operation for the format compatible to the specified Chain and EntryPointVersion.

\\n
EntryPointDef
export type EntryPointDef<\\n  TEntryPointVersion extends EntryPointVersion = EntryPointVersion,\\n  TChain extends Chain = Chain,\\n  TAbi extends Abi | readonly unknown[] = Abi\\n> = {\\n  version: TEntryPointVersion;\\n  address: Address;\\n  chain: TChain;\\n  abi: GetContractParameters<Transport, TChain, Account, TAbi>["abi"];\\n  getUserOperationHash: (\\n    request: UserOperationRequest<TEntryPointVersion>\\n  ) => Hex;\\n  packUserOperation: (\\n    userOperation: UserOperationRequest<TEntryPointVersion>\\n  ) => Hex;\\n};
\\n\",\"id\":\"pages/resources/types.mdx#entrypointdef\",\"isPage\":false,\"text\":\"\\nAn object type that defines the interface for EntryPoint functions for packing the user operation to the optimized data structure to enhance performance and reduce gas costs of transactions, and generating the hash of the user operation for the format compatible to the specified Chain and EntryPointVersion.\\nEntryPointDefexport type EntryPointDef<\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion,\\n TChain extends Chain = Chain,\\n TAbi extends Abi | readonly unknown[] = Abi\\n> = {\\n version: TEntryPointVersion;\\n address: Address;\\n chain: TChain;\\n abi: GetContractParameters<Transport, TChain, Account, TAbi>["abi"];\\n getUserOperationHash: (\\n request: UserOperationRequest<TEntryPointVersion>\\n ) => Hex;\\n packUserOperation: (\\n userOperation: UserOperationRequest<TEntryPointVersion>\\n ) => Hex;\\n};\\n\",\"title\":\"EntryPointDef\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#multiplier\",\"html\":\"\\n

An object type with a required multipler field, which is a number value with max precision of 4 decimal places.

\\n
Multiplier
// [!include ~/../aa-sdk/core/src/utils/schema.ts:Multiplier
\\n\",\"id\":\"pages/resources/types.mdx#multiplier\",\"isPage\":false,\"text\":\"\\nAn object type with a required multipler field, which is a number value with max precision of 4 decimal places.\\nMultiplier// [!include ~/../aa-sdk/core/src/utils/schema.ts:Multiplier\\n\",\"title\":\"Multiplier\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#smartaccountauthenticator\",\"html\":\"\\n

An extension of the SmartAccountSigner interface, this interface contains authentication-related functions in addition to the signing methods of the SmartAccountSigner. It provides methods to authenticate the signer (authenticate) as the "authorized" signer, often as the owner, of the SmartContractAccount. It also has methods to retrieve authentication details (getAuthDetails) about the signer instance that the user is using to authenticate to one's account.

\\n
SmartAccountAuthenticator
/**\\n * Extends the @interface SmartAccountSigner interface with authentication.\\n *\\n * @template AuthParams - the generic type of the authentication parameters\\n * @template AuthDetails - the generic type of the authentication details\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>\\n  extends SmartAccountSigner<Inner> {\\n  authenticate: (params: AuthParams) => Promise<AuthDetails>;\\n \\n  getAuthDetails: () => Promise<AuthDetails>;\\n}
\\n\",\"id\":\"pages/resources/types.mdx#smartaccountauthenticator\",\"isPage\":false,\"text\":\"\\nAn extension of the SmartAccountSigner interface, this interface contains authentication-related functions in addition to the signing methods of the SmartAccountSigner. It provides methods to authenticate the signer (authenticate) as the "authorized" signer, often as the owner, of the SmartContractAccount. It also has methods to retrieve authentication details (getAuthDetails) about the signer instance that the user is using to authenticate to one's account.\\nSmartAccountAuthenticator/**\\n * Extends the @interface SmartAccountSigner interface with authentication.\\n *\\n * @template AuthParams - the generic type of the authentication parameters\\n * @template AuthDetails - the generic type of the authentication details\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>\\n extends SmartAccountSigner<Inner> {\\n authenticate: (params: AuthParams) => Promise<AuthDetails>;\\n \\n getAuthDetails: () => Promise<AuthDetails>;\\n}\\n\",\"title\":\"SmartAccountAuthenticator\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#smartaccountclient\",\"html\":\"\\n

SmartAccountClient is a custom viem Client, like the BundlerClient, which is an intermediary or connector that enables your client application to interact with the SmartContractAccount. SmartAccountClient is analogous to the WalletClient. The difference is that while WalletClient has WalletActions that lets your client application interact with an Externally-owned account (EOA) with a wallet, SmartAccountClient provides SmartAccountClientActions for client applications to interact with SmartContractAccounts.

\\n
SmartAccountClient
// [!include ~/../aa-sdk/core/src/client/smartAccountClient.ts:SmartAccountClient]
\\n\",\"id\":\"pages/resources/types.mdx#smartaccountclient\",\"isPage\":false,\"text\":\"\\nSmartAccountClient is a custom viem Client, like the BundlerClient, which is an intermediary or connector that enables your client application to interact with the SmartContractAccount. SmartAccountClient is analogous to the WalletClient. The difference is that while WalletClient has WalletActions that lets your client application interact with an Externally-owned account (EOA) with a wallet, SmartAccountClient provides SmartAccountClientActions for client applications to interact with SmartContractAccounts.\\nSmartAccountClient// [!include ~/../aa-sdk/core/src/client/smartAccountClient.ts:SmartAccountClient]\\n\",\"title\":\"SmartAccountClient\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#smartaccountclientaction\",\"html\":\"\\n

SmartAccountClientActions are viem Actions that map one-to-one with smart contract account-related or "signable" actions, such as constructing user operation requests to be sent to the Bundler, signing messages or user operation requests, sending user operations to the Bundler, upgrading accounts to different implementation address, etc. They are used with a SmartAccountClient. SmartAccountClientActions require special permissions and provide signing capabilities for SmartContractAccounts.

\\n
SmartAccountClientAction
// [!include ~/../aa-sdk/core/src/client/smartAccountClient.ts:SmartAccountClientActions]
\\n\",\"id\":\"pages/resources/types.mdx#smartaccountclientaction\",\"isPage\":false,\"text\":\"\\nSmartAccountClientActions are viem Actions that map one-to-one with smart contract account-related or "signable" actions, such as constructing user operation requests to be sent to the Bundler, signing messages or user operation requests, sending user operations to the Bundler, upgrading accounts to different implementation address, etc. They are used with a SmartAccountClient. SmartAccountClientActions require special permissions and provide signing capabilities for SmartContractAccounts.\\nSmartAccountClientAction// [!include ~/../aa-sdk/core/src/client/smartAccountClient.ts:SmartAccountClientActions]\\n\",\"title\":\"SmartAccountClientAction\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#smartaccountsigner\",\"html\":\"\\n

An interface representing a signer capable of signing messages and typed data. It provides methods to retrieve the signer's address (getAddress), sign a message (signMessage), and sign typed data (signTypedData). SmartAccountSigner refers to the Signer instance responsible for the signing activities using its private key for smart account activities. Often, the Signer is referred to as the Owner of the account as it has the authority to use the smart account on-chain with its signatures.

\\n
SmartAccountSigner
/**\\n * A signer that can sign messages and typed data.\\n *\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountSigner<Inner = any> {\\n  signerType: string;\\n  inner: Inner;\\n \\n  getAddress: () => Promise<Address>;\\n \\n  signMessage: (message: SignableMessage) => Promise<Hex>;\\n \\n  signTypedData: <\\n    const TTypedData extends TypedData | { [key: string]: unknown },\\n    TPrimaryType extends string = string\\n  >(\\n    params: TypedDataDefinition<TTypedData, TPrimaryType>\\n  ) => Promise<Hex>;\\n}
\\n\",\"id\":\"pages/resources/types.mdx#smartaccountsigner\",\"isPage\":false,\"text\":\"\\nAn interface representing a signer capable of signing messages and typed data. It provides methods to retrieve the signer's address (getAddress), sign a message (signMessage), and sign typed data (signTypedData). SmartAccountSigner refers to the Signer instance responsible for the signing activities using its private key for smart account activities. Often, the Signer is referred to as the Owner of the account as it has the authority to use the smart account on-chain with its signatures.\\nSmartAccountSigner/**\\n * A signer that can sign messages and typed data.\\n *\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountSigner<Inner = any> {\\n signerType: string;\\n inner: Inner;\\n \\n getAddress: () => Promise<Address>;\\n \\n signMessage: (message: SignableMessage) => Promise<Hex>;\\n \\n signTypedData: <\\n const TTypedData extends TypedData | { [key: string]: unknown },\\n TPrimaryType extends string = string\\n >(\\n params: TypedDataDefinition<TTypedData, TPrimaryType>\\n ) => Promise<Hex>;\\n}\\n\",\"title\":\"SmartAccountSigner\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#smartcontractaccount\",\"html\":\"\\n

As smart contract accounts are essentially the contract codes that operate on the blockchain, SmartContractAccount defines the interface with different functionalities for managing and interacting with the contract account. It includes different functionalities for creating, managing, and using your smart account. In addition to supporting all functionalities achieved with a basic EOA alone, SmartContractAccount can have custom capabilities such as automating processes or executing actions based on predefined conditions. Smart contract wallets allow users to customize how they manage their digital assets, offering a more tailored approach to handling funds securely. SmartContractAccount type extends viem's Account, and instantiation of an account is done using the toSmartContractAccount action.

\\n
SmartContractAccount
export type SmartContractAccount<\\n  Name extends string = string,\\n  TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = LocalAccount<Name> & {\\n  source: Name;\\n  getDummySignature: () => Hex | Promise<Hex>;\\n  encodeExecute: (tx: AccountOp) => Promise<Hex>;\\n  encodeBatchExecute: (txs: AccountOp[]) => Promise<Hex>;\\n  signUserOperationHash: (uoHash: Hex) => Promise<Hex>;\\n  signMessageWith6492: (params: { message: SignableMessage }) => Promise<Hex>;\\n  signTypedDataWith6492: <\\n    const typedData extends TypedData | Record<string, unknown>,\\n    primaryType extends keyof typedData | "EIP712Domain" = keyof typedData\\n  >(\\n    typedDataDefinition: TypedDataDefinition<typedData, primaryType>\\n  ) => Promise<Hex>;\\n  encodeUpgradeToAndCall: (params: UpgradeToAndCallParams) => Promise<Hex>;\\n  getNonce(nonceKey?: bigint): Promise<bigint>;\\n  getInitCode: () => Promise<Hex>;\\n  isAccountDeployed: () => Promise<boolean>;\\n  getFactoryAddress: () => Promise<Address>;\\n  getFactoryData: () => Promise<Hex>;\\n  getEntryPoint: () => EntryPointDef<TEntryPointVersion>;\\n  getImplementationAddress: () => Promise<NullAddress | Address>;\\n};
\\n\",\"id\":\"pages/resources/types.mdx#smartcontractaccount\",\"isPage\":false,\"text\":\"\\nAs smart contract accounts are essentially the contract codes that operate on the blockchain, SmartContractAccount defines the interface with different functionalities for managing and interacting with the contract account. It includes different functionalities for creating, managing, and using your smart account. In addition to supporting all functionalities achieved with a basic EOA alone, SmartContractAccount can have custom capabilities such as automating processes or executing actions based on predefined conditions. Smart contract wallets allow users to customize how they manage their digital assets, offering a more tailored approach to handling funds securely. SmartContractAccount type extends viem's Account, and instantiation of an account is done using the toSmartContractAccount action.\\nSmartContractAccountexport type SmartContractAccount<\\n Name extends string = string,\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = LocalAccount<Name> & {\\n source: Name;\\n getDummySignature: () => Hex | Promise<Hex>;\\n encodeExecute: (tx: AccountOp) => Promise<Hex>;\\n encodeBatchExecute: (txs: AccountOp[]) => Promise<Hex>;\\n signUserOperationHash: (uoHash: Hex) => Promise<Hex>;\\n signMessageWith6492: (params: { message: SignableMessage }) => Promise<Hex>;\\n signTypedDataWith6492: <\\n const typedData extends TypedData | Record<string, unknown>,\\n primaryType extends keyof typedData | "EIP712Domain" = keyof typedData\\n >(\\n typedDataDefinition: TypedDataDefinition<typedData, primaryType>\\n ) => Promise<Hex>;\\n encodeUpgradeToAndCall: (params: UpgradeToAndCallParams) => Promise<Hex>;\\n getNonce(nonceKey?: bigint): Promise<bigint>;\\n getInitCode: () => Promise<Hex>;\\n isAccountDeployed: () => Promise<boolean>;\\n getFactoryAddress: () => Promise<Address>;\\n getFactoryData: () => Promise<Hex>;\\n getEntryPoint: () => EntryPointDef<TEntryPointVersion>;\\n getImplementationAddress: () => Promise<NullAddress | Address>;\\n};\\n\",\"title\":\"SmartContractAccount\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#stateoverride\",\"html\":\"\\n

A type defining state overrides for eth_call method. An optional address-to-state mapping, where each entry specifies some state to be ephemerally overridden prior to executing the call.\\nState overrides allow you to customize the network state for the purpose of the simulation, so this feature is useful when you need to test or simulate scenarios under conditions that aren’t currently present on the live network.

\\n\",\"id\":\"pages/resources/types.mdx#stateoverride\",\"isPage\":false,\"text\":\"\\nA type defining state overrides for eth_call method. An optional address-to-state mapping, where each entry specifies some state to be ephemerally overridden prior to executing the call.\\nState overrides allow you to customize the network state for the purpose of the simulation, so this feature is useful when you need to test or simulate scenarios under conditions that aren’t currently present on the live network.\\n\",\"title\":\"StateOverride\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#tosmartcontractaccountparams\",\"html\":\"\\n

This type defines the parameters to the SmartContractAccount instantiation action, toSmartContractAccount. You can configure this parameter to specify the Transport, Chain, EntryPointDef, and other base functionalities of the smart account that you are creating.

\\n
ToSmartContractAccountParams
export type ToSmartContractAccountParams<\\n  Name extends string = string,\\n  TTransport extends Transport = Transport,\\n  TChain extends Chain = Chain,\\n  TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = {\\n  source: Name;\\n  transport: TTransport;\\n  chain: TChain;\\n  entryPoint: EntryPointDef<TEntryPointVersion, TChain>;\\n  accountAddress?: Address;\\n  getAccountInitCode: () => Promise<Hex>;\\n  getDummySignature: () => Hex | Promise<Hex>;\\n  encodeExecute: (tx: AccountOp) => Promise<Hex>;\\n  encodeBatchExecute?: (txs: AccountOp[]) => Promise<Hex>;\\n  // if not provided, will default to just using signMessage over the Hex\\n  signUserOperationHash?: (uoHash: Hex) => Promise<Hex>;\\n  encodeUpgradeToAndCall?: (params: UpgradeToAndCallParams) => Promise<Hex>;\\n} & Omit<CustomSource, "signTransaction" | "address">;
\\n\",\"id\":\"pages/resources/types.mdx#tosmartcontractaccountparams\",\"isPage\":false,\"text\":\"\\nThis type defines the parameters to the SmartContractAccount instantiation action, toSmartContractAccount. You can configure this parameter to specify the Transport, Chain, EntryPointDef, and other base functionalities of the smart account that you are creating.\\nToSmartContractAccountParamsexport type ToSmartContractAccountParams<\\n Name extends string = string,\\n TTransport extends Transport = Transport,\\n TChain extends Chain = Chain,\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = {\\n source: Name;\\n transport: TTransport;\\n chain: TChain;\\n entryPoint: EntryPointDef<TEntryPointVersion, TChain>;\\n accountAddress?: Address;\\n getAccountInitCode: () => Promise<Hex>;\\n getDummySignature: () => Hex | Promise<Hex>;\\n encodeExecute: (tx: AccountOp) => Promise<Hex>;\\n encodeBatchExecute?: (txs: AccountOp[]) => Promise<Hex>;\\n // if not provided, will default to just using signMessage over the Hex\\n signUserOperationHash?: (uoHash: Hex) => Promise<Hex>;\\n encodeUpgradeToAndCall?: (params: UpgradeToAndCallParams) => Promise<Hex>;\\n} & Omit<CustomSource, "signTransaction" | "address">;\\n\",\"title\":\"ToSmartContractAccountParams\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#user\",\"html\":\"\\n

User is a type that defines the model for the details of a user's Embedded Account via an Alchemy Signer. It includes the user's email, orgId, userId, userId, address (the EOA signer address corresponding to the user credentials), and credentialId. You can use the useUser react hook to look up a user.

\\n
User
export type User = {\\n  email?: string;\\n  orgId: string;\\n  userId: string;\\n  address: Address;\\n  credentialId?: string;\\n};
\\n\",\"id\":\"pages/resources/types.mdx#user\",\"isPage\":false,\"text\":\"\\nUser is a type that defines the model for the details of a user's Embedded Account via an Alchemy Signer. It includes the user's email, orgId, userId, userId, address (the EOA signer address corresponding to the user credentials), and credentialId. You can use the useUser react hook to look up a user.\\nUserexport type User = {\\n email?: string;\\n orgId: string;\\n userId: string;\\n address: Address;\\n credentialId?: string;\\n};\\n\",\"title\":\"User\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#useroperationcalldata\",\"html\":\"\\n

UserOperationCallData is a type that represents the user's "intent" or the desired outcome representing a specific objective a user aims to accomplish. It includes target (the destination address), data (the Transaction calldata), and value (the amount value of ETH, or the native token to send). It acts as the input to the sendUserOperation method on SmartAccountClient.

\\n
UserOperationCallData
export type UserOperationCallData =\\n  | {\\n      /* the target of the call */\\n      target: Address;\\n      /* the data passed to the target */\\n      data: Hex;\\n      /* the amount of native token to send to the target (default: 0) */\\n      value?: bigint;\\n    }\\n  | Hex;
\\n\",\"id\":\"pages/resources/types.mdx#useroperationcalldata\",\"isPage\":false,\"text\":\"\\nUserOperationCallData is a type that represents the user's "intent" or the desired outcome representing a specific objective a user aims to accomplish. It includes target (the destination address), data (the Transaction calldata), and value (the amount value of ETH, or the native token to send). It acts as the input to the sendUserOperation method on SmartAccountClient.\\nUserOperationCallDataexport type UserOperationCallData =\\n | {\\n /* the target of the call */\\n target: Address;\\n /* the data passed to the target */\\n data: Hex;\\n /* the amount of native token to send to the target (default: 0) */\\n value?: bigint;\\n }\\n | Hex;\\n\",\"title\":\"UserOperationCallData\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#useroperationestimategasresponse\",\"html\":\"\\n

An interface that defines the structure for the response received from the RPC method eth_estimateUserOperationGas. This response provides detailed information about the estimated gas usage for a UserOperation.

\\n
UserOperationEstimateGasResponse
export interface UserOperationEstimateGasResponse<\\n  TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> {\\n  /* Gas overhead of this UserOperation */\\n  preVerificationGas: BigNumberish;\\n  /* Actual gas used by the validation of this UserOperation */\\n  verificationGasLimit: BigNumberish;\\n  /* Value used by inner account execution */\\n  callGasLimit: BigNumberish;\\n  /*\\n   * EntryPoint v0.7.0 operations only.\\n   * The amount of gas to allocate for the paymaster validation code.\\n   * Note: `eth_estimateUserOperationGas` does not return paymasterPostOpGasLimit.\\n   */\\n  paymasterVerificationGasLimit: TEntryPointVersion extends "0.7.0"\\n    ? BigNumberish | undefined\\n    : never;\\n}
\\n\",\"id\":\"pages/resources/types.mdx#useroperationestimategasresponse\",\"isPage\":false,\"text\":\"\\nAn interface that defines the structure for the response received from the RPC method eth_estimateUserOperationGas. This response provides detailed information about the estimated gas usage for a UserOperation.\\nUserOperationEstimateGasResponseexport interface UserOperationEstimateGasResponse<\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> {\\n /* Gas overhead of this UserOperation */\\n preVerificationGas: BigNumberish;\\n /* Actual gas used by the validation of this UserOperation */\\n verificationGasLimit: BigNumberish;\\n /* Value used by inner account execution */\\n callGasLimit: BigNumberish;\\n /*\\n * EntryPoint v0.7.0 operations only.\\n * The amount of gas to allocate for the paymaster validation code.\\n * Note: `eth_estimateUserOperationGas` does not return paymasterPostOpGasLimit.\\n */\\n paymasterVerificationGasLimit: TEntryPointVersion extends "0.7.0"\\n ? BigNumberish | undefined\\n : never;\\n}\\n\",\"title\":\"UserOperationEstimateGasResponse\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#useroperationoverrides\",\"html\":\"\\n

Partial structure for overriding default values in a UserOperationStruct, such as gas limits and fees. Available fields include maxFeePerGas, maxPriorityFeePerGas, callGasLimit, preVerificationGas, verificationGasLimit, paymasterAndData, or nonceKey. You can also specify a stateOverride to be passed into eth_estimateUserOperationGas during gas estimation. These override values are available from each ClientMiddleware of the SmartAccountClient. Check out UserOperationOverrides page to learn more.

\\n
UserOperationOverrides
export type UserOperationOverrides<\\n  TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = Partial<\\n  {\\n    callGasLimit:\\n      | UserOperationStruct<TEntryPointVersion>["callGasLimit"]\\n      | Multiplier;\\n    maxFeePerGas:\\n      | UserOperationStruct<TEntryPointVersion>["maxFeePerGas"]\\n      | Multiplier;\\n    maxPriorityFeePerGas:\\n      | UserOperationStruct<TEntryPointVersion>["maxPriorityFeePerGas"]\\n      | Multiplier;\\n    preVerificationGas:\\n      | UserOperationStruct<TEntryPointVersion>["preVerificationGas"]\\n      | Multiplier;\\n    verificationGasLimit:\\n      | UserOperationStruct<TEntryPointVersion>["verificationGasLimit"]\\n      | Multiplier;\\n    /**\\n     * This can be used to override the key used when calling `entryPoint.getNonce`\\n     * It is useful when you want to use parallel nonces for user operations\\n     *\\n     * NOTE: not all bundlers fully support this feature and it could be that your bundler will still only include\\n     * one user operation for your account in a bundle\\n     */\\n    nonceKey: bigint;\\n \\n    /**\\n     * The same state overrides for\\n     * [`eth_call`](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-eth#eth-call) method.\\n     * An address-to-state mapping, where each entry specifies some state to be ephemerally overridden\\n     * prior to executing the call. State overrides allow you to customize the network state for\\n     * the purpose of the simulation, so this feature is useful when you need to estimate gas\\n     * for user operation scenarios under conditions that aren’t currently present on the live network.\\n     */\\n    stateOverride: StateOverride;\\n  } & UserOperationPaymasterOverrides<TEntryPointVersion>\\n>;
\\n\",\"id\":\"pages/resources/types.mdx#useroperationoverrides\",\"isPage\":false,\"text\":\"\\nPartial structure for overriding default values in a UserOperationStruct, such as gas limits and fees. Available fields include maxFeePerGas, maxPriorityFeePerGas, callGasLimit, preVerificationGas, verificationGasLimit, paymasterAndData, or nonceKey. You can also specify a stateOverride to be passed into eth_estimateUserOperationGas during gas estimation. These override values are available from each ClientMiddleware of the SmartAccountClient. Check out UserOperationOverrides page to learn more.\\nUserOperationOverridesexport type UserOperationOverrides<\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = Partial<\\n {\\n callGasLimit:\\n | UserOperationStruct<TEntryPointVersion>["callGasLimit"]\\n | Multiplier;\\n maxFeePerGas:\\n | UserOperationStruct<TEntryPointVersion>["maxFeePerGas"]\\n | Multiplier;\\n maxPriorityFeePerGas:\\n | UserOperationStruct<TEntryPointVersion>["maxPriorityFeePerGas"]\\n | Multiplier;\\n preVerificationGas:\\n | UserOperationStruct<TEntryPointVersion>["preVerificationGas"]\\n | Multiplier;\\n verificationGasLimit:\\n | UserOperationStruct<TEntryPointVersion>["verificationGasLimit"]\\n | Multiplier;\\n /**\\n * This can be used to override the key used when calling `entryPoint.getNonce`\\n * It is useful when you want to use parallel nonces for user operations\\n *\\n * NOTE: not all bundlers fully support this feature and it could be that your bundler will still only include\\n * one user operation for your account in a bundle\\n */\\n nonceKey: bigint;\\n \\n /**\\n * The same state overrides for\\n * [`eth_call`](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-eth#eth-call) method.\\n * An address-to-state mapping, where each entry specifies some state to be ephemerally overridden\\n * prior to executing the call. State overrides allow you to customize the network state for\\n * the purpose of the simulation, so this feature is useful when you need to estimate gas\\n * for user operation scenarios under conditions that aren’t currently present on the live network.\\n */\\n stateOverride: StateOverride;\\n } & UserOperationPaymasterOverrides<TEntryPointVersion>\\n>;\\n\",\"title\":\"UserOperationOverrides\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#useroperationreceipt\",\"html\":\"\\n

An interface that defines the structure for the response received from the RPC method eth_getUserOperationReceipt. It includes details like sender, nonce, gas cost, and success status of the UserOperation.

\\n
UserOperationReceipt
// [!include ~/../aa-sdk/core/src/types.ts#UserOperationReceipt
\\n\",\"id\":\"pages/resources/types.mdx#useroperationreceipt\",\"isPage\":false,\"text\":\"\\nAn interface that defines the structure for the response received from the RPC method eth_getUserOperationReceipt. It includes details like sender, nonce, gas cost, and success status of the UserOperation.\\nUserOperationReceipt// [!include ~/../aa-sdk/core/src/types.ts#UserOperationReceipt\\n\",\"title\":\"UserOperationReceipt\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#useroperationrequest\",\"html\":\"\\n

Interface for the request format required for a JSON-RPC request to eth_sendUserOperation. It includes sender, nonce, gas limits, fees, and more fields.

\\n
UserOperationRequest
// [!include ~/../aa-sdk/core/src/types.ts#UserOperationRequest
\\n\",\"id\":\"pages/resources/types.mdx#useroperationrequest\",\"isPage\":false,\"text\":\"\\nInterface for the request format required for a JSON-RPC request to eth_sendUserOperation. It includes sender, nonce, gas limits, fees, and more fields.\\nUserOperationRequest// [!include ~/../aa-sdk/core/src/types.ts#UserOperationRequest\\n\",\"title\":\"UserOperationRequest\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#useroperationresponse\",\"html\":\"\\n

An interface that defines the structure for the response received from the RPC method eth_getUserOperationByHash, detailing the result of executing a UserOperation. It includes the block number, block hash, transaction hash and more information associated with the UO.

\\n
UserOperationResponse
// [!include ~/../aa-sdk/core/src/types.ts#UserOperationResponse
\\n\",\"id\":\"pages/resources/types.mdx#useroperationresponse\",\"isPage\":false,\"text\":\"\\nAn interface that defines the structure for the response received from the RPC method eth_getUserOperationByHash, detailing the result of executing a UserOperation. It includes the block number, block hash, transaction hash and more information associated with the UO.\\nUserOperationResponse// [!include ~/../aa-sdk/core/src/types.ts#UserOperationResponse\\n\",\"title\":\"UserOperationResponse\",\"titles\":[\"Types\"]},{\"href\":\"/resources/types#useroperationstruct\",\"html\":\"\\n

Interface for structuring a UserOperation, with fields similar to UserOperationRequest but used for building requests.

\\n
UserOperationStruct
// [!include ~/../aa-sdk/core/src/types.ts#UserOperationStruct
\",\"id\":\"pages/resources/types.mdx#useroperationstruct\",\"isPage\":false,\"text\":\"\\nInterface for structuring a UserOperation, with fields similar to UserOperationRequest but used for building requests.\\nUserOperationStruct// [!include ~/../aa-sdk/core/src/types.ts#UserOperationStruct\",\"title\":\"UserOperationStruct\",\"titles\":[\"Types\"]}]}],[\"index.2f6499add606be2e1f0d85c927980df6ca989f143aa359494c1801f4b1d24f29\",{\"mdx\":\"---\\ntitle: Add Passkey\\ndescription: Learn how to add a passkey to your users' accounts with Account Kit.\\n---\\n\\n# Add passkey\\n\\nYou may have noticed in the [Demo App](https://aa-sdk-ui-demo.vercel.app/) that you can allow a user to login with an existing passkey, but there's no way to sign-up with a passkey. This guide will outline\\nhow to add a passkey to a user's account after they've signed up.\\n\\nIf you're not sure how to authenticate your users, see [this guide](/react/authenticate-users).\\n\\n## Add a passkey on sign up\\n\\nThe easiest way to add a passkey to users is right when they signup! This can be done by updating your `ui` config in the `createConfig` call to enable the UI components to prompt the user for a passkey.\\n\\n```ts twoslash [config.ts]\\n// @noErrors\\nimport { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig(\\n {\\n chain: sepolia,\\n apiKey: \\\"ALCHEMY_API_KEY\\\",\\n },\\n {\\n illustrationStyle: \\\"outline\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true, // [!code ++]\\n },\\n }\\n);\\n```\\n\\nNow, when a user signs up, they will be prompted to create a passkey.\\n\\n## Add a passkey later\\n\\nWith the above config, the user will only be prompted when they first create their account in your app. If you want to add the ability to add a passkey elsewhere in your app, for example in a settings page, you can use the [`useAddPasskey`](/reference/account-kit/react/hooks/useAddPasskey) hook.\\n\\n:::warning\\nThis hook requires that the user already be authenticated or else it will throw an error!\\n:::\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport { useAddPasskey } from \\\"@account-kit/react\\\";\\n\\nexport default function MyComponent() {\\n const { addPasskey, isAddingPasskey } = useAddPasskey();\\n\\n return (\\n {\\n addPasskey();\\n }}\\n >\\n Add Passkey\\n \\n );\\n}\\n```\\n\",\"document\":[{\"href\":\"/react/add-passkey#add-passkey\",\"html\":\"\\n

You may have noticed in the Demo App that you can allow a user to login with an existing passkey, but there's no way to sign-up with a passkey. This guide will outline\\nhow to add a passkey to a user's account after they've signed up.

\\n

If you're not sure how to authenticate your users, see this guide.

\\n\",\"id\":\"pages/react/add-passkey.mdx#add-passkey\",\"isPage\":true,\"text\":\"\\nYou may have noticed in the Demo App that you can allow a user to login with an existing passkey, but there's no way to sign-up with a passkey. This guide will outline\\nhow to add a passkey to a user's account after they've signed up.\\nIf you're not sure how to authenticate your users, see this guide.\\n\",\"title\":\"Add passkey\",\"titles\":[]},{\"href\":\"/react/add-passkey#add-a-passkey-on-sign-up\",\"html\":\"\\n

The easiest way to add a passkey to users is right when they signup! This can be done by updating your ui config in the createConfig call to enable the UI components to prompt the user for a passkey.

\\n
// @noErrors\\nimport { createConfig } from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\n \\nexport const config = createConfig(\\n  {\\n    chain: sepolia,\\n    apiKey: "ALCHEMY_API_KEY",\\n  },\\n  {\\n    illustrationStyle: "outline",\\n    auth: {\\n      sections: [[{ type: "email" }], [{ type: "passkey" }]],\\n      addPasskeyOnSignup: true, \\n    },\\n  }\\n);
\\n

Now, when a user signs up, they will be prompted to create a passkey.

\\n\",\"id\":\"pages/react/add-passkey.mdx#add-a-passkey-on-sign-up\",\"isPage\":false,\"text\":\"\\nThe easiest way to add a passkey to users is right when they signup! This can be done by updating your ui config in the createConfig call to enable the UI components to prompt the user for a passkey.\\n// @noErrors\\nimport { createConfig } from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\n \\nexport const config = createConfig(\\n {\\n chain: sepolia,\\n apiKey: "ALCHEMY_API_KEY",\\n },\\n {\\n illustrationStyle: "outline",\\n auth: {\\n sections: [[{ type: "email" }], [{ type: "passkey" }]],\\n addPasskeyOnSignup: true, \\n },\\n }\\n);\\nNow, when a user signs up, they will be prompted to create a passkey.\\n\",\"title\":\"Add a passkey on sign up\",\"titles\":[\"Add passkey\"]},{\"href\":\"/react/add-passkey#add-a-passkey-later\",\"html\":\"\\n

With the above config, the user will only be prompted when they first create their account in your app. If you want to add the ability to add a passkey elsewhere in your app, for example in a settings page, you can use the useAddPasskey hook.

\\n\\n
import React from "react";\\nimport { useAddPasskey } from "@account-kit/react";\\n \\nexport default function MyComponent() {\\n  const { addPasskey, isAddingPasskey } = useAddPasskey();\\n \\n  return (\\n    <button\\n      disabled={isAddingPasskey}\\n      onClick={() => {\\n        addPasskey();\\n      }}\\n    >\\n      Add Passkey\\n    </button>\\n  );\\n}
\",\"id\":\"pages/react/add-passkey.mdx#add-a-passkey-later\",\"isPage\":false,\"text\":\"\\nWith the above config, the user will only be prompted when they first create their account in your app. If you want to add the ability to add a passkey elsewhere in your app, for example in a settings page, you can use the useAddPasskey hook.\\nThis hook requires that the user already be authenticated or else it will throw an error!\\nimport React from "react";\\nimport { useAddPasskey } from "@account-kit/react";\\n \\nexport default function MyComponent() {\\n const { addPasskey, isAddingPasskey } = useAddPasskey();\\n \\n return (\\n <button\\n disabled={isAddingPasskey}\\n onClick={() => {\\n addPasskey();\\n }}\\n >\\n Add Passkey\\n </button>\\n );\\n}\",\"title\":\"Add a passkey later\",\"titles\":[\"Add passkey\"]}]}],[\"index.cb1131960f585f06c6f10e3ee137e13cb3a1044b8d7a0afd5662b01c085089c1\",{\"mdx\":\"---\\ntitle: Smart Contract Account\\ndescription: What is a smart contract account in Account Kit?\\n---\\n\\n# Smart Contract Account\\n\\nThe [`SmartContractAccount`](#TODO/link-to-type) interface within Account Kit is the client-side definition of an on-chain smart contract implementation.\\nThis interface is an extension of `viem`'s [`Account`](https://viem.sh/docs/accounts/local/toAccount#toaccount) interface, and provides a way to interact with smart contract accounts in a type-safe manner.\\n\\nWithin Account Kit, implementations for Light Account and Modular Account are exported from `@account-kit/smart-contracts`. These implementations handle the logic for generating the deployment data, encoding\\nsingle and batch UO execution, and signing of messages, typed data, and UOs.\\n\\nSmart Contract Accounts are rarely used on their own, and are typically passed in to [Smart Account Client](#TODO/concepts/smart-account-client) implementations.\\nWhen using either the [React](/react/overview) or [Core](/core/overview) libraries, the connection of an account and a client are handled for you.\\n\\n## Custom accounts\\n\\nIt's also possible to use a custom account when using the [Infra](/infra/overview) library.\\nWithin `@aa-sdk/core`, a method [`toSmartContractAccount`](/reference/aa-sdk/core/functions/toSmartContractAccount) is provided so you can create an instance of your Smart Contract Account.\\n\",\"document\":[{\"href\":\"/concepts/smart-contract-account#smart-contract-account\",\"html\":\"\\n

The SmartContractAccount interface within Account Kit is the client-side definition of an on-chain smart contract implementation.\\nThis interface is an extension of viem's Account interface, and provides a way to interact with smart contract accounts in a type-safe manner.

\\n

Within Account Kit, implementations for Light Account and Modular Account are exported from @account-kit/smart-contracts. These implementations handle the logic for generating the deployment data, encoding\\nsingle and batch UO execution, and signing of messages, typed data, and UOs.

\\n

Smart Contract Accounts are rarely used on their own, and are typically passed in to Smart Account Client implementations.\\nWhen using either the React or Core libraries, the connection of an account and a client are handled for you.

\\n\",\"id\":\"pages/concepts/smart-contract-account.mdx#smart-contract-account\",\"isPage\":true,\"text\":\"\\nThe SmartContractAccount interface within Account Kit is the client-side definition of an on-chain smart contract implementation.\\nThis interface is an extension of viem's Account interface, and provides a way to interact with smart contract accounts in a type-safe manner.\\nWithin Account Kit, implementations for Light Account and Modular Account are exported from @account-kit/smart-contracts. These implementations handle the logic for generating the deployment data, encoding\\nsingle and batch UO execution, and signing of messages, typed data, and UOs.\\nSmart Contract Accounts are rarely used on their own, and are typically passed in to Smart Account Client implementations.\\nWhen using either the React or Core libraries, the connection of an account and a client are handled for you.\\n\",\"title\":\"Smart Contract Account\",\"titles\":[]},{\"href\":\"/concepts/smart-contract-account#custom-accounts\",\"html\":\"\\n

It's also possible to use a custom account when using the Infra library.\\nWithin @aa-sdk/core, a method toSmartContractAccount is provided so you can create an instance of your Smart Contract Account.

\",\"id\":\"pages/concepts/smart-contract-account.mdx#custom-accounts\",\"isPage\":false,\"text\":\"\\nIt's also possible to use a custom account when using the Infra library.\\nWithin @aa-sdk/core, a method toSmartContractAccount is provided so you can create an instance of your Smart Contract Account.\",\"title\":\"Custom accounts\",\"titles\":[\"Smart Contract Account\"]}]}],[\"index.db2456ec377de310ca86d08e141d71dedd27bc4c7615db8127caceaedd1ed18d\",{\"mdx\":\"---\\ntitle: Send User Operations\\ndescription: Learn how to send user operations using Account Kit in a React application.\\n---\\n\\n# Send user operations\\n\\nOnce your users have been [authenticated](/react/authenticate-users), you can start sending user operations! Account Kit makes it really easy to send user operations using React hooks.\\n\\nSending user operations is really easy, since all you have to do is use the [`useSendUserOperation`](/reference/account-kit/react/hooks/useSendUserOperation) hook.\\nIf you want to sponsor the gas for a user, see our [guide](/react/sponsor-gas).\\n\\n## Single user operation\\n\\n:::tip\\nIn the below example, we use `LightAccount` as the underlying Smart Contract type. You can also use `MultiOwnerModularAccount` if you want to provide your users with an ERC-6900 compliant modular account,\\nor you can use `MultiOwnerLightAccount` if you want to support an account with multiple owners.\\n:::\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport {\\n type UseSendUserOperationResult,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyOpSenderComponent() {\\n const { client } = useSmartAccountClient({ type: \\\"LightAccount\\\" });\\n\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n // optional parameter that will wait for the transaction to be mined before returning\\n waitForTxn: true,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\\n\\n## Batch user operation\\n\\nIt's also possible to send user operations in batch using the same hook.\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport {\\n type UseSendUserOperationResult,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyOpSenderComponent() {\\n const { client } = useSmartAccountClient({ type: \\\"LightAccount\\\" });\\n\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n // optional parameter that will wait for the transaction to be mined before returning\\n waitForTxn: true,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n uo: [\\n {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n ],\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\\n\",\"document\":[{\"href\":\"/react/send-user-operations#send-user-operations\",\"html\":\"\\n

Once your users have been authenticated, you can start sending user operations! Account Kit makes it really easy to send user operations using React hooks.

\\n

Sending user operations is really easy, since all you have to do is use the useSendUserOperation hook.\\nIf you want to sponsor the gas for a user, see our guide.

\\n\",\"id\":\"pages/react/send-user-operations.mdx#send-user-operations\",\"isPage\":true,\"text\":\"\\nOnce your users have been authenticated, you can start sending user operations! Account Kit makes it really easy to send user operations using React hooks.\\nSending user operations is really easy, since all you have to do is use the useSendUserOperation hook.\\nIf you want to sponsor the gas for a user, see our guide.\\n\",\"title\":\"Send user operations\",\"titles\":[]},{\"href\":\"/react/send-user-operations#single-user-operation\",\"html\":\"\\n\\n
import React from "react";\\nimport {\\n  type UseSendUserOperationResult,\\n  useSendUserOperation,\\n  useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nexport default function MyOpSenderComponent() {\\n  const { client } = useSmartAccountClient({ type: "LightAccount" });\\n \\n  const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n    client,\\n    // optional parameter that will wait for the transaction to be mined before returning\\n    waitForTxn: true,\\n    onSuccess: ({ hash, request }) => {\\n      // [optional] Do something with the hash and request\\n    },\\n    onError: (error) => {\\n      // [optional] Do something with the error\\n    },\\n  });\\n \\n  return (\\n    <div>\\n      <button\\n        onClick={() =>\\n          sendUserOperation({\\n            uo: {\\n              target: "0xTARGET_ADDRESS",\\n              data: "0x",\\n              value: 0n,\\n            },\\n          })\\n        }\\n        disabled={isSendingUserOperation}\\n      >\\n        {isSendingUserOperation ? "Sending..." : "Send UO"}\\n      </button>\\n    </div>\\n  );\\n}
\\n\",\"id\":\"pages/react/send-user-operations.mdx#single-user-operation\",\"isPage\":false,\"text\":\"\\nIn the below example, we use LightAccount as the underlying Smart Contract type. You can also use MultiOwnerModularAccount if you want to provide your users with an ERC-6900 compliant modular account,\\nor you can use MultiOwnerLightAccount if you want to support an account with multiple owners.\\nimport React from "react";\\nimport {\\n type UseSendUserOperationResult,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nexport default function MyOpSenderComponent() {\\n const { client } = useSmartAccountClient({ type: "LightAccount" });\\n \\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n // optional parameter that will wait for the transaction to be mined before returning\\n waitForTxn: true,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n });\\n \\n return (\\n <div>\\n <button\\n onClick={() =>\\n sendUserOperation({\\n uo: {\\n target: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: 0n,\\n },\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? "Sending..." : "Send UO"}\\n </button>\\n </div>\\n );\\n}\\n\",\"title\":\"Single user operation\",\"titles\":[\"Send user operations\"]},{\"href\":\"/react/send-user-operations#batch-user-operation\",\"html\":\"\\n

It's also possible to send user operations in batch using the same hook.

\\n
import React from "react";\\nimport {\\n  type UseSendUserOperationResult,\\n  useSendUserOperation,\\n  useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nexport default function MyOpSenderComponent() {\\n  const { client } = useSmartAccountClient({ type: "LightAccount" });\\n \\n  const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n    client,\\n    // optional parameter that will wait for the transaction to be mined before returning\\n    waitForTxn: true,\\n    onSuccess: ({ hash, request }) => {\\n      // [optional] Do something with the hash and request\\n    },\\n    onError: (error) => {\\n      // [optional] Do something with the error\\n    },\\n  });\\n \\n  return (\\n    <div>\\n      <button\\n        onClick={() =>\\n          sendUserOperation({\\n            uo: [\\n              {\\n                target: "0xTARGET_ADDRESS",\\n                data: "0x",\\n                value: 0n,\\n              },\\n              {\\n                target: "0xTARGET_ADDRESS",\\n                data: "0x",\\n                value: 0n,\\n              },\\n            ],\\n          })\\n        }\\n        disabled={isSendingUserOperation}\\n      >\\n        {isSendingUserOperation ? "Sending..." : "Send UO"}\\n      </button>\\n    </div>\\n  );\\n}
\",\"id\":\"pages/react/send-user-operations.mdx#batch-user-operation\",\"isPage\":false,\"text\":\"\\nIt's also possible to send user operations in batch using the same hook.\\nimport React from "react";\\nimport {\\n type UseSendUserOperationResult,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nexport default function MyOpSenderComponent() {\\n const { client } = useSmartAccountClient({ type: "LightAccount" });\\n \\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n // optional parameter that will wait for the transaction to be mined before returning\\n waitForTxn: true,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n });\\n \\n return (\\n <div>\\n <button\\n onClick={() =>\\n sendUserOperation({\\n uo: [\\n {\\n target: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: 0n,\\n },\\n {\\n target: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: 0n,\\n },\\n ],\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? "Sending..." : "Send UO"}\\n </button>\\n </div>\\n );\\n}\",\"title\":\"Batch user operation\",\"titles\":[\"Send user operations\"]}]}],[\"index.40b4feeca736e0d649ec983f115f8817eb4cb33b6bf8f221e738baef9d7c6a14\",{\"mdx\":\"---\\ntitle: Account Kit\\ndescription: Account Kit is a vertically integrated stack for building apps that support ERC-4337 smart accounts, Signer integrations, sponsoring gas, bundlers, and an SDK.\\nlayout: docs\\n---\\n\\nimport { TileButton, SmallTileRow } from \\\"../components/TileButton\\\";\\nimport { ClockForwardIcon } from \\\"../components/icons/ClockForwardIcon\\\";\\nimport { PointerIcon } from \\\"../components/icons/PointerIcon\\\";\\nimport { DotsIcon } from \\\"../components/icons/DotsIcon\\\";\\nimport { InfraIcon } from \\\"../components/icons/InfraIcon\\\";\\nimport { SmartContractIcon } from \\\"../components/icons/SmartContractIcon\\\";\\nimport { SignerIcon } from \\\"../components/icons/SignerIcon\\\";\\n\\n# Build Embedded Accounts with Account Kit\\n\\nBuild zero friction sign up and transaction flows with smart accounts. Sign up with email, login with passkeys, transact with sponsored gas, and checkout in one click with transaction batching.\\n\\n\\n\\n## React\\n\\n
\\n }\\n title=\\\"Quickstart\\\"\\n description=\\\"Start building in minutes with UI components and powerful React hooks.\\\"\\n href=\\\"/react/quickstart\\\"\\n />\\n }\\n title=\\\"Try the Demo\\\"\\n description=\\\"Customize React components, export your config, and start building.\\\"\\n href=\\\"https://aa-sdk-ui-demo.vercel.app\\\"\\n target=\\\"_blank\\\"\\n />\\n
\\n\\n## Have an advanced use case?\\n\\nAccount Kit is also published as a set of lower level packages that can be used to build custom solutions. This allows you to pick and choose which pieces you want to use, giving you\\nutlimate control over your application.\\n\\n
\\n }\\n title=\\\"Vanilla Typescript\\\"\\n description=\\\"Other frameworks i.e. svelt, vue, etc.\\\"\\n href=\\\"/core/overview\\\"\\n />\\n }\\n title=\\\"Infra\\\"\\n description=\\\"Integrate with Alchemy's infra\\\"\\n href=\\\"/infra/overview\\\"\\n />\\n }\\n title=\\\"Smart Contracts\\\"\\n description=\\\"Use Alchemy's Smart Contracts\\\"\\n href=\\\"/smart-contracts/overview\\\"\\n />\\n }\\n title=\\\"Signer\\\"\\n description=\\\"Use Alchemy's Signer\\\"\\n href=\\\"/signer/overview\\\"\\n />\\n
\\n\",\"document\":[]}],[\"index.def5fd19c3a0ca54446c10ad35e4b9117c716d219c3dbc1e86c635e260781342\",{\"mdx\":\"---\\ntitle: Multi-chain Apps\\ndescription: Learn how to build multi-chain apps with Account Kit.\\n---\\n\\n# Multi-chain Apps\\n\\nAccount Kit supports multi-chain apps, allowing you to build applications that interact with multiple blockchains. This guide will show you how to set up your app to work with multiple chains.\\n\\n## Update your config\\n\\nIn order to support multiple chains in your app, the first thing you need to do is update your `createConfig` call to include the chains you want to support.\\n\\n```ts twoslash [config.ts]\\n// @noErrors\\nimport { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia, mainnet } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig({\\n apiKey: \\\"ALCHEMY_API_KEY\\\",\\n // this is the default chain\\n chain: sepolia,\\n chains: [\\n {\\n chain: mainnet, // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n policyId: \\\"MAINNET_GAS_MANAGER_POLICY_ID\\\",\\n },\\n {\\n chain: sepolia,\\n // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n policyId: \\\"SEPOLIA_GAS_MANAGER_POLICY_ID\\\",\\n },\\n ],\\n});\\n```\\n\\n## Change chains\\n\\nOnce your app is configured to use multiple chains, you can switch between them at any time using the [`useChain`](/reference/account-kit/react/hooks/useChain) hook.\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport { useChain } from \\\"@account-kit/react\\\";\\nimport { mainnet, sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport default function MyComponent() {\\n const { chain, setChain } = useChain();\\n\\n return (\\n
\\n

Current chain: {chain.name}

\\n \\n \\n
\\n );\\n}\\n```\\n\",\"document\":[{\"href\":\"/react/multi-chain-apps#multi-chain-apps\",\"html\":\"\\n

Account Kit supports multi-chain apps, allowing you to build applications that interact with multiple blockchains. This guide will show you how to set up your app to work with multiple chains.

\\n\",\"id\":\"pages/react/multi-chain-apps.mdx#multi-chain-apps\",\"isPage\":true,\"text\":\"\\nAccount Kit supports multi-chain apps, allowing you to build applications that interact with multiple blockchains. This guide will show you how to set up your app to work with multiple chains.\\n\",\"title\":\"Multi-chain Apps\",\"titles\":[]},{\"href\":\"/react/multi-chain-apps#update-your-config\",\"html\":\"\\n

In order to support multiple chains in your app, the first thing you need to do is update your createConfig call to include the chains you want to support.

\\n
// @noErrors\\nimport { createConfig } from "@account-kit/react";\\nimport { sepolia, mainnet } from "@account-kit/infra";\\n \\nexport const config = createConfig({\\n  apiKey: "ALCHEMY_API_KEY",\\n  // this is the default chain\\n  chain: sepolia,\\n  chains: [\\n    {\\n      chain: mainnet, // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n      policyId: "MAINNET_GAS_MANAGER_POLICY_ID",\\n    },\\n    {\\n      chain: sepolia,\\n      // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n      policyId: "SEPOLIA_GAS_MANAGER_POLICY_ID",\\n    },\\n  ],\\n});
\\n\",\"id\":\"pages/react/multi-chain-apps.mdx#update-your-config\",\"isPage\":false,\"text\":\"\\nIn order to support multiple chains in your app, the first thing you need to do is update your createConfig call to include the chains you want to support.\\n// @noErrors\\nimport { createConfig } from "@account-kit/react";\\nimport { sepolia, mainnet } from "@account-kit/infra";\\n \\nexport const config = createConfig({\\n apiKey: "ALCHEMY_API_KEY",\\n // this is the default chain\\n chain: sepolia,\\n chains: [\\n {\\n chain: mainnet, // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n policyId: "MAINNET_GAS_MANAGER_POLICY_ID",\\n },\\n {\\n chain: sepolia,\\n // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n policyId: "SEPOLIA_GAS_MANAGER_POLICY_ID",\\n },\\n ],\\n});\\n\",\"title\":\"Update your config\",\"titles\":[\"Multi-chain Apps\"]},{\"href\":\"/react/multi-chain-apps#change-chains\",\"html\":\"\\n

Once your app is configured to use multiple chains, you can switch between them at any time using the useChain hook.

\\n
import React from "react";\\nimport { useChain } from "@account-kit/react";\\nimport { mainnet, sepolia } from "@account-kit/infra";\\n \\nexport default function MyComponent() {\\n  const { chain, setChain } = useChain();\\n \\n  return (\\n    <div>\\n      <p>Current chain: {chain.name}</p>\\n      <button onClick={() => setChain({ chain: mainnet })}>\\n        Switch to Mainnet\\n      </button>\\n      <button onClick={() => setChain({ chain: sepolia })}>\\n        Switch to Sepolia\\n      </button>\\n    </div>\\n  );\\n}
\",\"id\":\"pages/react/multi-chain-apps.mdx#change-chains\",\"isPage\":false,\"text\":\"\\nOnce your app is configured to use multiple chains, you can switch between them at any time using the useChain hook.\\nimport React from "react";\\nimport { useChain } from "@account-kit/react";\\nimport { mainnet, sepolia } from "@account-kit/infra";\\n \\nexport default function MyComponent() {\\n const { chain, setChain } = useChain();\\n \\n return (\\n <div>\\n <p>Current chain: {chain.name}</p>\\n <button onClick={() => setChain({ chain: mainnet })}>\\n Switch to Mainnet\\n </button>\\n <button onClick={() => setChain({ chain: sepolia })}>\\n Switch to Sepolia\\n </button>\\n </div>\\n );\\n}\",\"title\":\"Change chains\",\"titles\":[\"Multi-chain Apps\"]}]}],[\"index.209524bfb9e9d700b7389bba4e6d5de62f43957887c37fc7ba93b4940976048b\",{\"mdx\":\"---\\noutline: deep\\ntitle: Choosing a Signer\\ndescription: Explore Account Kit integration guides for signers including Magic.Link, Privy, Web3Auth, EOAs, and many more!\\n---\\n\\n# What is a Signer?\\n\\nA **Signer** is a service (e.g. Magic or Turnkey) or application (e.g. MetaMask) that manages the private key and signs operations. Most web3 users today use an [Externally Owned Account (EOA)](https://ethereum.org/en/developers/docs/accounts/#externally-owned-accounts-and-key-pairs) with a self-custodial Signer such as MetaMask to manage the private key.\\n\\nWith Account Kit, you will deploy a **smart account** for each user instead of an EOA wallet. This smart account stores the user's assets (e.g. tokens or NFTs).\\n\\nThe signer connected to the `SmartAccountClient` is used to sign messages, data including user operations and transactions. The signatures for the user operation will be only valid and execute if the signer is the owner or one of the owners of the account.\\n\\nYou can choose any Signer service or application to manage the Owner private key for the user. Using services like Magic, Turnkey, or Web3auth, you can secure the user's account with an email, social login, or passkeys. You can also use a self-custodial wallet like MetaMask as the Signer.\\n\\nThis doc provides a basic introduction to signers and the criteria you should consider when choosing which Signer to use with Account Kit in your application.\\n\\n## Role of a Signer\\n\\nThe Signer plays a crucial role in your app because it controls the user’s smart account. The Signer is responsible for:\\n\\n- Securely storing the user’s private key which controls the user’s assets\\n- Authenticating the user\\n- Protecting the user’s account from phishing attacks\\n- Signing user operations requested by the user, if and only if the user has authenticated\\n- Optionally offering account recovery methods\\n\\n## Criteria to consider\\n\\nHere are some important criteria to consider when choosing a Signer.\\n\\n- **Custody model:** Who has access to the private key?\\n - Self-Custodial: the end user controls the private key and manually approves signature requests\\n - Non-Custodial: a third-party service manages the private key or a subset of the key shares, but cannot sign transactions without the user’s involvement\\n - Custodial: a third-party service manages the private key and can sign transactions without the user’s involvement\\n- **Security model**: Assess the security model of the provider. Where is the private key stored? (on a device? in the cloud? on what cloud provider?) Is the private key encrypted? What encryption algorithm is used? Who has access to the decryption keys? This is a non-exhaustive list and we recommend doing further research.\\n- **Authentication methods:** What authentication method delivers the right balance of security, self-sovereignty, and ease-of-use for your target users?\\n - Email + Password: sign up for a smart account with an email and password.\\n - Social logins: sign up for a smart account with Google, Facebook, or other social logins.\\n - Passkeys: sign up for a smart account secured by a passkey (e.g. fingerprint or Face ID) stored on-device.\\n - Self custodial Wallet: sign up for a smart account using a self-custodial wallet such as MetaMask or Ledger.\\n- **Availability:** If the Signer service provider goes down, will users be able to sign transactions?\\n- **Key export:** Does the Signer allow the end user to export their private key? Can the user initiate an export even if the service provider has gone down? This is an important factor to ensure the user retains control of their assets no matter what happens to the service provider.\\n- **Key recovery**: If the user forgets their password or loses their passkey, what recovery methods does the Signer provide? If the provider stores a backup copy of the private key or MPC key shares, where are those backups stored and who has access to them?\\n\\n## Types of Signers\\n\\n### Non-custodial wallets\\n\\nNon-custodial wallet providers store private keys such that they cannot access the private key without the user’s involvement. For example, the user must provide a password or passkey that only they know in order to decrypt the private key stored by the provider. Users benefit from heightened security, while remaining in control of their private keys at all times. This is similar to a safety deposit box vault: the provider secures the bank vault but only the user has access to the individual safety deposit boxes (e.g. wallets).\\n\\n**Example**: Turnkey, Magic\\n\\n### MPC wallets (non-custodial)\\n\\nMulti-Party Computation (MPC) Signers split the Owner Account private key into key shares that are then distributed to a number of share holders. Share holders only know the value of their key share and transaction holders can sign transactions without revealing their key shares to other holders.\\n\\nValid signatures do not always require all shares to sign a transaction. MPC Signers can set a threshold, requiring a certain number of shares for a signature to be valid. Common configurations are 2 of 2 shares or 2 of 3 shares. By requiring multiple shares, MPC models mitigate the risks associated with a single key being compromised.\\n\\nSome MPC signers provide recovery services in which key share(s) are backed up in the service provider’s cloud, on the end user’s device, or in the end user’s cloud (e.g. iCloud or Google Drive). When evaluating an MPC provider, it’s important to under where each key share is stored.\\n\\n**Example**: Privy, Fireblocks MPC, Portal, Capsule, WalletKit\\n\\n:::details[TSS vs SSSS]\\n\\nThere are two common approaches to MPC.\\n\\nTraditionally, MPC services leveraged SSSS (Shamir’s Secret Shard Sharing). This approach generates a private key in one location and then the shares are distributed to the parties involved. When a user wants to sign, they need to retrieve N of M shares and reconstruct the key locally.\\n\\nAn improvement on SSSS is Threshold Signature Scheme (TSS). In this model, the key is never recreated during signing. Instead, each party is given the message to sign and then signs the payload locally before broadcasting the signature to the rest of the group. This allows for the key material to remain private and deconstructed.\\n\\nTSS is safer than SSSS because is possible to create the initial shares without ever constructing the original key on any one device. However, the tradeoff is that signing requires a Peer-to-Peer exchange which introduces latency.\\n\\nYou can read more about the difference between TSS and SSSS [here](https://www.dynamic.xyz/blog/the-evolution-of-multi-signature-and-multi-party-computation).\\n:::\\n\\n### Decentralized MPC network (non-custodial)\\n\\nA decentralized MPC network is an extension on the MPC approach outlined above. Instead of relying on a single, centralized service to store a key share and initiate signature requests, an MPC network distributes this responsibility across many nodes in a network. The user’s private key is split into many key shares with each share store by a different node. The user may request signatures from the network and a valid signature will be produced if and only if a threshold number of nodes agree to sign the request.\\n\\nExamples: Lit Protocol, Web3Auth (Torus Network)\\n\\n### Self-custodial wallet\\n\\nSelf-custodial wallets store the private key locally where only the end user can access it. For example, the user may store their seed phrase in a browser extension, in a mobile app using their phone’s secure enclave, or in a hardware wallet. When using a self-custodial wallet, the user is the only one with the power to sign transactions.\\n\\nSelf-custodial wallets require the user to maintain good security hygiene at all times. They also rely on the user to backup a copy of their private key in the event the wallet is lost or destroyed. If the user loses access to the device on which their private key is stored, they will have no way to recover the account unless they backed up the private key in another device or location.\\n\\n**Example**: MetaMask, Ledger\\n\\n### Custodial wallet\\n\\nCustodial wallet providers have full control over the user’s private key and sign transactions on behalf of the user. These services typically implement security measures to ensure that only the authorized user(s) can request a signature. These providers are also typically regulated entities (e.g., qualified custodians). The user must trust this service provider to securely store the private key and sign transactions if and only if the user wishes.\\n\\n**Example**: Coinbase Custody, Bitgo\\n\\n## Supported signers\\n\\n:::tip\\nWhen using the [React](/react/overview) or [Core](/core/overview) libraries, all of the account instances are created with the `AlchemyWebSigner` as an owner on the accounts.\\n:::\\n\\nThe Smart Account Signer interface is used to define an owner for [Smart Contract Accounts](/concepts/smart-contract-account).\\nThe interface takes two forms:\\n\\n1. `SmartAccountSigner` -- This is the base interface for all signer. It defines methods for signing messages and typed data, as well as getting the address of the signer.\\n2. `SmartAccountAuthenticator` -- This is an extension of the `SmartAccountSigner` that exposes additional methods for Signers that require authentication before signing.\\n\\nWithin Account Kit and `@aa-sdk/core`, we provide a number of implementations for `SmartAccountSigner` and `SmartAccountAuthenticator`:\\n\\n1. [`AlchemyWebSigner`](/reference/account-kit/signer/classes/AlchemyWebSigner/constructor) - This is an implementation of the `SmartAccountAuthenticator` that uses the our signer service to provision private keys securely\\n for end users. It allows you to authenticate your users with methods more familiar to them, such as email or social login.\\n2. [`LocalAccountSigner`](/reference/aa-sdk/core/classes/LocalAccountSigner/constructor) - This signer is useful if you have a mnemonic or private key locally that you want to use as an\\n owner of a smart contract account. This is useful for testing and development purposes.\\n3. [`WalletClientSigner`](/reference/aa-sdk/core/classes/WalletClientSigner/constructor) - This signer is useful if you want to use a [wallet client](https://viem.sh/docs/clients/wallet) as an owner.\\n Since a wallet client can wrap any [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) compliant provider, this is useful if you want to use EOA extensions or 3rd party signer service SDKs.\\n\\n---\\n\\n_Disclaimer: This page refers to third-party services, products software, technology, and content (collectively, “Third-Party Services”) that may be integrated or interact with Alchemy’s software and services. Alchemy is not responsible for any Third-Party Service, or for any compatibility issues, errors, or bugs caused in whole or in part by the Third-Party Service or any update or upgrade thereto. Your use of any Third-Party Service is at your own risk. You are responsible for obtaining any associated licenses and consents to the extent necessary for you to use the Third-Party Services. Your use of the Third-Party Services may be subject to separate terms and conditions set forth by the provider (including disclaimers or warnings), separate fees or charges, or a separate privacy notice. You are responsible for understanding and complying with any such terms or privacy notice._\\n\",\"document\":[{\"href\":\"/concepts/smart-account-signer#what-is-a-signer\",\"html\":\"\\n

A Signer is a service (e.g. Magic or Turnkey) or application (e.g. MetaMask) that manages the private key and signs operations. Most web3 users today use an Externally Owned Account (EOA) with a self-custodial Signer such as MetaMask to manage the private key.

\\n

With Account Kit, you will deploy a smart account for each user instead of an EOA wallet. This smart account stores the user's assets (e.g. tokens or NFTs).

\\n

The signer connected to the SmartAccountClient is used to sign messages, data including user operations and transactions. The signatures for the user operation will be only valid and execute if the signer is the owner or one of the owners of the account.

\\n

You can choose any Signer service or application to manage the Owner private key for the user. Using services like Magic, Turnkey, or Web3auth, you can secure the user's account with an email, social login, or passkeys. You can also use a self-custodial wallet like MetaMask as the Signer.

\\n

This doc provides a basic introduction to signers and the criteria you should consider when choosing which Signer to use with Account Kit in your application.

\\n\",\"id\":\"pages/concepts/smart-account-signer.mdx#what-is-a-signer\",\"isPage\":true,\"text\":\"\\nA Signer is a service (e.g. Magic or Turnkey) or application (e.g. MetaMask) that manages the private key and signs operations. Most web3 users today use an Externally Owned Account (EOA) with a self-custodial Signer such as MetaMask to manage the private key.\\nWith Account Kit, you will deploy a smart account for each user instead of an EOA wallet. This smart account stores the user's assets (e.g. tokens or NFTs).\\nThe signer connected to the SmartAccountClient is used to sign messages, data including user operations and transactions. The signatures for the user operation will be only valid and execute if the signer is the owner or one of the owners of the account.\\nYou can choose any Signer service or application to manage the Owner private key for the user. Using services like Magic, Turnkey, or Web3auth, you can secure the user's account with an email, social login, or passkeys. You can also use a self-custodial wallet like MetaMask as the Signer.\\nThis doc provides a basic introduction to signers and the criteria you should consider when choosing which Signer to use with Account Kit in your application.\\n\",\"title\":\"What is a Signer?\",\"titles\":[]},{\"href\":\"/concepts/smart-account-signer#role-of-a-signer\",\"html\":\"\\n

The Signer plays a crucial role in your app because it controls the user’s smart account. The Signer is responsible for:

\\n
    \\n
  • Securely storing the user’s private key which controls the user’s assets
  • \\n
  • Authenticating the user
  • \\n
  • Protecting the user’s account from phishing attacks
  • \\n
  • Signing user operations requested by the user, if and only if the user has authenticated
  • \\n
  • Optionally offering account recovery methods
  • \\n
\\n\",\"id\":\"pages/concepts/smart-account-signer.mdx#role-of-a-signer\",\"isPage\":false,\"text\":\"\\nThe Signer plays a crucial role in your app because it controls the user’s smart account. The Signer is responsible for:\\n\\nSecurely storing the user’s private key which controls the user’s assets\\nAuthenticating the user\\nProtecting the user’s account from phishing attacks\\nSigning user operations requested by the user, if and only if the user has authenticated\\nOptionally offering account recovery methods\\n\\n\",\"title\":\"Role of a Signer\",\"titles\":[\"What is a Signer?\"]},{\"href\":\"/concepts/smart-account-signer#criteria-to-consider\",\"html\":\"\\n

Here are some important criteria to consider when choosing a Signer.

\\n
    \\n
  • Custody model: Who has access to the private key?\\n
      \\n
    • Self-Custodial: the end user controls the private key and manually approves signature requests
    • \\n
    • Non-Custodial: a third-party service manages the private key or a subset of the key shares, but cannot sign transactions without the user’s involvement
    • \\n
    • Custodial: a third-party service manages the private key and can sign transactions without the user’s involvement
    • \\n
    \\n
  • \\n
  • Security model: Assess the security model of the provider. Where is the private key stored? (on a device? in the cloud? on what cloud provider?) Is the private key encrypted? What encryption algorithm is used? Who has access to the decryption keys? This is a non-exhaustive list and we recommend doing further research.
  • \\n
  • Authentication methods: What authentication method delivers the right balance of security, self-sovereignty, and ease-of-use for your target users?\\n
      \\n
    • Email + Password: sign up for a smart account with an email and password.
    • \\n
    • Social logins: sign up for a smart account with Google, Facebook, or other social logins.
    • \\n
    • Passkeys: sign up for a smart account secured by a passkey (e.g. fingerprint or Face ID) stored on-device.
    • \\n
    • Self custodial Wallet: sign up for a smart account using a self-custodial wallet such as MetaMask or Ledger.
    • \\n
    \\n
  • \\n
  • Availability: If the Signer service provider goes down, will users be able to sign transactions?
  • \\n
  • Key export: Does the Signer allow the end user to export their private key? Can the user initiate an export even if the service provider has gone down? This is an important factor to ensure the user retains control of their assets no matter what happens to the service provider.
  • \\n
  • Key recovery: If the user forgets their password or loses their passkey, what recovery methods does the Signer provide? If the provider stores a backup copy of the private key or MPC key shares, where are those backups stored and who has access to them?
  • \\n
\\n\",\"id\":\"pages/concepts/smart-account-signer.mdx#criteria-to-consider\",\"isPage\":false,\"text\":\"\\nHere are some important criteria to consider when choosing a Signer.\\n\\nCustody model: Who has access to the private key?\\n\\nSelf-Custodial: the end user controls the private key and manually approves signature requests\\nNon-Custodial: a third-party service manages the private key or a subset of the key shares, but cannot sign transactions without the user’s involvement\\nCustodial: a third-party service manages the private key and can sign transactions without the user’s involvement\\n\\n\\nSecurity model: Assess the security model of the provider. Where is the private key stored? (on a device? in the cloud? on what cloud provider?) Is the private key encrypted? What encryption algorithm is used? Who has access to the decryption keys? This is a non-exhaustive list and we recommend doing further research.\\nAuthentication methods: What authentication method delivers the right balance of security, self-sovereignty, and ease-of-use for your target users?\\n\\nEmail + Password: sign up for a smart account with an email and password.\\nSocial logins: sign up for a smart account with Google, Facebook, or other social logins.\\nPasskeys: sign up for a smart account secured by a passkey (e.g. fingerprint or Face ID) stored on-device.\\nSelf custodial Wallet: sign up for a smart account using a self-custodial wallet such as MetaMask or Ledger.\\n\\n\\nAvailability: If the Signer service provider goes down, will users be able to sign transactions?\\nKey export: Does the Signer allow the end user to export their private key? Can the user initiate an export even if the service provider has gone down? This is an important factor to ensure the user retains control of their assets no matter what happens to the service provider.\\nKey recovery: If the user forgets their password or loses their passkey, what recovery methods does the Signer provide? If the provider stores a backup copy of the private key or MPC key shares, where are those backups stored and who has access to them?\\n\\n\",\"title\":\"Criteria to consider\",\"titles\":[\"What is a Signer?\"]},{\"href\":\"/concepts/smart-account-signer#types-of-signers\",\"html\":\"\\n\",\"id\":\"pages/concepts/smart-account-signer.mdx#types-of-signers\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Types of Signers\",\"titles\":[\"What is a Signer?\"]},{\"href\":\"/concepts/smart-account-signer#non-custodial-wallets\",\"html\":\"\\n

Non-custodial wallet providers store private keys such that they cannot access the private key without the user’s involvement. For example, the user must provide a password or passkey that only they know in order to decrypt the private key stored by the provider. Users benefit from heightened security, while remaining in control of their private keys at all times. This is similar to a safety deposit box vault: the provider secures the bank vault but only the user has access to the individual safety deposit boxes (e.g. wallets).

\\n

Example: Turnkey, Magic

\\n\",\"id\":\"pages/concepts/smart-account-signer.mdx#non-custodial-wallets\",\"isPage\":false,\"text\":\"\\nNon-custodial wallet providers store private keys such that they cannot access the private key without the user’s involvement. For example, the user must provide a password or passkey that only they know in order to decrypt the private key stored by the provider. Users benefit from heightened security, while remaining in control of their private keys at all times. This is similar to a safety deposit box vault: the provider secures the bank vault but only the user has access to the individual safety deposit boxes (e.g. wallets).\\nExample: Turnkey, Magic\\n\",\"title\":\"Non-custodial wallets\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]},{\"href\":\"/concepts/smart-account-signer#mpc-wallets-non-custodial\",\"html\":\"\\n

Multi-Party Computation (MPC) Signers split the Owner Account private key into key shares that are then distributed to a number of share holders. Share holders only know the value of their key share and transaction holders can sign transactions without revealing their key shares to other holders.

\\n

Valid signatures do not always require all shares to sign a transaction. MPC Signers can set a threshold, requiring a certain number of shares for a signature to be valid. Common configurations are 2 of 2 shares or 2 of 3 shares. By requiring multiple shares, MPC models mitigate the risks associated with a single key being compromised.

\\n

Some MPC signers provide recovery services in which key share(s) are backed up in the service provider’s cloud, on the end user’s device, or in the end user’s cloud (e.g. iCloud or Google Drive). When evaluating an MPC provider, it’s important to under where each key share is stored.

\\n

Example: Privy, Fireblocks MPC, Portal, Capsule, WalletKit

\\n
TSS vs SSSS

There are two common approaches to MPC.

Traditionally, MPC services leveraged SSSS (Shamir’s Secret Shard Sharing). This approach generates a private key in one location and then the shares are distributed to the parties involved. When a user wants to sign, they need to retrieve N of M shares and reconstruct the key locally.

An improvement on SSSS is Threshold Signature Scheme (TSS). In this model, the key is never recreated during signing. Instead, each party is given the message to sign and then signs the payload locally before broadcasting the signature to the rest of the group. This allows for the key material to remain private and deconstructed.

TSS is safer than SSSS because is possible to create the initial shares without ever constructing the original key on any one device. However, the tradeoff is that signing requires a Peer-to-Peer exchange which introduces latency.

You can read more about the difference between TSS and SSSS here.

\\n\",\"id\":\"pages/concepts/smart-account-signer.mdx#mpc-wallets-non-custodial\",\"isPage\":false,\"text\":\"\\nMulti-Party Computation (MPC) Signers split the Owner Account private key into key shares that are then distributed to a number of share holders. Share holders only know the value of their key share and transaction holders can sign transactions without revealing their key shares to other holders.\\nValid signatures do not always require all shares to sign a transaction. MPC Signers can set a threshold, requiring a certain number of shares for a signature to be valid. Common configurations are 2 of 2 shares or 2 of 3 shares. By requiring multiple shares, MPC models mitigate the risks associated with a single key being compromised.\\nSome MPC signers provide recovery services in which key share(s) are backed up in the service provider’s cloud, on the end user’s device, or in the end user’s cloud (e.g. iCloud or Google Drive). When evaluating an MPC provider, it’s important to under where each key share is stored.\\nExample: Privy, Fireblocks MPC, Portal, Capsule, WalletKit\\nTSS vs SSSSThere are two common approaches to MPC.Traditionally, MPC services leveraged SSSS (Shamir’s Secret Shard Sharing). This approach generates a private key in one location and then the shares are distributed to the parties involved. When a user wants to sign, they need to retrieve N of M shares and reconstruct the key locally.An improvement on SSSS is Threshold Signature Scheme (TSS). In this model, the key is never recreated during signing. Instead, each party is given the message to sign and then signs the payload locally before broadcasting the signature to the rest of the group. This allows for the key material to remain private and deconstructed.TSS is safer than SSSS because is possible to create the initial shares without ever constructing the original key on any one device. However, the tradeoff is that signing requires a Peer-to-Peer exchange which introduces latency.You can read more about the difference between TSS and SSSS here.\\n\",\"title\":\"MPC wallets (non-custodial)\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]},{\"href\":\"/concepts/smart-account-signer#decentralized-mpc-network-non-custodial\",\"html\":\"\\n

A decentralized MPC network is an extension on the MPC approach outlined above. Instead of relying on a single, centralized service to store a key share and initiate signature requests, an MPC network distributes this responsibility across many nodes in a network. The user’s private key is split into many key shares with each share store by a different node. The user may request signatures from the network and a valid signature will be produced if and only if a threshold number of nodes agree to sign the request.

\\n

Examples: Lit Protocol, Web3Auth (Torus Network)

\\n\",\"id\":\"pages/concepts/smart-account-signer.mdx#decentralized-mpc-network-non-custodial\",\"isPage\":false,\"text\":\"\\nA decentralized MPC network is an extension on the MPC approach outlined above. Instead of relying on a single, centralized service to store a key share and initiate signature requests, an MPC network distributes this responsibility across many nodes in a network. The user’s private key is split into many key shares with each share store by a different node. The user may request signatures from the network and a valid signature will be produced if and only if a threshold number of nodes agree to sign the request.\\nExamples: Lit Protocol, Web3Auth (Torus Network)\\n\",\"title\":\"Decentralized MPC network (non-custodial)\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]},{\"href\":\"/concepts/smart-account-signer#self-custodial-wallet\",\"html\":\"\\n

Self-custodial wallets store the private key locally where only the end user can access it. For example, the user may store their seed phrase in a browser extension, in a mobile app using their phone’s secure enclave, or in a hardware wallet. When using a self-custodial wallet, the user is the only one with the power to sign transactions.

\\n

Self-custodial wallets require the user to maintain good security hygiene at all times. They also rely on the user to backup a copy of their private key in the event the wallet is lost or destroyed. If the user loses access to the device on which their private key is stored, they will have no way to recover the account unless they backed up the private key in another device or location.

\\n

Example: MetaMask, Ledger

\\n\",\"id\":\"pages/concepts/smart-account-signer.mdx#self-custodial-wallet\",\"isPage\":false,\"text\":\"\\nSelf-custodial wallets store the private key locally where only the end user can access it. For example, the user may store their seed phrase in a browser extension, in a mobile app using their phone’s secure enclave, or in a hardware wallet. When using a self-custodial wallet, the user is the only one with the power to sign transactions.\\nSelf-custodial wallets require the user to maintain good security hygiene at all times. They also rely on the user to backup a copy of their private key in the event the wallet is lost or destroyed. If the user loses access to the device on which their private key is stored, they will have no way to recover the account unless they backed up the private key in another device or location.\\nExample: MetaMask, Ledger\\n\",\"title\":\"Self-custodial wallet\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]},{\"href\":\"/concepts/smart-account-signer#custodial-wallet\",\"html\":\"\\n

Custodial wallet providers have full control over the user’s private key and sign transactions on behalf of the user. These services typically implement security measures to ensure that only the authorized user(s) can request a signature. These providers are also typically regulated entities (e.g., qualified custodians). The user must trust this service provider to securely store the private key and sign transactions if and only if the user wishes.

\\n

Example: Coinbase Custody, Bitgo

\\n\",\"id\":\"pages/concepts/smart-account-signer.mdx#custodial-wallet\",\"isPage\":false,\"text\":\"\\nCustodial wallet providers have full control over the user’s private key and sign transactions on behalf of the user. These services typically implement security measures to ensure that only the authorized user(s) can request a signature. These providers are also typically regulated entities (e.g., qualified custodians). The user must trust this service provider to securely store the private key and sign transactions if and only if the user wishes.\\nExample: Coinbase Custody, Bitgo\\n\",\"title\":\"Custodial wallet\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]},{\"href\":\"/concepts/smart-account-signer#supported-signers\",\"html\":\"\\n\\n

The Smart Account Signer interface is used to define an owner for Smart Contract Accounts.\\nThe interface takes two forms:

\\n
    \\n
  1. SmartAccountSigner -- This is the base interface for all signer. It defines methods for signing messages and typed data, as well as getting the address of the signer.
  2. \\n
  3. SmartAccountAuthenticator -- This is an extension of the SmartAccountSigner that exposes additional methods for Signers that require authentication before signing.
  4. \\n
\\n

Within Account Kit and @aa-sdk/core, we provide a number of implementations for SmartAccountSigner and SmartAccountAuthenticator:

\\n
    \\n
  1. AlchemyWebSigner - This is an implementation of the SmartAccountAuthenticator that uses the our signer service to provision private keys securely\\nfor end users. It allows you to authenticate your users with methods more familiar to them, such as email or social login.
  2. \\n
  3. LocalAccountSigner - This signer is useful if you have a mnemonic or private key locally that you want to use as an\\nowner of a smart contract account. This is useful for testing and development purposes.
  4. \\n
  5. WalletClientSigner - This signer is useful if you want to use a wallet client as an owner.\\nSince a wallet client can wrap any EIP-1193 compliant provider, this is useful if you want to use EOA extensions or 3rd party signer service SDKs.
  6. \\n
\\n
\\n

Disclaimer: This page refers to third-party services, products software, technology, and content (collectively, “Third-Party Services”) that may be integrated or interact with Alchemy’s software and services. Alchemy is not responsible for any Third-Party Service, or for any compatibility issues, errors, or bugs caused in whole or in part by the Third-Party Service or any update or upgrade thereto. Your use of any Third-Party Service is at your own risk. You are responsible for obtaining any associated licenses and consents to the extent necessary for you to use the Third-Party Services. Your use of the Third-Party Services may be subject to separate terms and conditions set forth by the provider (including disclaimers or warnings), separate fees or charges, or a separate privacy notice. You are responsible for understanding and complying with any such terms or privacy notice.

\",\"id\":\"pages/concepts/smart-account-signer.mdx#supported-signers\",\"isPage\":false,\"text\":\"\\nWhen using the React or Core libraries, all of the account instances are created with the AlchemyWebSigner as an owner on the accounts.\\nThe Smart Account Signer interface is used to define an owner for Smart Contract Accounts.\\nThe interface takes two forms:\\n\\nSmartAccountSigner -- This is the base interface for all signer. It defines methods for signing messages and typed data, as well as getting the address of the signer.\\nSmartAccountAuthenticator -- This is an extension of the SmartAccountSigner that exposes additional methods for Signers that require authentication before signing.\\n\\nWithin Account Kit and @aa-sdk/core, we provide a number of implementations for SmartAccountSigner and SmartAccountAuthenticator:\\n\\nAlchemyWebSigner - This is an implementation of the SmartAccountAuthenticator that uses the our signer service to provision private keys securely\\nfor end users. It allows you to authenticate your users with methods more familiar to them, such as email or social login.\\nLocalAccountSigner - This signer is useful if you have a mnemonic or private key locally that you want to use as an\\nowner of a smart contract account. This is useful for testing and development purposes.\\nWalletClientSigner - This signer is useful if you want to use a wallet client as an owner.\\nSince a wallet client can wrap any EIP-1193 compliant provider, this is useful if you want to use EOA extensions or 3rd party signer service SDKs.\\n\\n\\nDisclaimer: This page refers to third-party services, products software, technology, and content (collectively, “Third-Party Services”) that may be integrated or interact with Alchemy’s software and services. Alchemy is not responsible for any Third-Party Service, or for any compatibility issues, errors, or bugs caused in whole or in part by the Third-Party Service or any update or upgrade thereto. Your use of any Third-Party Service is at your own risk. You are responsible for obtaining any associated licenses and consents to the extent necessary for you to use the Third-Party Services. Your use of the Third-Party Services may be subject to separate terms and conditions set forth by the provider (including disclaimers or warnings), separate fees or charges, or a separate privacy notice. You are responsible for understanding and complying with any such terms or privacy notice.\",\"title\":\"Supported signers\",\"titles\":[\"What is a Signer?\"]}]}],[\"index.7e294b9eca9808c27e5d6440c3ca0428f1436a2be524f457ff883a056c8556c6\",{\"mdx\":\"---\\ntitle: Send User Operations\\ndescription: Learn how to send user operations using Alchemy's infrastructure\\n---\\n\\n# Send User Operations\\n\\nOnce you've completed the [Quickstart](/infra/quickstart), you're ready to start sending user operations!\\n\\nUser operations can be sent either as single user operations or as a batch of user operations. In this guide, we'll cover both methods.\\n\\n## Single User Operation\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\\n```\\n\\n```ts twoslash [client.ts] filename=\\\"client.ts\\\"\\n// [!include ~/shared/infra/client.ts]\\n```\\n\\n:::\\n\\n## Batch User Operations\\n\\nTo batch user operations, you can just pass an array of user operations to the `sendUserOperation` method.\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: [\\n {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n {\\n target: \\\"0xTARGET_ADDRESS_2\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n ],\\n});\\n```\\n\\n```ts twoslash [client.ts] filename=\\\"client.ts\\\"\\n// [!include ~/shared/infra/client.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/infra/send-user-operations#send-user-operations\",\"html\":\"\\n

Once you've completed the Quickstart, you're ready to start sending user operations!

\\n

User operations can be sent either as single user operations or as a batch of user operations. In this guide, we'll cover both methods.

\\n\",\"id\":\"pages/infra/send-user-operations.mdx#send-user-operations\",\"isPage\":true,\"text\":\"\\nOnce you've completed the Quickstart, you're ready to start sending user operations!\\nUser operations can be sent either as single user operations or as a batch of user operations. In this guide, we'll cover both methods.\\n\",\"title\":\"Send User Operations\",\"titles\":[]},{\"href\":\"/infra/send-user-operations#single-user-operation\",\"html\":\"\\n
// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n  apiKey: "YOUR_API_KEY",\\n  policyId: "YOUR_POLICY_ID",\\n  chain: sepolia,\\n  account: await createLightAccount({\\n    chain: sepolia,\\n    transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  }),\\n});\\n// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n  apiKey: "YOUR_API_KEY",\\n  policyId: "YOUR_POLICY_ID",\\n  chain: sepolia,\\n  account: await createLightAccount({\\n    chain: sepolia,\\n    transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  }),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./client";\\n \\nconst { hash } = await client.sendUserOperation({\\n  uo: {\\n    target: "0xTARGET_ADDRESS",\\n    data: "0x",\\n    value: 0n,\\n  },\\n});
import { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n  apiKey: "YOUR_API_KEY",\\n  policyId: "YOUR_POLICY_ID",\\n  chain: sepolia,\\n  account: await createLightAccount({\\n    chain: sepolia,\\n    transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  }),\\n});
\\n\",\"id\":\"pages/infra/send-user-operations.mdx#single-user-operation\",\"isPage\":false,\"text\":\"\\n// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n apiKey: "YOUR_API_KEY",\\n policyId: "YOUR_POLICY_ID",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n apiKey: "YOUR_API_KEY",\\n policyId: "YOUR_POLICY_ID",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./client";\\n \\nconst { hash } = await client.sendUserOperation({\\n uo: {\\n target: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: 0n,\\n },\\n});import { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n apiKey: "YOUR_API_KEY",\\n policyId: "YOUR_POLICY_ID",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n\",\"title\":\"Single User Operation\",\"titles\":[\"Send User Operations\"]},{\"href\":\"/infra/send-user-operations#batch-user-operations\",\"html\":\"\\n

To batch user operations, you can just pass an array of user operations to the sendUserOperation method.

\\n
// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n  apiKey: "YOUR_API_KEY",\\n  policyId: "YOUR_POLICY_ID",\\n  chain: sepolia,\\n  account: await createLightAccount({\\n    chain: sepolia,\\n    transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  }),\\n});\\n// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n  apiKey: "YOUR_API_KEY",\\n  policyId: "YOUR_POLICY_ID",\\n  chain: sepolia,\\n  account: await createLightAccount({\\n    chain: sepolia,\\n    transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  }),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./client";\\n \\nconst { hash } = await client.sendUserOperation({\\n  uo: [\\n    {\\n      target: "0xTARGET_ADDRESS",\\n      data: "0x",\\n      value: 0n,\\n    },\\n    {\\n      target: "0xTARGET_ADDRESS_2",\\n      data: "0x",\\n      value: 0n,\\n    },\\n  ],\\n});
import { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n  apiKey: "YOUR_API_KEY",\\n  policyId: "YOUR_POLICY_ID",\\n  chain: sepolia,\\n  account: await createLightAccount({\\n    chain: sepolia,\\n    transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  }),\\n});
\",\"id\":\"pages/infra/send-user-operations.mdx#batch-user-operations\",\"isPage\":false,\"text\":\"\\nTo batch user operations, you can just pass an array of user operations to the sendUserOperation method.\\n// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n apiKey: "YOUR_API_KEY",\\n policyId: "YOUR_POLICY_ID",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n// @filename: client.ts\\n \\nimport { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n apiKey: "YOUR_API_KEY",\\n policyId: "YOUR_POLICY_ID",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./client";\\n \\nconst { hash } = await client.sendUserOperation({\\n uo: [\\n {\\n target: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: 0n,\\n },\\n {\\n target: "0xTARGET_ADDRESS_2",\\n data: "0x",\\n value: 0n,\\n },\\n ],\\n});import { createAlchemySmartAccountClient, sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const client = createAlchemySmartAccountClient({\\n apiKey: "YOUR_API_KEY",\\n policyId: "YOUR_POLICY_ID",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\",\"title\":\"Batch User Operations\",\"titles\":[\"Send User Operations\"]}]}],[\"index.82771fd83126b0515cf1b567b1b834df279dc380b08631c91c03fd1f0a0f5475\",{\"mdx\":\"---\\ntitle: Infra Overview\\ndescription: Overview of the @account-kit/infra package\\n---\\n\\n# Infra overview\\n\\nThe `@account-kit/infra` package provides client and middleware defintions for interacting with our ERC-4337 infrastructure. It makes it really easy to use just our infra (gas manager and bundler RPC) if you'd like more control over which smart contracts or signer you're using. The guides in this section of the\\nsite will help you get started with interacting with our infrastructure directly. If you're using this package directly you will need to make a decision on:\\n\\n1. which smart contracts to use as accounts (see [Choosing a smart account](#TODO)).\\n2. which signer to use as an owner on the accounts (see [Choosing a signer](#TODO)).\\n\",\"document\":[{\"href\":\"/infra/overview#infra-overview\",\"html\":\"\\n

The @account-kit/infra package provides client and middleware defintions for interacting with our ERC-4337 infrastructure. It makes it really easy to use just our infra (gas manager and bundler RPC) if you'd like more control over which smart contracts or signer you're using. The guides in this section of the\\nsite will help you get started with interacting with our infrastructure directly. If you're using this package directly you will need to make a decision on:

\\n
    \\n
  1. which smart contracts to use as accounts (see Choosing a smart account).
  2. \\n
  3. which signer to use as an owner on the accounts (see Choosing a signer).
  4. \\n
\",\"id\":\"pages/infra/overview.mdx#infra-overview\",\"isPage\":true,\"text\":\"\\nThe @account-kit/infra package provides client and middleware defintions for interacting with our ERC-4337 infrastructure. It makes it really easy to use just our infra (gas manager and bundler RPC) if you'd like more control over which smart contracts or signer you're using. The guides in this section of the\\nsite will help you get started with interacting with our infrastructure directly. If you're using this package directly you will need to make a decision on:\\n\\nwhich smart contracts to use as accounts (see Choosing a smart account).\\nwhich signer to use as an owner on the accounts (see Choosing a signer).\\n\",\"title\":\"Infra overview\",\"titles\":[]}]}],[\"index.20dd728f2f6eee67dbb23e94b1ee59be5fb91bd732e47e4d55d3e69bc947f40e\",{\"mdx\":\":::info\\nWe believe that strong security requires strong collaboration with skilled security researchers to improve the resilience of our code and all of the things it can do. If you believe you have found a security issue in our source code or smart contracts, we encourage you to participate in the Alchemy [Bug Bounty](https://hackerone.com/alchemyplatform) program and notify us.\\n:::\\n\",\"document\":[]}],[\"index.26a7186ff022a7f295b7c4f6e358a068c5792e4d89fade33207091e3376a6304\",{\"mdx\":\"---\\noutline: deep\\ntitle: React Overview\\ndescription: An overview of using React with Account Kit\\n---\\n\\nimport { TileButton } from \\\"../../components/TileButton\\\";\\nimport { ClockForwardIcon } from \\\"../../components/icons/ClockForwardIcon\\\";\\nimport { PointerIcon } from \\\"../../components/icons/PointerIcon\\\";\\n\\n# React Overview\\n\\n\\n\\nAccount Kit provides a first-class, fullstack experience for building embedded accounts with React using Alchemy's Signer, Alchemy's Rundler, and Alchemy's Smart Contract Account implementations.\\nWe provide both React hooks and UI components so you can focus on building the best user experience for your users, while focusing on the business logic of your application.\\n\\nCheck out the various guides and tutorials, or hop into the demo to customize the experience and start building.\\n\\n
\\n }\\n title=\\\"Quickstart\\\"\\n description=\\\"Start building in minutes with UI components and powerful React hooks.\\\"\\n href=\\\"/react/quickstart\\\"\\n />\\n }\\n title=\\\"Demo\\\"\\n description=\\\"Customize React components, export your config, and start building.\\\"\\n href=\\\"https://aa-sdk-ui-demo.vercel.app\\\"\\n target=\\\"_blank\\\"\\n />\\n
\\n\",\"document\":[]}],[\"index.bebf9dbe6833e07f9eed61a3e7e78e6ff4de65b5a88dbe566c6fef6543b98a1c\",{\"mdx\":\"---\\ntitle: Contact Alchemy\\ndescription: Contact Alchemy about Account Kit\\n---\\n\\n# Contact us\\n\\nIf there's anything we can do to improve your experience with Account Kit, please tell us!\\n\\n## Feedback\\n\\n1. If you have any questions on how to get started, start a [discussion](https://github.com/alchemyplatform/aa-sdk/discussions) in our github.\\n\\n2. If you are interested in an enterprise plan with Alchemy to scale your application, connect with us at [https://www.alchemy.com](https://www.alchemy.com/contact-sales/?a=ak-docs).\\n\\n## Contributing\\n\\n1. If you see a issue in our code or documentation, feel free to address it yourself! See this [README](https://github.com/alchemyplatform/aa-sdk/blob/main/CONTRIBUTING) on contributing to Account Kit's codebase.\\n\\n2. If you are interested in [ERC-6900](https://eips.ethereum.org/EIPS/eip-6900) or modular account development, join the [outreach waitlist](https://docs.google.com/forms/d/1Z3wFRiMoEKoo8FJFrymVEOzrbKQXjSnYhm_hKKDnooE/edit) or our [Telegram group](https://t.me/+KfB9WuhKDgk5YzIx).\\n\",\"document\":[{\"href\":\"/resources/contact-us#contact-us\",\"html\":\"\\n

If there's anything we can do to improve your experience with Account Kit, please tell us!

\\n\",\"id\":\"pages/resources/contact-us.mdx#contact-us\",\"isPage\":true,\"text\":\"\\nIf there's anything we can do to improve your experience with Account Kit, please tell us!\\n\",\"title\":\"Contact us\",\"titles\":[]},{\"href\":\"/resources/contact-us#feedback\",\"html\":\"\\n
    \\n
  1. \\n

    If you have any questions on how to get started, start a discussion in our github.

    \\n
  2. \\n
  3. \\n

    If you are interested in an enterprise plan with Alchemy to scale your application, connect with us at https://www.alchemy.com.

    \\n
  4. \\n
\\n\",\"id\":\"pages/resources/contact-us.mdx#feedback\",\"isPage\":false,\"text\":\"\\n\\n\\nIf you have any questions on how to get started, start a discussion in our github.\\n\\n\\nIf you are interested in an enterprise plan with Alchemy to scale your application, connect with us at https://www.alchemy.com.\\n\\n\\n\",\"title\":\"Feedback\",\"titles\":[\"Contact us\"]},{\"href\":\"/resources/contact-us#contributing\",\"html\":\"\\n
    \\n
  1. \\n

    If you see a issue in our code or documentation, feel free to address it yourself! See this README on contributing to Account Kit's codebase.

    \\n
  2. \\n
  3. \\n

    If you are interested in ERC-6900 or modular account development, join the outreach waitlist or our Telegram group.

    \\n
  4. \\n
\",\"id\":\"pages/resources/contact-us.mdx#contributing\",\"isPage\":false,\"text\":\"\\n\\n\\nIf you see a issue in our code or documentation, feel free to address it yourself! See this README on contributing to Account Kit's codebase.\\n\\n\\nIf you are interested in ERC-6900 or modular account development, join the outreach waitlist or our Telegram group.\\n\\n\",\"title\":\"Contributing\",\"titles\":[\"Contact us\"]}]}],[\"index.6a7434d2c6871fddf76c29b0cf900e1ff44fd30b9357e5081da0e33ad6d1450e\",{\"mdx\":\"---\\ntitle: React Quickstart\\ndescription: Learn how to get started with Alchemy Account Kit in React.\\nnext:\\n text: \\\"Send user operations\\\"\\n link: /react/send-user-operations\\n---\\n\\nimport Snippet from \\\"../../shared/get-api-key.mdx\\\";\\n\\n# React Quickstart\\n\\nAccount Kit is the easiest way to integrate smart accounts in your React App. In this guide, we'll walk you through crafting a delightful sign-up with email and passkey, and then a seamless checkout with gas sponsorship.\\n\\nFor existing EOA (non-smart contract) users, the Account Kit modal also supports logging in with injected wallets!\\n\\nBelow you'll find guides for:\\n\\n1. Starting fresh with a new NextJS Template\\n2. Integrate Account Kit in an existing React Project\\n\\n## New NextJS project\\n\\n### 1. Create a new NextJS app using our template\\n\\nFor a simple end-to-end example, we will spin up a new NextJS app using the ui components template.\\n\\n:::code-group\\n\\n```bash [yarn]\\nyarn create next-app my-smart-app -e https://github.com/avarobinson/embedded-accounts-ui-components-alpha-quickstart-nextjs\\n```\\n\\n```bash [npm]\\nnpx create-next-app my-smart-app -e https://github.com/avarobinson/embedded-accounts-ui-components-alpha-quickstart-nextjs\\n```\\n\\n:::\\n\\n### 2. Get your Alchemy API Key\\n\\n\\n\\n…and paste the API key into `config.ts` where you see `your_api_key`\\n\\n```ts [config.ts]\\n// ...other stuff in the file\\nexport const config = createConfig(\\n {\\n apiKey: \\\"your_api_key\\\", // TODO: add your Alchemy API key - setup your app and embedded account config in the alchemy dashboard (https://dashboard.alchemy.com/accounts) - if you don't want to leak api keys, you can proxy to a backend and set the rpcUrl instead here\\n chain: sepolia,\\n ssr: true, // defers hydration of the account state to the client after the initial mount solving any inconsistencies between server and client state (read more here: https://accountkit.alchemy.com/react/ssr)\\n storage: cookieStorage, // persist the account state using cookies (read more here: https://accountkit.alchemy.com/react/ssr#persisting-the-account-state)\\n },\\n uiConfig\\n);\\n// ...other stuff in the file\\n```\\n\\n### 3. Run the app!\\n\\nThat's it! Run the NextJS app to see your new auth flow in action ✨\\n\\n:::code-group\\n\\n```bash [yarn]\\nyarn dev\\n```\\n\\n```bash [npm]\\nnpm run dev\\n```\\n\\n:::\\n\\n## Existing project\\n\\nTo integrate in to your existing dapp and better understand the above demo app, we will walk through the each of the steps required for using alchemy ui components in technical depth!\\n\\n### 1. Install the packages\\n\\n**Prerequisites**\\n\\n- minimum React version of 18\\n- minimum Typescript version of 5\\n- pin viem to 2.8.6 (`yarn add viem@2.8.6`)\\n\\n**Installation**\\n\\nInstall the React and Infra packages from Account Kit along with [tailwind](https://tailwindcss.com/) for styling and react-query to support react components.\\n\\n:::code-group\\n\\n```bash [yarn]\\nyarn add @account-kit/infra @account-kit/react @tanstack/react-query\\nyarn add -D tailwindcss postcss autoprefixer\\n```\\n\\n```bash [npm]\\nnpm install @account-kit/infra @account-kit/react @tanstack/react-query\\nnpm install -D tailwindcss postcss autoprefixer\\n```\\n\\n:::\\n\\n**Tailwind Setup**\\n\\nIf you don't have tailwind setup yet, once you run the above, you can run the following:\\n\\n```bash\\nnpx tailwindcss init -p\\n```\\n\\nThe above command will generate a `tailwind.config.ts` and `postcss.config.ts` file for you. The only thing left to do is to create a `global.css` file and import it in the root of your app.\\n\\n```css [global.css]\\n@tailwind base;\\n@tailwind components;\\n@tailwind utilities;\\n```\\n\\nFor more on tailwind setup, see these [steps](https://tailwindcss.com/docs/installation/using-postcss).\\n\\n### 2. Get your Alchemy API Key\\n\\nSee the steps above in the NextJS section to get your API key.\\n\\n### 3. Configure your UI components\\n\\nIn this step, you'll customize your authentication methods and UI styles.\\n\\nThe [**demo app**](https://aa-sdk-ui-demo.vercel.app/) provides an interactive sandbox to explore combinations. When you’re all done, click the ‘Code preview’ toggle to export your code! You’ll get two files:\\n\\n1. `tailwind.config.ts`\\n2. `config.ts`\\n\\n**\\\\*Note:** tailwind.config.ts and config.ts changes are required even if using default styling\\\\*\\n\\n\\n\\n#### 3a. Customize styling with tailwind\\n\\n1. In the demo app, copy your `tailwind.config.ts` code into the file of the same name in your project. This will apply your custom styles: colors, border radius, and illustrations.\\n 1. Logo: logo images are loaded client side for maximum performance, so you’ll need to add the image file to your project and specify the file path in the config where noted.\\n 2. Light/Dark mode:\\n 1. Light Mode and Dark Mode are set to match the system theme. You can manually override this by following [this](https://tailwindcss.com/docs/dark-mode#toggling-dark-mode-manually) guide. TLDR: update your tailwindcss config to use `selector` mode for dark and then add the `dark` class to the root of your DOM\\n 3. You can customize even more [style properties](https://github.com/alchemyplatform/aa-sdk/blob/v4.x.x/account-kit/react/src/tailwind/types.ts#L6).\\n2. Make sure you wrap your existing tailwind config with `withAccountKitUi` :\\n\\n ```ts [tailwind.config.ts]\\n // tailwind.config.ts\\n import { withAccountKitUi } from \\\"@account-kit/react/tailwind\\\";\\n\\n export default withAccountKitUi(\\n {\\n // 1. (required) your tailwind config generated in setup or existing config including content, theme, plugins, etc. - https://tailwindcss.com/docs/installation/using-postcss\\n },\\n {\\n // 2. (optional) overwrite AccountKit theme\\n }\\n );\\n ```\\n\\n#### 3b. Customize authentication methods\\n\\n1. In the root of your project, create a `config.ts` file\\n2. In the demo app, copy your `config.ts` code into the file of the same name in your project. This will apply your authentication methods (email, passkey, etc.)\\n\\n - `createConfig` is used to initialize the alchemy provider in the next step. It requires 2 params:\\n\\n - `props`: for creating an Alchemy config. Notice the 4 params passed to props in our example:\\n\\n - **apiKey** (required): Copy-paste your Alchemy API key, from step 2. Note that for production this key should be protected by proxying to the backend and setting rpcUrl instead\\n - **chain** (required): Chain imported from @account-kit/infra . This chain must match the chain your api key / embedded accounts config is setup for.\\n - **ssr** (optional): Highly recommended for NextJs applications to keep account state consistent between the server and client\\n - **storage** (optional): Cookie storage highly recommended for NextJs applications to persist and cache account state across page loads\\n\\n - `ui`: for creating Alchemy Accounts UI components\\n\\n - See [here](https://github.com/alchemyplatform/aa-sdk/blob/dfab5c839dc782b21ba4d05f1892982133606cec/account-kit/react/src/types.ts#L5) for full details on the ui config params including authentication options\\n\\n3. Make sure to export your config and queryClient:\\n\\n**Remember to paste in your API Key from step 2**\\n\\n```ts [src/config.ts]\\n// @noErrors\\nimport { createConfig, cookieStorage } from \\\"@account-kit/react\\\";\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig(\\n {\\n // alchemy config\\n apiKey: \\\"YOUR_API_KEY\\\", // TODO: add your Alchemy API key - setup your app and embedded account config in the alchemy dashboard (https://dashboard.alchemy.com/accounts)\\n chain: sepolia, // TODO: specify your preferred chain here and update imports from @account-kit/infra\\n ssr: true, // Defers hydration of the account state to the client after the initial mount solving any inconsistencies between server and client state (read more here: https://accountkit.alchemy.com/react/ssr)\\n storage: cookieStorage, // persist the account state using cookies (read more here: https://accountkit.alchemy.com/react/ssr#persisting-the-account-state)\\n },\\n {\\n // authentication ui config - your customizations here\\n auth: {\\n sections: [\\n [{ type: \\\"email\\\" }],\\n [{ type: \\\"passkey\\\" }, { type: \\\"injected\\\" }],\\n ],\\n addPasskeyOnSignup: true,\\n showSignInText: true,\\n },\\n }\\n);\\n\\nexport const queryClient = new QueryClient();\\n```\\n\\n### 4. Set up the Alchemy Provider\\n\\nThis example assumes you are using the NextJS app [router](https://nextjs.org/docs/getting-started/project-structure#app-routing-conventions).\\n\\nHowever, the key pieces are applicable to any React app and you can structure the location of the code as needed.\\n\\n#### 4a. **Create the provider - app/providers.tsx**\\n\\nOnce you have styling and authentication configs, create a `providers.tsx` file and import the `AlchemyAccountProvider`.\\n\\nThe `QueryClientProvider` is also required to handle React Queries within the Alchemy Account Provider.\\n\\n```tsx [app/providers.tsx]\\n\\\"use client\\\";\\nimport { config, queryClient } from \\\"@/config\\\";\\nimport { AlchemyClientState } from \\\"@account-kit/core\\\";\\nimport { AlchemyAccountProvider } from \\\"@account-kit/react\\\";\\nimport { QueryClientProvider } from \\\"@tanstack/react-query\\\";\\nimport { PropsWithChildren } from \\\"react\\\";\\n\\nexport const Providers = (\\n props: PropsWithChildren<{ initialState?: AlchemyClientState }>\\n) => {\\n return (\\n \\n \\n {props.children}\\n \\n \\n );\\n};\\n```\\n\\n#### 4b. **Use the provider - layout.tsx**\\n\\nAny component or page that will use Alchemy React components, must be wrapped by this `Provider`.\\n\\nAdditionally, we recommend using cookies to set the initial state when creating the provider to persist state across reloads (🧠 remember the [cookie storage configured in step 3b](https://www.notion.so/Alchemy-Account-Kit-UI-Components-Alpha-Quickstart-0805fd3fb8ba4c15bfd88846d4ad53ea?pvs=21)).\\n\\nFor example, wrap your app with the created `Provider` by modifying your `layout.tsx` file.\\n\\n```tsx [app/layout.tsx]\\nimport { config } from \\\"@/config\\\";\\nimport { cookieToInitialState } from \\\"@account-kit/core\\\";\\nimport type { Metadata } from \\\"next\\\";\\nimport { Inter } from \\\"next/font/google\\\";\\nimport { headers } from \\\"next/headers\\\";\\nimport \\\"./globals.css\\\";\\nimport { Providers } from \\\"./providers\\\";\\n\\nconst inter = Inter({ subsets: [\\\"latin\\\"] });\\n\\nexport const metadata: Metadata = {\\n title: \\\"Embedded Accounts UI Components Quickstart NextJs Template\\\",\\n description: \\\"Embedded Accounts UI Components Quickstart NextJs Template\\\",\\n};\\n\\nexport default function RootLayout({\\n children,\\n}: Readonly<{\\n children: React.ReactNode;\\n}>) {\\n // This will allow us to persist state across page boundaries (read more here: https://accountkit.alchemy.com/react/ssr#persisting-the-account-state)\\n const initialState = cookieToInitialState(\\n config,\\n headers().get(\\\"cookie\\\") ?? undefined\\n );\\n\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\\n```\\n\\n### 5. Run it\\n\\nOnce you have wrapped your app with the Alchemy Provider, you can now use the pre-built Alchemy react components for auth throughout your app.\\n\\nAll you need to do is `useAuthModal`! For example, pop open the auth modal like so:\\n\\n```tsx [app/page.tsx]\\n\\\"use client\\\";\\nimport {\\n useAuthModal,\\n useLogout,\\n useSignerStatus,\\n useUser,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function Home() {\\n const user = useUser();\\n const { openAuthModal } = useAuthModal();\\n const signerStatus = useSignerStatus();\\n const { logout } = useLogout();\\n\\n return (\\n
\\n {signerStatus.isInitializing ? (\\n <>Loading...\\n ) : user ? (\\n
\\n

Success!

\\n You're logged in as {user.email ?? \\\"anon\\\"}. logout()}\\n >\\n Log out\\n \\n
\\n ) : (\\n \\n )}\\n
\\n );\\n}\\n```\\n\",\"document\":[]}],[\"index.78230d53b671155f29a8984b8c524a073be54f38eeae0b334b3561664708bfff\",{\"mdx\":\"---\\ntitle: Using the Signer as an EOA\\ndescription: Learn how to use the Alchemy Signer as an EOA\\n---\\n\\n# Using the Signer as an EOA\\n\\n:::warning\\nNote that EOA wallets will not have access to smart account features like gas sponsorship, batched transactions, multi-owner, or plugins. If you want to switch from EOA to smart accounts later, then each user will need to transfer their assets from the EOA account to a new smart account. It is not currently possible to \\\"upgrade\\\" and EOA to a smart contract account, although the community is discussing potential [EIPs](https://eips.ethereum.org/EIPS/eip-7377) to do that in the future.\\n:::\\n\\nBecause the Alchemy Signer has its own `address` and supports signing messages as raw hashes, it is possible to use this signer as an EOA directly. To do so, you can adapt the AlchemySigner to your library of choice and leverage its `signMessage`, `signTypedData`, and `signTransaction` methods directly. The public address of the signer can be accessed via `getAddress`.\\n\\nIf you are using viem, then you can use the `toViemAccount` method which will allow you to use the signer with a [`WalletClient`](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc).\\n\\n:::code-group\\n\\n```ts [createWalletClient.ts] twoslash\\nimport { signer } from \\\"./signer\\\";\\nimport { createWalletClient, http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nexport const walletClient = createWalletClient({\\n transport: http(\\\"alchemy_rpc_url\\\"),\\n chain: sepolia,\\n account: signer.toViemAccount(),\\n});\\n```\\n\\n```ts twoslash [signer.ts] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/signer/as-an-eoa#using-the-signer-as-an-eoa\",\"html\":\"\\n\\n

Because the Alchemy Signer has its own address and supports signing messages as raw hashes, it is possible to use this signer as an EOA directly. To do so, you can adapt the AlchemySigner to your library of choice and leverage its signMessage, signTypedData, and signTransaction methods directly. The public address of the signer can be accessed via getAddress.

\\n

If you are using viem, then you can use the toViemAccount method which will allow you to use the signer with a WalletClient.

\\n
// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\nimport { createWalletClient, http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nexport const walletClient = createWalletClient({\\n  transport: http("alchemy_rpc_url"),\\n  chain: sepolia,\\n  account: signer.toViemAccount(),\\n});
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\",\"id\":\"pages/signer/as-an-eoa.mdx#using-the-signer-as-an-eoa\",\"isPage\":true,\"text\":\"\\nNote that EOA wallets will not have access to smart account features like gas sponsorship, batched transactions, multi-owner, or plugins. If you want to switch from EOA to smart accounts later, then each user will need to transfer their assets from the EOA account to a new smart account. It is not currently possible to "upgrade" and EOA to a smart contract account, although the community is discussing potential EIPs to do that in the future.\\nBecause the Alchemy Signer has its own address and supports signing messages as raw hashes, it is possible to use this signer as an EOA directly. To do so, you can adapt the AlchemySigner to your library of choice and leverage its signMessage, signTypedData, and signTransaction methods directly. The public address of the signer can be accessed via getAddress.\\nIf you are using viem, then you can use the toViemAccount method which will allow you to use the signer with a WalletClient.\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\nimport { createWalletClient, http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nexport const walletClient = createWalletClient({\\n transport: http("alchemy_rpc_url"),\\n chain: sepolia,\\n account: signer.toViemAccount(),\\n});import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\",\"title\":\"Using the Signer as an EOA\",\"titles\":[]}]}],[\"index.9972690357fe0e2f5dcf6a6c048f2cb48d322b2e979e4e20e92a058de04ca833\",{\"mdx\":\"---\\ntitle: How to sponsor gas for a User Operation\\ndescription: Follow this guide to sponsor gas for UserOperations from any\\n ERC-4337 smart account. Account Kit is a vertically integrated stack for\\n building apps that support ERC-4337.\\n---\\n\\nimport Snippet from \\\"../../shared/create-gas-policy.mdx\\\";\\n\\n# How to sponsor gas for a User Operation\\n\\nGas fees are a significant barrier to entry for new user of your app. With Account Kit you can remove this barrier by sponsoring gas fees for transactions via the [Gas Manager](https://docs.alchemy.com/docs/gas-manager-services/?a=ak-docs). This guide explains how to sponsor gas by creating a gas policy, linking it to your client, and sending sponsored `UserOperations` (UOs) from a smart account.\\n\\n## How to sponsor gas\\n\\nAfter [setting up Account Kit](/react/quickstart) in your project, follow these steps to sponsor gas.\\n\\n### Create a Gas Manager policy\\n\\n\\n\\n### Set the Policy ID globally\\n\\nWhen creating your Account Kit config, you can optionally pass in a Gas Policy ID. This will enable all UOs sent by the `useSendUserOperation` hook to be sponsored by the policy you created.\\n\\n![Policy ID](/images/policy-id.png)\\n\\nCopy it and then replace the `GAS_MANAGER_POLICY_ID` in the snippet below.\\n\\n:::tip\\nRemember to replace `ALCHEMY_API_KEY` with your Alchemy API key. If you don't have one yet, you can create an API key on the [Alchemy dashboard](https://dashboard.alchemy.com/signup/?a=aa-docs).\\n:::\\n\\n```ts twoslash [config.ts]\\n// @noErrors\\nimport { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig({\\n apiKey: \\\"ALCHEMY_API_KEY\\\",\\n chain: sepolia,\\n policyId: \\\"GAS_MANAGER_POLICY_ID\\\", // [!code ++]\\n});\\n```\\n\\nNow you can follow the guide for [Sending user operations](/react/send-user-operations) to send sponsored UOs from your smart account!\\n\\n### Set the gas policy ID per UserOperation\\n\\nIf you want more control over which UOs are sponsored, then you can set the policy ID on a specific instance of the `Smart Account Client` returned by the [`useSmartAccountClient`](/reference/account-kit/react/hooks/useSmartAccountClient) hook.\\n\\n```tsx twoslash\\nimport React from \\\"react\\\";\\nimport {\\n useSmartAccountClient,\\n useSendUserOperation,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyComponent() {\\n const { client } = useSmartAccountClient({\\n type: \\\"LightAccount\\\",\\n policyId: \\\"GAS_MANAGER_POLICY_ID\\\",\\n });\\n const { sendUserOperation } = useSendUserOperation({ client });\\n\\n return (\\n \\n sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n })\\n }\\n >\\n Send Sponsored User Operation\\n \\n );\\n}\\n```\\n\",\"document\":[]}],[\"index.fb127be02195cb58a30922005d6399a819ae03a73dab3add5244b41a1b3e7e8a\",{\"mdx\":\"---\\ntitle: Using within React Native applications\\ndescription: A guide on integrating Account Kit within a React Native application\\n---\\n\\n# Using within React Native applications\\n\\nThis hasn't been tested extensively, but it is possible to use Account Kit within a React Native application. We've built a simple example using expo [here](https://github.com/alchemyplatform/aa-sdk-rn-expo/tree/main). This guide assumes you're using Expo, but the same principles should apply to a bare React Native app as well.\\n\\n:::warning\\nThe Alchemy Signer is not yet supported in React Native applications. For 3rd party signer support in React Native, refer to your signer provider's documentation.\\n:::\\n\\n## Getting Started\\n\\n### Upgrade to the latest Beta version of Expo\\n\\nWe first need to get our environment setup. The first thing we need to do is make sure we're on the latest Beta version of Expo. The reason for this is that we need React Native version 0.74 or higher because it has `TextEncoder` natively supported.\\n\\n:::code-group\\n\\n```bash [npm]\\nnpx expo install expo@next --fix\\n```\\n\\n```bash [yarn]\\nyarn expo install expo@next --fix\\n```\\n\\n:::\\n\\n### Set up shims\\n\\nOnce we've got that setup, we need to setup a few shims so we can use crypto libraries in React Native.\\n\\n#### Install shim dependencies\\n\\n:::code-group\\n\\n```bash [npm]\\nnpm install --save node-libs-react-native crypto-browserify stream-browserify react-native-get-random-values\\n```\\n\\n```bash [yarn]\\nyarn add node-libs-react-native crypto-browserify stream-browserify react-native-get-random-values\\n```\\n\\n:::\\n\\n#### Register shim modules in Metro\\n\\nCreate or edit your `metro.config.js` file in the root of your project so that it includes the following:\\n\\n```js [metro.config.js]\\n// Learn more https://docs.expo.io/guides/customizing-metro\\nconst { getDefaultConfig } = require(\\\"expo/metro-config\\\");\\n\\n/** @type {import('expo/metro-config').MetroConfig} */\\nconst config = getDefaultConfig(__dirname);\\n// [!code focus:9]\\n// The following code ensures we have the necessary\\n// shims for crypto built into our project\\nconfig.resolver.extraNodeModules = {\\n ...config.resolver.extraNodeModules,\\n ...require(\\\"node-libs-react-native\\\"),\\n crypto: require.resolve(\\\"crypto-browserify\\\"),\\n stream: require.resolve(\\\"stream-browserify\\\"),\\n};\\n\\nmodule.exports = config;\\n```\\n\\n#### Register global shims\\n\\nImport the following packages at the top of your `App.tsx` file so that libraries that depend on globals like `crypto` have access to them.\\n\\n:::tip\\nIf you're using bare React Native, you would add the above imports to your `index.js` file.\\n:::\\n\\n```tsx [App.tsx]\\nimport \\\"node-libs-react-native/globals.js\\\";\\nimport \\\"react-native-get-random-values\\\";\\n\\n// rest of App.tsx\\n```\\n\\n### Install Account Kit and build!\\n\\nThat's it! Now you can install the packages you want from Account Kit and start building your React Native Account Abstraction app.\\n\\n:::code-group\\n\\n```bash [npm]\\nnpm install -s @alchemy/aa-alchemy @alchemy/aa-accounts @alchemy/aa-core\\n```\\n\\n```bash [yarn]\\nyarn add @alchemy/aa-alchemy @alchemy/aa-accounts @alchemy/aa-core\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/resources/react-native#using-within-react-native-applications\",\"html\":\"\\n

This hasn't been tested extensively, but it is possible to use Account Kit within a React Native application. We've built a simple example using expo here. This guide assumes you're using Expo, but the same principles should apply to a bare React Native app as well.

\\n\\n\",\"id\":\"pages/resources/react-native.mdx#using-within-react-native-applications\",\"isPage\":true,\"text\":\"\\nThis hasn't been tested extensively, but it is possible to use Account Kit within a React Native application. We've built a simple example using expo here. This guide assumes you're using Expo, but the same principles should apply to a bare React Native app as well.\\nThe Alchemy Signer is not yet supported in React Native applications. For 3rd party signer support in React Native, refer to your signer provider's documentation.\\n\",\"title\":\"Using within React Native applications\",\"titles\":[]},{\"href\":\"/resources/react-native#getting-started\",\"html\":\"\\n\",\"id\":\"pages/resources/react-native.mdx#getting-started\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Getting Started\",\"titles\":[\"Using within React Native applications\"]},{\"href\":\"/resources/react-native#upgrade-to-the-latest-beta-version-of-expo\",\"html\":\"\\n

We first need to get our environment setup. The first thing we need to do is make sure we're on the latest Beta version of Expo. The reason for this is that we need React Native version 0.74 or higher because it has TextEncoder natively supported.

\\n
npx expo install expo@next --fix
yarn expo install expo@next --fix
\\n\",\"id\":\"pages/resources/react-native.mdx#upgrade-to-the-latest-beta-version-of-expo\",\"isPage\":false,\"text\":\"\\nWe first need to get our environment setup. The first thing we need to do is make sure we're on the latest Beta version of Expo. The reason for this is that we need React Native version 0.74 or higher because it has TextEncoder natively supported.\\nnpx expo install expo@next --fixyarn expo install expo@next --fix\\n\",\"title\":\"Upgrade to the latest Beta version of Expo\",\"titles\":[\"Using within React Native applications\",\"Getting Started\"]},{\"href\":\"/resources/react-native#set-up-shims\",\"html\":\"\\n

Once we've got that setup, we need to setup a few shims so we can use crypto libraries in React Native.

\\n\",\"id\":\"pages/resources/react-native.mdx#set-up-shims\",\"isPage\":false,\"text\":\"\\nOnce we've got that setup, we need to setup a few shims so we can use crypto libraries in React Native.\\n\",\"title\":\"Set up shims\",\"titles\":[\"Using within React Native applications\",\"Getting Started\"]},{\"href\":\"/resources/react-native#install-shim-dependencies\",\"html\":\"\\n
npm install --save node-libs-react-native crypto-browserify stream-browserify react-native-get-random-values
yarn add node-libs-react-native crypto-browserify stream-browserify react-native-get-random-values
\\n\",\"id\":\"pages/resources/react-native.mdx#install-shim-dependencies\",\"isPage\":false,\"text\":\"\\nnpm install --save node-libs-react-native crypto-browserify stream-browserify react-native-get-random-valuesyarn add node-libs-react-native crypto-browserify stream-browserify react-native-get-random-values\\n\",\"title\":\"Install shim dependencies\",\"titles\":[\"Using within React Native applications\",\"Getting Started\",\"Set up shims\"]},{\"href\":\"/resources/react-native#register-shim-modules-in-metro\",\"html\":\"\\n

Create or edit your metro.config.js file in the root of your project so that it includes the following:

\\n
// Learn more https://docs.expo.io/guides/customizing-metro\\nconst { getDefaultConfig } = require("expo/metro-config");\\n \\n/** @type {import('expo/metro-config').MetroConfig} */\\nconst config = getDefaultConfig(__dirname);\\n\\n// The following code ensures we have the necessary\\n// shims for crypto built into our project\\nconfig.resolver.extraNodeModules = {\\n  ...config.resolver.extraNodeModules,\\n  ...require("node-libs-react-native"),\\n  crypto: require.resolve("crypto-browserify"),\\n  stream: require.resolve("stream-browserify"),\\n};\\n \\nmodule.exports = config;
\\n\",\"id\":\"pages/resources/react-native.mdx#register-shim-modules-in-metro\",\"isPage\":false,\"text\":\"\\nCreate or edit your metro.config.js file in the root of your project so that it includes the following:\\n// Learn more https://docs.expo.io/guides/customizing-metro\\nconst { getDefaultConfig } = require("expo/metro-config");\\n \\n/** @type {import('expo/metro-config').MetroConfig} */\\nconst config = getDefaultConfig(__dirname);\\n\\n// The following code ensures we have the necessary\\n// shims for crypto built into our project\\nconfig.resolver.extraNodeModules = {\\n ...config.resolver.extraNodeModules,\\n ...require("node-libs-react-native"),\\n crypto: require.resolve("crypto-browserify"),\\n stream: require.resolve("stream-browserify"),\\n};\\n \\nmodule.exports = config;\\n\",\"title\":\"Register shim modules in Metro\",\"titles\":[\"Using within React Native applications\",\"Getting Started\",\"Set up shims\"]},{\"href\":\"/resources/react-native#register-global-shims\",\"html\":\"\\n

Import the following packages at the top of your App.tsx file so that libraries that depend on globals like crypto have access to them.

\\n\\n
import "node-libs-react-native/globals.js";\\nimport "react-native-get-random-values";\\n \\n// rest of App.tsx
\\n\",\"id\":\"pages/resources/react-native.mdx#register-global-shims\",\"isPage\":false,\"text\":\"\\nImport the following packages at the top of your App.tsx file so that libraries that depend on globals like crypto have access to them.\\nIf you're using bare React Native, you would add the above imports to your index.js file.\\nimport "node-libs-react-native/globals.js";\\nimport "react-native-get-random-values";\\n \\n// rest of App.tsx\\n\",\"title\":\"Register global shims\",\"titles\":[\"Using within React Native applications\",\"Getting Started\",\"Set up shims\"]},{\"href\":\"/resources/react-native#install-account-kit-and-build\",\"html\":\"\\n

That's it! Now you can install the packages you want from Account Kit and start building your React Native Account Abstraction app.

\\n
npm install -s @alchemy/aa-alchemy @alchemy/aa-accounts @alchemy/aa-core
yarn add @alchemy/aa-alchemy @alchemy/aa-accounts @alchemy/aa-core
\",\"id\":\"pages/resources/react-native.mdx#install-account-kit-and-build\",\"isPage\":false,\"text\":\"\\nThat's it! Now you can install the packages you want from Account Kit and start building your React Native Account Abstraction app.\\nnpm install -s @alchemy/aa-alchemy @alchemy/aa-accounts @alchemy/aa-coreyarn add @alchemy/aa-alchemy @alchemy/aa-accounts @alchemy/aa-core\",\"title\":\"Install Account Kit and build!\",\"titles\":[\"Using within React Native applications\",\"Getting Started\"]}]}],[\"index.193f7b6c1838f77f94950c226e7b8c6bd75cee22db590428239937ddc7a00928\",{\"mdx\":\"---\\noutline: deep\\ntitle: Export Private Key\\ndescription: Learn how to enable a user to export their private key with the Alchemy Signer\\n---\\n\\n# Export private key\\n\\nThe Alchemy Signer allows you to export a user's private key, allowing them a right to exit at any time. It is considered a best practice to allow your users to export their private key, as it gives them full control over their account. The private key export method does not rely on Alchemy's infrastructure, so even if Alchemy is down, a user can still export their private key.\\n\\n## Usage\\n\\nTo add export private key functionality to your app, you can use the `exportPrivateKey` method on the signer.\\n\\n:::code-group\\n\\n```tsx twoslash [ExportPrivateKey.tsx]\\nimport React from \\\"react\\\";\\nimport { useMutation } from \\\"@tanstack/react-query\\\";\\nimport { signer } from \\\"./signer\\\";\\n\\nconst TurnkeyExportWalletContainerId = \\\"turnkey-export-wallet-container-id\\\";\\nconst TurnkeyExportWalletElementId = \\\"turnkey-export-wallet-element-id\\\";\\n\\n// This allows us to style the embedded iframe\\nconst iframeCss = `\\niframe {\\n box-sizing: border-box;\\n width: 100%;\\n height: 120px;\\n border-radius: 8px;\\n border-width: 1px;\\n border-style: solid;\\n border-color: rgba(216, 219, 227, 1);\\n padding: 20px;\\n}\\n`;\\n\\nexport const ExportPrivateKeyView = () => {\\n // we are using react-query to handle loading states more easily, but feel free to use w/e state management library you prefer\\n const {\\n mutate: exportWallet,\\n isLoading,\\n data,\\n } = useMutation({\\n mutationFn: () =>\\n signer.exportWallet({\\n iframeContainerId: TurnkeyExportWalletContainerId,\\n iframeElementId: TurnkeyExportWalletElementId,\\n }),\\n });\\n\\n // Once the user clicks the button, a request will be sent to initialize private key export\\n // once the request is complete, the iframe will be rendered with either\\n // 1. the private key if the user is logged in with a passkey\\n // 2. the seed phrase if the user is logged in with email\\n return (\\n
\\n {!data ? (\\n \\n ) : (\\n Seed Phrase\\n )}\\n \\n \\n
\\n \\n );\\n};\\n```\\n\\n```ts twoslash [signer.ts] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/signer/export-private-key#export-private-key\",\"html\":\"\\n

The Alchemy Signer allows you to export a user's private key, allowing them a right to exit at any time. It is considered a best practice to allow your users to export their private key, as it gives them full control over their account. The private key export method does not rely on Alchemy's infrastructure, so even if Alchemy is down, a user can still export their private key.

\\n\",\"id\":\"pages/signer/export-private-key.mdx#export-private-key\",\"isPage\":true,\"text\":\"\\nThe Alchemy Signer allows you to export a user's private key, allowing them a right to exit at any time. It is considered a best practice to allow your users to export their private key, as it gives them full control over their account. The private key export method does not rely on Alchemy's infrastructure, so even if Alchemy is down, a user can still export their private key.\\n\",\"title\":\"Export private key\",\"titles\":[]},{\"href\":\"/signer/export-private-key#usage\",\"html\":\"\\n

To add export private key functionality to your app, you can use the exportPrivateKey method on the signer.

\\n
// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport React from "react";\\nimport { useMutation } from "@tanstack/react-query";\\nimport { signer } from "./signer";\\n \\nconst TurnkeyExportWalletContainerId = "turnkey-export-wallet-container-id";\\nconst TurnkeyExportWalletElementId = "turnkey-export-wallet-element-id";\\n \\n// This allows us to style the embedded iframe\\nconst iframeCss = `\\niframe {\\n    box-sizing: border-box;\\n    width: 100%;\\n    height: 120px;\\n    border-radius: 8px;\\n    border-width: 1px;\\n    border-style: solid;\\n    border-color: rgba(216, 219, 227, 1);\\n    padding: 20px;\\n}\\n`;\\n \\nexport const ExportPrivateKeyView = () => {\\n  // we are using react-query to handle loading states more easily, but feel free to use w/e state management library you prefer\\n  const {\\n    mutate: exportWallet,\\n    isLoading,\\n    data,\\n  } = useMutation({\\n    mutationFn: () =>\\n      signer.exportWallet({\\n        iframeContainerId: TurnkeyExportWalletContainerId,\\n        iframeElementId: TurnkeyExportWalletElementId,\\n      }),\\n  });\\n \\n  // Once the user clicks the button, a request will be sent to initialize private key export\\n  // once the request is complete, the iframe will be rendered with either\\n  // 1. the private key if the user is logged in with a passkey\\n  // 2. the seed phrase if the user is logged in with email\\n  return (\\n    <div className="flex flex-col gap-2">\\n      {!data ? (\\n        <button onClick={() => exportWallet()} disabled={isLoading}>\\n          Export Wallet\\n        </button>\\n      ) : (\\n        <strong>Seed Phrase</strong>\\n      )}\\n      <div\\n        className="w-full"\\n        style={{ display: !data ? "none" : "block" }}\\n        id={TurnkeyExportWalletContainerId}\\n      >\\n        <style>{iframeCss}</style>\\n      </div>\\n    </div>\\n  );\\n};
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\",\"id\":\"pages/signer/export-private-key.mdx#usage\",\"isPage\":false,\"text\":\"\\nTo add export private key functionality to your app, you can use the exportPrivateKey method on the signer.\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport React from "react";\\nimport { useMutation } from "@tanstack/react-query";\\nimport { signer } from "./signer";\\n \\nconst TurnkeyExportWalletContainerId = "turnkey-export-wallet-container-id";\\nconst TurnkeyExportWalletElementId = "turnkey-export-wallet-element-id";\\n \\n// This allows us to style the embedded iframe\\nconst iframeCss = `\\niframe {\\n box-sizing: border-box;\\n width: 100%;\\n height: 120px;\\n border-radius: 8px;\\n border-width: 1px;\\n border-style: solid;\\n border-color: rgba(216, 219, 227, 1);\\n padding: 20px;\\n}\\n`;\\n \\nexport const ExportPrivateKeyView = () => {\\n // we are using react-query to handle loading states more easily, but feel free to use w/e state management library you prefer\\n const {\\n mutate: exportWallet,\\n isLoading,\\n data,\\n } = useMutation({\\n mutationFn: () =>\\n signer.exportWallet({\\n iframeContainerId: TurnkeyExportWalletContainerId,\\n iframeElementId: TurnkeyExportWalletElementId,\\n }),\\n });\\n \\n // Once the user clicks the button, a request will be sent to initialize private key export\\n // once the request is complete, the iframe will be rendered with either\\n // 1. the private key if the user is logged in with a passkey\\n // 2. the seed phrase if the user is logged in with email\\n return (\\n <div className="flex flex-col gap-2">\\n {!data ? (\\n <button onClick={() => exportWallet()} disabled={isLoading}>\\n Export Wallet\\n </button>\\n ) : (\\n <strong>Seed Phrase</strong>\\n )}\\n <div\\n className="w-full"\\n style={{ display: !data ? "none" : "block" }}\\n id={TurnkeyExportWalletContainerId}\\n >\\n <style>{iframeCss}</style>\\n </div>\\n </div>\\n );\\n};import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\",\"title\":\"Usage\",\"titles\":[\"Export private key\"]}]}],[\"index.5dfde4322fa5be83b6e0595bdae229c392ca7877d03642f558194ff5e2d6a67c\",{\"mdx\":\"---\\ntitle: Frequently Asked Questions\\ndescription: Learn how to get started with Alchemy's Account Kit, a vertically\\n integrated stack for building apps that support ERC-4337 and ERC-6900.\\n---\\n\\n# Frequently asked questions\\n\\n:::warning\\nWe recommend you check out our [github discussions](https://github.com/alchemyplatform/aa-sdk/discussions) for more commonly asked questions and support.\\n:::\\n\\n## Smart Accounts - Light Account\\n\\n### Do accounts have the same address across all chains?\\n\\n:::details[Answer]\\nIn almost all cases, yes, you will get the same address on all chains as long as the connecting signer address is the same! The deployment address is a function of the address of owner/signer address, the account implementation (e.g. latest version of Light Account), and the salt (you can optionally specify this). If all three of those remain the same, then you deploy the smart account at the same contract address.\\n\\nThere are two scenarios where you would get a different contract address:\\n\\n1. If you deploy one smart account, then change the signer, then deploy the second account.\\n2. If you upgrade the smart account (e.g. to a new version of Light Account). It is unlikely that we will make many updates to this contract so the address will not change frequently.\\n :::\\n\\n### How does a smart account get deployed?\\n\\n:::details[Answer]\\nYour smart account will be deployed when the first `UserOperation` (UO) is sent from the account. The first UO must be sent with a non-zero `initCode`. aa-sdk will handle generation of this `initCode` for you using [`getAccountInitCode`](/reference/aa-sdk/core/functions/toSmartContractAccount).\\n:::\\n\\n### How can I upgrade a Light Account?\\n\\n:::details[Answer]\\nIt is unlikely you will need to frequently update the Light Account contract itself, however it is possible if needed. Light Account has [`UUPSUpgradeable`](https://github.com/alchemyplatform/light-account/blob/main/src/LightAccount.sol#L50) which adds upgrade methods on the account itself. To upgrade an account you will need to send a `UserOperation` using the method `upgradeTo` or `upgradeToAndCall`, depending on whether or not you need to initialize the new implementation.\\n:::\\n\\n### Can I have multiple accounts for the same signer address? / How do I set the value of the salt for Light Account?\\n\\n:::details[Answer]\\nYes! The optional salt value on Light Account enables the ability to have multiple accounts under a single signer. This value defaults to 0. You can set it when you create [light account](#TODO).\\n:::\\n\\n### How can I upgrade from Simple Account to Light Account?\\n\\n:::details[Answer]\\n[Simple Account's](https://github.com/eth-infinitism/account-abstraction/blob/develop/contracts/samples/SimpleAccount.sol) support [`upgradeToAndCall`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/4e7e6e54daedf091d91f2f2df024cbb8f253e2ef/contracts/proxy/utils/UUPSUpgradeable.sol#L86) implemented by openzeppelin [UUPSUpgradeable](https://docs.openzeppelin.com/contracts/4.x/api/proxy#UUPSUpgradeable) contract. This allows you to upgrade from Simple Account to Light Account without changing the smart contract account address. Using `upgradeToAndCall` will update the underlying implementation contract on the account while the account address and assets will stay the same.\\n\\nYou can call `upgradeToAndCall` on the Simple Account with these params:\\n\\n- `newImplementation`: Latest LightAccount implementation address (found [here](https://github.com/alchemyplatform/light-account/blob/main/Deployments.md#lightaccount) - make sure to use the implementation address, not the factory address)\\n - For example LightAccount v1.1.0 - 0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba\\n- `data`: encoded version of the `initialize` function with `anOwner` parameter set to the owner on the account, usually the same owner as what the account used as Simple Account.\\n - In solidity (foundry) you can use abi.encodeCall and in viem you can use [encodeFunctionData](https://github.com/alchemyplatform/light-account/blob/main/Deployments.md#lightaccount)\\n\\nIt is very important that the `initialize` step is encoded correctly to ensure the account does not get into a risky state where someone else could call initialize on it with one's signer and take control of your account. You can call `owner()` on the account after the upgrade to ensure it is assigned correctly.\\n\\nThis can be called on the existing smart contract account by sending a user operation that calls `execute` (or `executeBatch`) and has that call `upgradeToAndCall` (the same way you would make the account send calls to other addresses).\\n:::\\n\\n## Submitting `UserOperation`s\\n\\n### How does the speed of `UserOperation`s compare to normal transactions?\\n\\n:::details[Answer]\\nIf the `UserOperation` (meta-transaction for 4337 accounts) is correctly priced and submitted a few hundred milliseconds prior to a new block getting created, it will typically get placed in the next block. This is because the Bundler needs time to create/propagate its transaction. You can think of it as 1 extra block time worth of latency, but we are working towards improving this latency.\\n:::\\n\\n### Why am I seeing a delay in landing `UserOperation`s on-chain?\\n\\n:::details[Answer]\\nThis can happen when `UserOperation`s (UOs) become underpriced, frequently due to fee market movement between when gas and fees are estimations and when the UO is actually submitted.\\n\\nYou may experience this when calling the [`waitForUserOperationTransaction`](/reference/aa-sdk/core/functions/waitForUserOperationTransaction) method. It may throw an error if it does not find the UO in a mined Transaction within its retry limits.\\n\\nYou can mitigate this by defining a more flexible retry period when constructing a [`Client`](/reference/aa-sdk/core/functions/createSmartAccountClient) (i.e. `txMaxRetries`, `txRetryIntervalMs`, `txRetryMultiplier` in `opts`). If your UO continues to be delayed beyond a limit you are willing to wait, you can resubmit it using [`dropAndReplaceUserOperation`](/reference/aa-sdk/core/functions/dropAndReplaceUserOperation).\\n:::\\n\\n### Are `UserOperation`s protected from MEV bots?\\n\\n:::details[Answer]\\nRight now, `UserOperation`s are sent to a private mempool for all networks other than Polygon, where there is no way to do this. We are actively involved in proposals for a peer-to-peer mempool standard.\\n:::\\n\\n### Can I simulate `UserOperation`s the same way I simulate transactions?\\n\\n:::details[Answer]\\nYes! Check out [this guide](#TODO/react/simulate-user-operations).\\n:::\\n\\n## Gas Estimation\\n\\n### How does gas estimation for 4337 smart contract accounts work?\\n\\n:::details[Answer]\\nOur bundler estimates gas and submits `UserOperation`s (UOs) under the hood of the aa-sdk. Our gas estimations are just that, estimations that optimize for UOs landing on chain, and you may need to adjust gas limits based on your needs using [overrides](https://github.com/alchemyplatform/aa-sdk/blob/v4.x.x/aa-sdk/core/src/types.ts#L97).\\n\\nLearn more about gas estimation and how it is implemented in our [Bundler](https://www.alchemy.com/blog/erc-4337-gas-estimation).\\n\\nThere are many nuances and edge cases that our bundler considers especially for L2’s. Learn more [here](https://www.alchemy.com/blog/l2-gas-and-signature-aggregators).\\n\\nWe recommend adding error handling when sending a UO to handle potential gas and fee changes due to market movement. Learn more about [frequent errors](#common-errors).\\n:::\\n\\n## Gas Manager\\n\\n### What tiers support gas sponsorship?\\n\\n:::details[Answer]\\nGas sponsorship is available on testnet for all tiers. For support on mainnet, you must be on a paying tier (i.e. Growth tier and above). Learn more about our different pricing tiers [here](https://docs.alchemy.com/reference/gas-manager-coverage-api-pricing#fee-logic).\\n:::\\n\\n### How is gas sponsored? Do I need to fund the Gas Manager?\\n\\n:::details[Answer]\\nWe front the gas for your application and put the USD equivalent on your bill at the end of the month. No need to worry about pre-funding the Gas Manager or conversions, we’ve got you covered! You can follow [this guide](#TODO) for more details on how to sponsor `UserOperation`s.\\n:::\\n\\n### What are my gas sponsorship limits?\\n\\n:::details[Answer]\\nYou can find details of Gas Manager limits depending on your tier [here](https://docs.alchemy.com/reference/gas-manager-coverage-api-pricing#fee-logic).\\n:::\\n\\n### Do you support ERC-20 or stablecoin paymasters?\\n\\n:::details[Answer]\\nCurrently, we don’t support this, but we are actively exploring. Please [reach out](/resources/contact-us) if you are interested as we would love your input in our spec.\\n:::\\n\\n### How is the Gas Manager protected from DDOS attacks?\\n\\n:::details[Answer]\\nIn your Gas Manager policy, you can configure spending rules per address, per app, and/or policy wide limits. See how to set up these policies [here](#TODO).\\n:::\\n\\n## Common Errors\\n\\n### Invalid policy ID: `{ code: -32602, message: 'Invalid Policy ID' }`\\n\\n:::details[Answer]\\nGas Manager policies can only be tied to one app. Make sure you are using the API Key that is associated with the app the Gas Manager policy is configured for, or create a new policy for the app you are using.\\n:::\\n\\n### Precheck failed: `{ code: -3200, message: 'precheck failed: ...' }`\\n\\n:::details[Answer]\\nPrecheck failed errors are often related to gas and/or fees. Our Bundler follows standard [ERC 4337](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4337.md#client-behavior-upon-receiving-a-useroperation) implementation for gas and fee checks in order to 1) ensure your `UserOperation`s (UOs) land on chain and to 2) protect the Bundler from potential attacks in order to support scalability.\\n\\nThese errors are often related to market movement between the time when gas and fees are estimated and the time when UOs are submitted to the bundler. This fluctuation in the market is especially variant on testnet. To ensure your UO is included in a block, we currently reject sending any UOs that are underpriced compared to the network rate .\\n\\nTo handle these errors, we recommend you use our [override fields](https://github.com/alchemyplatform/aa-sdk/blob/v4.x.x/aa-sdk/core/src/types.ts#L97) to increase buffers on top of our estimates and implement retry mechanisms as needed.\\n\\nOur gas and fee estimations are just that, estimations, but we are always working to improve these estimates!\\n:::\\n\\n### Total execution gas limit exceeded: `{ code: -3202, message: 'precheck failed: total execution gas is X but must be at most 10000000}`\\n\\n:::details[Answer]\\nCurrently our Bundler allows max 10M gas in aggregate between `preVerificationGas`, `verificationGasLimit`, and `callGasLimit`. To reduce the gas needed, try reducing the size of your call data and/or sending your call data in multiple `UserOperation`s rather than one.\\n:::\\n\\n### `waitForUserOperationTransaction` timeout\\n\\n:::details[Answer]\\n[`waitForUserOperationTransaction`](/reference/aa-sdk/core/functions/waitForUserOperationTransaction) may throw this error if it does not find the mined User Operation within its retry limits.\\n\\nYou can mitigate this by defining a more flexible retry period when constructing a [`Client`](/reference/aa-sdk/core/functions/createSmartAccountClient) (i.e. `txMaxRetries`, `txRetryIntervalMs`, `txRetryMultiplier` in `opts`).\\n\\nIf your `UserOperation` continues to be delayed beyond a limit you are willing to wait, you can resubmit the user operation using [`dropAndReplaceUserOperation`](/reference/aa-sdk/core/functions/dropAndReplaceUserOperation#usage).\\n:::\\n\\n## Other Support\\n\\n### Does the aa-sdk repo support React Native?\\n\\nNo, the `aa-sdk` repo does not offically support React Native. **It is on our radar!**\\n\\nCurrently we have a strong dependency on Viem, which requires several global features, such as `TextEncoder` and `crypto`, that are absent in React Native's environment. See more about [Viem's capability here](https://viem.sh/docs/compatibility).\\n\\nHowever, we have created a small PoC using Expo that you can find [here](https://github.com/alchemyplatform/aa-sdk-rn-expo/tree/main). For more information on how to use Account Kit within a React Native application see [the guide](/resources/react-native).\\n\",\"document\":[{\"href\":\"/resources/faqs#frequently-asked-questions\",\"html\":\"\\n\\n\",\"id\":\"pages/resources/faqs.mdx#frequently-asked-questions\",\"isPage\":true,\"text\":\"\\nWe recommend you check out our github discussions for more commonly asked questions and support.\\n\",\"title\":\"Frequently asked questions\",\"titles\":[]},{\"href\":\"/resources/faqs#smart-accounts---light-account\",\"html\":\"\\n\",\"id\":\"pages/resources/faqs.mdx#smart-accounts---light-account\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Smart Accounts - Light Account\",\"titles\":[\"Frequently asked questions\"]},{\"href\":\"/resources/faqs#do-accounts-have-the-same-address-across-all-chains\",\"html\":\"\\n
Answer

In almost all cases, yes, you will get the same address on all chains as long as the connecting signer address is the same! The deployment address is a function of the address of owner/signer address, the account implementation (e.g. latest version of Light Account), and the salt (you can optionally specify this). If all three of those remain the same, then you deploy the smart account at the same contract address.

There are two scenarios where you would get a different contract address:

    \\n
  1. If you deploy one smart account, then change the signer, then deploy the second account.
  2. \\n
  3. If you upgrade the smart account (e.g. to a new version of Light Account). It is unlikely that we will make many updates to this contract so the address will not change frequently.
  4. \\n
\\n\",\"id\":\"pages/resources/faqs.mdx#do-accounts-have-the-same-address-across-all-chains\",\"isPage\":false,\"text\":\"\\nAnswerIn almost all cases, yes, you will get the same address on all chains as long as the connecting signer address is the same! The deployment address is a function of the address of owner/signer address, the account implementation (e.g. latest version of Light Account), and the salt (you can optionally specify this). If all three of those remain the same, then you deploy the smart account at the same contract address.There are two scenarios where you would get a different contract address:\\nIf you deploy one smart account, then change the signer, then deploy the second account.\\nIf you upgrade the smart account (e.g. to a new version of Light Account). It is unlikely that we will make many updates to this contract so the address will not change frequently.\\n\\n\",\"title\":\"Do accounts have the same address across all chains?\",\"titles\":[\"Frequently asked questions\",\"Smart Accounts - Light Account\"]},{\"href\":\"/resources/faqs#how-does-a-smart-account-get-deployed\",\"html\":\"\\n
Answer

Your smart account will be deployed when the first UserOperation (UO) is sent from the account. The first UO must be sent with a non-zero initCode. aa-sdk will handle generation of this initCode for you using getAccountInitCode.

\\n\",\"id\":\"pages/resources/faqs.mdx#how-does-a-smart-account-get-deployed\",\"isPage\":false,\"text\":\"\\nAnswerYour smart account will be deployed when the first UserOperation (UO) is sent from the account. The first UO must be sent with a non-zero initCode. aa-sdk will handle generation of this initCode for you using getAccountInitCode.\\n\",\"title\":\"How does a smart account get deployed?\",\"titles\":[\"Frequently asked questions\",\"Smart Accounts - Light Account\"]},{\"href\":\"/resources/faqs#how-can-i-upgrade-a-light-account\",\"html\":\"\\n
Answer

It is unlikely you will need to frequently update the Light Account contract itself, however it is possible if needed. Light Account has UUPSUpgradeable which adds upgrade methods on the account itself. To upgrade an account you will need to send a UserOperation using the method upgradeTo or upgradeToAndCall, depending on whether or not you need to initialize the new implementation.

\\n\",\"id\":\"pages/resources/faqs.mdx#how-can-i-upgrade-a-light-account\",\"isPage\":false,\"text\":\"\\nAnswerIt is unlikely you will need to frequently update the Light Account contract itself, however it is possible if needed. Light Account has UUPSUpgradeable which adds upgrade methods on the account itself. To upgrade an account you will need to send a UserOperation using the method upgradeTo or upgradeToAndCall, depending on whether or not you need to initialize the new implementation.\\n\",\"title\":\"How can I upgrade a Light Account?\",\"titles\":[\"Frequently asked questions\",\"Smart Accounts - Light Account\"]},{\"href\":\"/resources/faqs#can-i-have-multiple-accounts-for-the-same-signer-address--how-do-i-set-the-value-of-the-salt-for-light-account\",\"html\":\"\\n
Answer

Yes! The optional salt value on Light Account enables the ability to have multiple accounts under a single signer. This value defaults to 0. You can set it when you create light account.

\\n\",\"id\":\"pages/resources/faqs.mdx#can-i-have-multiple-accounts-for-the-same-signer-address--how-do-i-set-the-value-of-the-salt-for-light-account\",\"isPage\":false,\"text\":\"\\nAnswerYes! The optional salt value on Light Account enables the ability to have multiple accounts under a single signer. This value defaults to 0. You can set it when you create light account.\\n\",\"title\":\"Can I have multiple accounts for the same signer address? / How do I set the value of the salt for Light Account?\",\"titles\":[\"Frequently asked questions\",\"Smart Accounts - Light Account\"]},{\"href\":\"/resources/faqs#how-can-i-upgrade-from-simple-account-to-light-account\",\"html\":\"\\n
Answer

Simple Account's support upgradeToAndCall implemented by openzeppelin UUPSUpgradeable contract. This allows you to upgrade from Simple Account to Light Account without changing the smart contract account address. Using upgradeToAndCall will update the underlying implementation contract on the account while the account address and assets will stay the same.

You can call upgradeToAndCall on the Simple Account with these params:

    \\n
  • newImplementation: Latest LightAccount implementation address (found here - make sure to use the implementation address, not the factory address)\\n
      \\n
    • For example LightAccount v1.1.0 - 0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
    • \\n
    \\n
  • \\n
  • data: encoded version of the initialize function with anOwner parameter set to the owner on the account, usually the same owner as what the account used as Simple Account.\\n
      \\n
    • In solidity (foundry) you can use abi.encodeCall and in viem you can use encodeFunctionData
    • \\n
    \\n
  • \\n

It is very important that the initialize step is encoded correctly to ensure the account does not get into a risky state where someone else could call initialize on it with one's signer and take control of your account. You can call owner() on the account after the upgrade to ensure it is assigned correctly.

This can be called on the existing smart contract account by sending a user operation that calls execute (or executeBatch) and has that call upgradeToAndCall (the same way you would make the account send calls to other addresses).

\\n\",\"id\":\"pages/resources/faqs.mdx#how-can-i-upgrade-from-simple-account-to-light-account\",\"isPage\":false,\"text\":\"\\nAnswerSimple Account's support upgradeToAndCall implemented by openzeppelin UUPSUpgradeable contract. This allows you to upgrade from Simple Account to Light Account without changing the smart contract account address. Using upgradeToAndCall will update the underlying implementation contract on the account while the account address and assets will stay the same.You can call upgradeToAndCall on the Simple Account with these params:\\nnewImplementation: Latest LightAccount implementation address (found here - make sure to use the implementation address, not the factory address)\\n\\nFor example LightAccount v1.1.0 - 0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba\\n\\n\\ndata: encoded version of the initialize function with anOwner parameter set to the owner on the account, usually the same owner as what the account used as Simple Account.\\n\\nIn solidity (foundry) you can use abi.encodeCall and in viem you can use encodeFunctionData\\n\\n\\nIt is very important that the initialize step is encoded correctly to ensure the account does not get into a risky state where someone else could call initialize on it with one's signer and take control of your account. You can call owner() on the account after the upgrade to ensure it is assigned correctly.This can be called on the existing smart contract account by sending a user operation that calls execute (or executeBatch) and has that call upgradeToAndCall (the same way you would make the account send calls to other addresses).\\n\",\"title\":\"How can I upgrade from Simple Account to Light Account?\",\"titles\":[\"Frequently asked questions\",\"Smart Accounts - Light Account\"]},{\"href\":\"/resources/faqs#submitting-useroperations\",\"html\":\"\\n\",\"id\":\"pages/resources/faqs.mdx#submitting-useroperations\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Submitting UserOperations\",\"titles\":[\"Frequently asked questions\"]},{\"href\":\"/resources/faqs#how-does-the-speed-of-useroperations-compare-to-normal-transactions\",\"html\":\"\\n
Answer

If the UserOperation (meta-transaction for 4337 accounts) is correctly priced and submitted a few hundred milliseconds prior to a new block getting created, it will typically get placed in the next block. This is because the Bundler needs time to create/propagate its transaction. You can think of it as 1 extra block time worth of latency, but we are working towards improving this latency.

\\n\",\"id\":\"pages/resources/faqs.mdx#how-does-the-speed-of-useroperations-compare-to-normal-transactions\",\"isPage\":false,\"text\":\"\\nAnswerIf the UserOperation (meta-transaction for 4337 accounts) is correctly priced and submitted a few hundred milliseconds prior to a new block getting created, it will typically get placed in the next block. This is because the Bundler needs time to create/propagate its transaction. You can think of it as 1 extra block time worth of latency, but we are working towards improving this latency.\\n\",\"title\":\"How does the speed of UserOperations compare to normal transactions?\",\"titles\":[\"Frequently asked questions\",\"Submitting UserOperations\"]},{\"href\":\"/resources/faqs#why-am-i-seeing-a-delay-in-landing-useroperations-on-chain\",\"html\":\"\\n
Answer

This can happen when UserOperations (UOs) become underpriced, frequently due to fee market movement between when gas and fees are estimations and when the UO is actually submitted.

You may experience this when calling the waitForUserOperationTransaction method. It may throw an error if it does not find the UO in a mined Transaction within its retry limits.

You can mitigate this by defining a more flexible retry period when constructing a Client (i.e. txMaxRetries, txRetryIntervalMs, txRetryMultiplier in opts). If your UO continues to be delayed beyond a limit you are willing to wait, you can resubmit it using dropAndReplaceUserOperation.

\\n\",\"id\":\"pages/resources/faqs.mdx#why-am-i-seeing-a-delay-in-landing-useroperations-on-chain\",\"isPage\":false,\"text\":\"\\nAnswerThis can happen when UserOperations (UOs) become underpriced, frequently due to fee market movement between when gas and fees are estimations and when the UO is actually submitted.You may experience this when calling the waitForUserOperationTransaction method. It may throw an error if it does not find the UO in a mined Transaction within its retry limits.You can mitigate this by defining a more flexible retry period when constructing a Client (i.e. txMaxRetries, txRetryIntervalMs, txRetryMultiplier in opts). If your UO continues to be delayed beyond a limit you are willing to wait, you can resubmit it using dropAndReplaceUserOperation.\\n\",\"title\":\"Why am I seeing a delay in landing UserOperations on-chain?\",\"titles\":[\"Frequently asked questions\",\"Submitting UserOperations\"]},{\"href\":\"/resources/faqs#are-useroperations-protected-from-mev-bots\",\"html\":\"\\n
Answer

Right now, UserOperations are sent to a private mempool for all networks other than Polygon, where there is no way to do this. We are actively involved in proposals for a peer-to-peer mempool standard.

\\n\",\"id\":\"pages/resources/faqs.mdx#are-useroperations-protected-from-mev-bots\",\"isPage\":false,\"text\":\"\\nAnswerRight now, UserOperations are sent to a private mempool for all networks other than Polygon, where there is no way to do this. We are actively involved in proposals for a peer-to-peer mempool standard.\\n\",\"title\":\"Are UserOperations protected from MEV bots?\",\"titles\":[\"Frequently asked questions\",\"Submitting UserOperations\"]},{\"href\":\"/resources/faqs#can-i-simulate-useroperations-the-same-way-i-simulate-transactions\",\"html\":\"\\n
Answer

Yes! Check out this guide.

\\n\",\"id\":\"pages/resources/faqs.mdx#can-i-simulate-useroperations-the-same-way-i-simulate-transactions\",\"isPage\":false,\"text\":\"\\nAnswerYes! Check out this guide.\\n\",\"title\":\"Can I simulate UserOperations the same way I simulate transactions?\",\"titles\":[\"Frequently asked questions\",\"Submitting UserOperations\"]},{\"href\":\"/resources/faqs#gas-estimation\",\"html\":\"\\n\",\"id\":\"pages/resources/faqs.mdx#gas-estimation\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Gas Estimation\",\"titles\":[\"Frequently asked questions\"]},{\"href\":\"/resources/faqs#how-does-gas-estimation-for-4337-smart-contract-accounts-work\",\"html\":\"\\n
Answer

Our bundler estimates gas and submits UserOperations (UOs) under the hood of the aa-sdk. Our gas estimations are just that, estimations that optimize for UOs landing on chain, and you may need to adjust gas limits based on your needs using overrides.

Learn more about gas estimation and how it is implemented in our Bundler.

There are many nuances and edge cases that our bundler considers especially for L2’s. Learn more here.

We recommend adding error handling when sending a UO to handle potential gas and fee changes due to market movement. Learn more about frequent errors.

\\n\",\"id\":\"pages/resources/faqs.mdx#how-does-gas-estimation-for-4337-smart-contract-accounts-work\",\"isPage\":false,\"text\":\"\\nAnswerOur bundler estimates gas and submits UserOperations (UOs) under the hood of the aa-sdk. Our gas estimations are just that, estimations that optimize for UOs landing on chain, and you may need to adjust gas limits based on your needs using overrides.Learn more about gas estimation and how it is implemented in our Bundler.There are many nuances and edge cases that our bundler considers especially for L2’s. Learn more here.We recommend adding error handling when sending a UO to handle potential gas and fee changes due to market movement. Learn more about frequent errors.\\n\",\"title\":\"How does gas estimation for 4337 smart contract accounts work?\",\"titles\":[\"Frequently asked questions\",\"Gas Estimation\"]},{\"href\":\"/resources/faqs#gas-manager\",\"html\":\"\\n\",\"id\":\"pages/resources/faqs.mdx#gas-manager\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Gas Manager\",\"titles\":[\"Frequently asked questions\"]},{\"href\":\"/resources/faqs#what-tiers-support-gas-sponsorship\",\"html\":\"\\n
Answer

Gas sponsorship is available on testnet for all tiers. For support on mainnet, you must be on a paying tier (i.e. Growth tier and above). Learn more about our different pricing tiers here.

\\n\",\"id\":\"pages/resources/faqs.mdx#what-tiers-support-gas-sponsorship\",\"isPage\":false,\"text\":\"\\nAnswerGas sponsorship is available on testnet for all tiers. For support on mainnet, you must be on a paying tier (i.e. Growth tier and above). Learn more about our different pricing tiers here.\\n\",\"title\":\"What tiers support gas sponsorship?\",\"titles\":[\"Frequently asked questions\",\"Gas Manager\"]},{\"href\":\"/resources/faqs#how-is-gas-sponsored-do-i-need-to-fund-the-gas-manager\",\"html\":\"\\n
Answer

We front the gas for your application and put the USD equivalent on your bill at the end of the month. No need to worry about pre-funding the Gas Manager or conversions, we’ve got you covered! You can follow this guide for more details on how to sponsor UserOperations.

\\n\",\"id\":\"pages/resources/faqs.mdx#how-is-gas-sponsored-do-i-need-to-fund-the-gas-manager\",\"isPage\":false,\"text\":\"\\nAnswerWe front the gas for your application and put the USD equivalent on your bill at the end of the month. No need to worry about pre-funding the Gas Manager or conversions, we’ve got you covered! You can follow this guide for more details on how to sponsor UserOperations.\\n\",\"title\":\"How is gas sponsored? Do I need to fund the Gas Manager?\",\"titles\":[\"Frequently asked questions\",\"Gas Manager\"]},{\"href\":\"/resources/faqs#what-are-my-gas-sponsorship-limits\",\"html\":\"\\n
Answer

You can find details of Gas Manager limits depending on your tier here.

\\n\",\"id\":\"pages/resources/faqs.mdx#what-are-my-gas-sponsorship-limits\",\"isPage\":false,\"text\":\"\\nAnswerYou can find details of Gas Manager limits depending on your tier here.\\n\",\"title\":\"What are my gas sponsorship limits?\",\"titles\":[\"Frequently asked questions\",\"Gas Manager\"]},{\"href\":\"/resources/faqs#do-you-support-erc-20-or-stablecoin-paymasters\",\"html\":\"\\n
Answer

Currently, we don’t support this, but we are actively exploring. Please reach out if you are interested as we would love your input in our spec.

\\n\",\"id\":\"pages/resources/faqs.mdx#do-you-support-erc-20-or-stablecoin-paymasters\",\"isPage\":false,\"text\":\"\\nAnswerCurrently, we don’t support this, but we are actively exploring. Please reach out if you are interested as we would love your input in our spec.\\n\",\"title\":\"Do you support ERC-20 or stablecoin paymasters?\",\"titles\":[\"Frequently asked questions\",\"Gas Manager\"]},{\"href\":\"/resources/faqs#how-is-the-gas-manager-protected-from-ddos-attacks\",\"html\":\"\\n
Answer

In your Gas Manager policy, you can configure spending rules per address, per app, and/or policy wide limits. See how to set up these policies here.

\\n\",\"id\":\"pages/resources/faqs.mdx#how-is-the-gas-manager-protected-from-ddos-attacks\",\"isPage\":false,\"text\":\"\\nAnswerIn your Gas Manager policy, you can configure spending rules per address, per app, and/or policy wide limits. See how to set up these policies here.\\n\",\"title\":\"How is the Gas Manager protected from DDOS attacks?\",\"titles\":[\"Frequently asked questions\",\"Gas Manager\"]},{\"href\":\"/resources/faqs#common-errors\",\"html\":\"\\n\",\"id\":\"pages/resources/faqs.mdx#common-errors\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Common Errors\",\"titles\":[\"Frequently asked questions\"]},{\"href\":\"/resources/faqs#invalid-policy-id--code--32602-message-invalid-policy-id-\",\"html\":\"\\n
Answer

Gas Manager policies can only be tied to one app. Make sure you are using the API Key that is associated with the app the Gas Manager policy is configured for, or create a new policy for the app you are using.

\\n\",\"id\":\"pages/resources/faqs.mdx#invalid-policy-id--code--32602-message-invalid-policy-id-\",\"isPage\":false,\"text\":\"\\nAnswerGas Manager policies can only be tied to one app. Make sure you are using the API Key that is associated with the app the Gas Manager policy is configured for, or create a new policy for the app you are using.\\n\",\"title\":\"Invalid policy ID: { code: -32602, message: 'Invalid Policy ID' }\",\"titles\":[\"Frequently asked questions\",\"Common Errors\"]},{\"href\":\"/resources/faqs#precheck-failed--code--3200-message-precheck-failed--\",\"html\":\"\\n
Answer

Precheck failed errors are often related to gas and/or fees. Our Bundler follows standard ERC 4337 implementation for gas and fee checks in order to 1) ensure your UserOperations (UOs) land on chain and to 2) protect the Bundler from potential attacks in order to support scalability.

These errors are often related to market movement between the time when gas and fees are estimated and the time when UOs are submitted to the bundler. This fluctuation in the market is especially variant on testnet. To ensure your UO is included in a block, we currently reject sending any UOs that are underpriced compared to the network rate .

To handle these errors, we recommend you use our override fields to increase buffers on top of our estimates and implement retry mechanisms as needed.

Our gas and fee estimations are just that, estimations, but we are always working to improve these estimates!

\\n\",\"id\":\"pages/resources/faqs.mdx#precheck-failed--code--3200-message-precheck-failed--\",\"isPage\":false,\"text\":\"\\nAnswerPrecheck failed errors are often related to gas and/or fees. Our Bundler follows standard ERC 4337 implementation for gas and fee checks in order to 1) ensure your UserOperations (UOs) land on chain and to 2) protect the Bundler from potential attacks in order to support scalability.These errors are often related to market movement between the time when gas and fees are estimated and the time when UOs are submitted to the bundler. This fluctuation in the market is especially variant on testnet. To ensure your UO is included in a block, we currently reject sending any UOs that are underpriced compared to the network rate .To handle these errors, we recommend you use our override fields to increase buffers on top of our estimates and implement retry mechanisms as needed.Our gas and fee estimations are just that, estimations, but we are always working to improve these estimates!\\n\",\"title\":\"Precheck failed: { code: -3200, message: 'precheck failed: ...' }\",\"titles\":[\"Frequently asked questions\",\"Common Errors\"]},{\"href\":\"/resources/faqs#total-execution-gas-limit-exceeded--code--3202-message-precheck-failed-total-execution-gas-is-x-but-must-be-at-most-10000000\",\"html\":\"\\n
Answer

Currently our Bundler allows max 10M gas in aggregate between preVerificationGas, verificationGasLimit, and callGasLimit. To reduce the gas needed, try reducing the size of your call data and/or sending your call data in multiple UserOperations rather than one.

\\n\",\"id\":\"pages/resources/faqs.mdx#total-execution-gas-limit-exceeded--code--3202-message-precheck-failed-total-execution-gas-is-x-but-must-be-at-most-10000000\",\"isPage\":false,\"text\":\"\\nAnswerCurrently our Bundler allows max 10M gas in aggregate between preVerificationGas, verificationGasLimit, and callGasLimit. To reduce the gas needed, try reducing the size of your call data and/or sending your call data in multiple UserOperations rather than one.\\n\",\"title\":\"Total execution gas limit exceeded: { code: -3202, message: 'precheck failed: total execution gas is X but must be at most 10000000}\",\"titles\":[\"Frequently asked questions\",\"Common Errors\"]},{\"href\":\"/resources/faqs#waitforuseroperationtransaction-timeout\",\"html\":\"\\n
Answer

waitForUserOperationTransaction may throw this error if it does not find the mined User Operation within its retry limits.

You can mitigate this by defining a more flexible retry period when constructing a Client (i.e. txMaxRetries, txRetryIntervalMs, txRetryMultiplier in opts).

If your UserOperation continues to be delayed beyond a limit you are willing to wait, you can resubmit the user operation using dropAndReplaceUserOperation.

\\n\",\"id\":\"pages/resources/faqs.mdx#waitforuseroperationtransaction-timeout\",\"isPage\":false,\"text\":\"\\nAnswerwaitForUserOperationTransaction may throw this error if it does not find the mined User Operation within its retry limits.You can mitigate this by defining a more flexible retry period when constructing a Client (i.e. txMaxRetries, txRetryIntervalMs, txRetryMultiplier in opts).If your UserOperation continues to be delayed beyond a limit you are willing to wait, you can resubmit the user operation using dropAndReplaceUserOperation.\\n\",\"title\":\"waitForUserOperationTransaction timeout\",\"titles\":[\"Frequently asked questions\",\"Common Errors\"]},{\"href\":\"/resources/faqs#other-support\",\"html\":\"\\n\",\"id\":\"pages/resources/faqs.mdx#other-support\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Other Support\",\"titles\":[\"Frequently asked questions\"]},{\"href\":\"/resources/faqs#does-the-aa-sdk-repo-support-react-native\",\"html\":\"\\n

No, the aa-sdk repo does not offically support React Native. It is on our radar!

\\n

Currently we have a strong dependency on Viem, which requires several global features, such as TextEncoder and crypto, that are absent in React Native's environment. See more about Viem's capability here.

\\n

However, we have created a small PoC using Expo that you can find here. For more information on how to use Account Kit within a React Native application see the guide.

\",\"id\":\"pages/resources/faqs.mdx#does-the-aa-sdk-repo-support-react-native\",\"isPage\":false,\"text\":\"\\nNo, the aa-sdk repo does not offically support React Native. It is on our radar!\\nCurrently we have a strong dependency on Viem, which requires several global features, such as TextEncoder and crypto, that are absent in React Native's environment. See more about Viem's capability here.\\nHowever, we have created a small PoC using Expo that you can find here. For more information on how to use Account Kit within a React Native application see the guide.\",\"title\":\"Does the aa-sdk repo support React Native?\",\"titles\":[\"Frequently asked questions\",\"Other Support\"]}]}],[\"index.bb046e25c6943ddd115cdb14f2c2cfa7414b808670b75895de1c928be8ae35d2\",{\"mdx\":\"---\\ntitle: Terms\\ndescription: Glossary of terms related to Account Kit\\n---\\n\\n# Terms\\n\\n## Account Kit\\n\\nAccount Kit is a framework designed to embed smart accounts in web3 applications. It includes a set of tools such as [Signer integrations](/concepts/smart-account-signer), [Gas Manager](https://docs.alchemy.com/docs/gas-manager-services) and [Bundler](https://docs.alchemy.com/docs/bundler-services) utilities that unlock features such as [gas sponsorship](#TODO/using-smart-accounts/sponsoring-gas/gas-manager), [batched transactions](#TODO/using-smart-accounts/batch-user-operations) and email/social login. With its user-friendly suite of SDKs, known as [aa-sdk](https://github.com/alchemyplatform/aa-sdk), Account Kit makes it easy to deploy smart accounts, manage `UserOperation`s, and handle gas sponsorship, streamlining the entire process with minimal coding effort.\\n\\n## Bundler\\n\\nA network participant in the [ERC-4337](#erc-4337) standard that collects and submits `UserOperations` (UOs) to the blockchain, handling the associated gas fees, in exchange for payment during UO processing either directly from the user or from a [Paymaster](https://www.alchemy.com/overviews/what-is-a-paymaster). Alchemy’s implementation of a bundler is called [Rundler](https://github.com/alchemyplatform/rundler). It is written in Rust and designed to achieve high performance and reliability.\\n\\n## Client\\n\\nBuilt on top of `viem`, we have built our own [`Client`](https://viem.sh/docs/clients/custom) extended with custom functionality as a [`BundlerClient`](/resources/types#BundlerClient) and [`SmartAccountClient`](/resources/types#SmartAccountClient) compliant to EIP-4337 and EIP-6900 standards. `Client`, in general, is an intermediary or connector that enables interactions between client applications and your `SmartAccount` (either `LightAccount` or `ModularAccount`) or the `Bundler`.\\n\\n## EntryPoint\\n\\nA standardized smart contract that acts as the primary gateway for processing `UserOperations` (UOs) on the blockchain. It receives bundled UOs from [`Bundlers`](#bundler) and verifies and executes these operations according to predefined rules, ensuring security and adherence to user-specified conditions. `EntryPoint` contract is a singleton contract to execute bundles of `UserOperation`s. `Bundler`s whitelist the supported `EntryPoint`.\\n\\n## ERC-4337\\n\\nA standard authored by the [Ethereum Foundation](https://ethereum.foundation/) for [account abstraction](https://docs.alchemy.com/docs/introduction-to-account-abstraction), establishing a uniform interface for all smart accounts. This standard also outlines the roles and functionalities of [Bundlers](https://docs.alchemy.com/docs/bundler-services), [Paymasters](https://www.alchemy.com/overviews/what-is-a-paymaster), and [`EntryPoint`](#entrypoint). Reference: https://eips.ethereum.org/EIPS/eip-4337\\n\\n## ERC-6492\\n\\nA standard designed for verifying signatures from smart accounts that haven't been deployed yet. It is important for account abstraction, allowing decentralized applications (dApps) to authenticate user signatures even before the user's smart account is deployed. The deployment of these accounts typically occurs during the user's first transaction, making [ERC-6492](https://eips.ethereum.org/EIPS/eip-6492) essential for early interaction verification between users and dApps.\\n\\n## ERC-6900\\n\\nA [standard for modular accounts](https://eips.ethereum.org/EIPS/eip-6900) authored by Alchemy and [Yoav](https://github.com/yoavw) (one of the authors of ERC-4337) from the Ethereum Foundation. It defines standard interfaces for Modular Accounts ([`Modular Accounts`](#modular-account)) capable of supporting all standard-conformant [`Plugins`](#plugin).\\n\\n## Gas Manager\\n\\n[`Gas Manager`](https://docs.alchemy.com/docs/gas-manager-services) is the Alchemy’s [Paymaster](#paymaster) service. With robust security and customizability, Alchemy Gas Manager allows you to easily and securely sponsor the gas fees for users of your applications. Gas Managers authenticate transactions and ensure payments are carried out only when specific conditions are fulfilled, significantly reducing the chances of fraud and errors. Additionally, Gas Managers allow you to set granular rules for sponsoring your user's gas fees, so you can determine precisely when and how the gas fees will be sponsored. Head over to [Gas Manager](https://docs.alchemy.com/docs/gas-manager-services) documentation to learn more.\\n\\n## Light Account\\n\\n[Light Account](#TODO/smart-contracts/light-account/) is a collection of lightweight, production-ready [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) smart accounts developed by Alchemy. It builds on top of Ethereum Foundation's canonical [SimpleAccount](https://github.com/eth-infinitism/account-abstraction/blob/develop/contracts/samples/SimpleAccount.sol) to add key improvements such as ownership transfers, multiple owners, ERC-1271 signature support, and gas optimizations. It has been audited [multiple](https://github.com/alchemyplatform/light-account/blob/develop/audits/2024-01-09_quantstamp_aa8196b.pdf) [times](https://github.com/alchemyplatform/light-account/blob/develop/audits/2024-04-26_quantstamp_93f46a2.pdf) by Quantstamp.\\n\\n## Magic Link Authentication\\n\\nA magic link is a one-time use link sent to a user during the authentication process. After entering their username, the user is sent a URL, either to the user's email address or their mobile phone via text. The user clicks to authenticate themselves without entering a password, and for some, this might seem like \\\"magic,\\\" thus the name. Magic links are attractive because it is a simple way to remove the need for a customer to generate and remember a password from the process.\\n\\n## Modular Account\\n\\nA type of smart account enabled by the [ERC-6900](https://eips.ethereum.org/EIPS/eip-6900) standard and characterized by its [modular structure](#TODO/smart-contracts/modular-account/). This structure segments different functionalities of the account into distinct, independently upgradeable modules or plugins. Each plugin can have specific functions such as validation, execution, or hooks, enabling the smart account to extend its capabilities or modify its behavior without altering the core account logic. Modular Accounts enhance the flexibility, upgradeability, and interoperability of [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) smart accounts. Modular Account contracts have been audited by both [Spearbit](https://github.com/alchemyplatform/modular-account/blob/develop/audits/2024-01-31_spearbit_0e3fd1e.pdf) and [Quantstamp](https://github.com/alchemyplatform/modular-account/blob/develop/audits/2024-02-19_quantstamp_0e3fd1e.pdf).\\n\\nimport Bbp from \\\"./bbp.mdx\\\";\\n\\n\\n\\n## Passkey\\n\\nPasskeys are a safer and easier alternative to passwords. With passkeys, users can sign in to apps and websites with a biometric sensor (such as a fingerprint or facial recognition), PIN, or pattern, freeing them from having to remember and manage passwords.\\n\\n## Paymaster\\n\\nA [Paymaster](https://eips.ethereum.org/EIPS/eip-4337#paymasters) is an on-chain contract that allows an entity to sponsor the gas fees for another entity. It can be used by dapps or companies to abstract away the concept of gas from their users. This significantly enhances the UX of dApps and can help onboard the next wave of Web3 users.\\n\\n## Plugin\\n\\nA module for [ERC-6900](https://eips.ethereum.org/EIPS/eip-6900#terms) smart contract accounts, plugins are deployed smart contracts that host any amount of the EIP-6900 modular functions: execution functions, validation functions, or hooks. These plugins ensure modularity, upgradeability, and adherence to standardized interfaces.\\n\\n## Signer\\n\\nA service or application that manages the private key and signs either arbitrary messages or structured data objects such as `UserOperations` or `Transactions` before sending to the network. Types of signers include:\\n\\n- **Custodial**: Managed by a third party, it holds and autonomously uses the private key for transactions, necessitating complete user trust.\\n- **Non-custodial**: While a third party manages the private key, user involvement is required for signing transactions. Examples: Metamask.\\n- **MPC (Multi-Party Computation)**: Partial or complete key shares are managed by third parties, but user participation is needed for transaction signatures. Examples: Privy, Portal, Fireblocks, Fordefi.\\n- **Decentralized MPC**: Operated by a decentralized network, it manages key shares and requires node consensus for transaction signatures. Examples: Lit, Web3auth, 0xpass.\\n\\n## Smart Contract Account\\n\\nA [Smart Contract Account (SCA)](/concepts/smart-contract-account), or smart account in short, is an individual on-chain account located at a public address where an ERC-4337 compatible smart account [`contract`](https://ethereum.org/developers/docs/smart-contracts) is deployed to. This address is controlled by one or more owners of the smart contract account. The [aa-sdk](https://github.com/alchemyplatform/aa-sdk) supports different smart account implementations such as [Modular Account](#TODO/smart-contracts/modular-account/), [Light Account](#TODO/smart-contracts/light-account/), or [Simple Account](https://github.com/eth-infinitism/account-abstraction/blob/develop/contracts/samples/SimpleAccount.sol). You can also [add your own account implementation in aa-sdk](#TODO/smart-contracts/custom/contributing).\\n\\n## Transaction\\n\\n`Transactions` in blockchain are cryptographically signed data messages that contain a set of instructions. These instructions can be interpreted to send native tokens from one account to another or interact with a smart contract deployed on the blockchain. A `Transaction` usually consists of the following parameters: `nonce`, `gasPrice`, `gasLimit`, `to`, `value`, `data`, `v`, `r`, `s`. Ethereum and other EVM blockchains have evolved to allow other transaction standards such as [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559), to allow more predictable gas fees and a more efficient transaction market.\\n\\n## Transaction Calldata\\n\\nTransaction `calldata` refers to the data passed along with a transaction that allows accounts to send messages to other entities or interact with smart contracts. When calling smart contracts on-chain (either from an `EOA` or another contract), the `calldata` is the encoded data within the `Transaction` containing the input parameters (or arguments) of the function being called on the contract.\\n\\n## User Operation\\n\\nUser Operations are pseudo-transaction objects introduced by the ERC-4337 standard that are issued to execute actions via a smart account. It encapsulates the intended actions or transactions of the user, which are executed on-chain by a [Bundler](#bundler) through an [`EntryPoint`](https://eips.ethereum.org/EIPS/eip-4337#definitions) contract on different EVM chains.\\n\\n## Wallet\\n\\n[Wallets](https://ethereum.org/wallets) are applications that give you control over your account. Like your physical wallet, it contains everything you need to prove your identity and handle your assets. Your wallet allows you to sign in to applications, read your balance, send transactions, and verify your identity. Your wallet is a tool for interacting with your account, which can be either an [Externally-Owned Account (EOA)](https://ethereum.org/developers/docs/accounts) or [`SmartContractAccount`](#smart-contract-account). Conventionally, wallets used to interact with `SmartContractAccounts` are called `Smart Contract Wallets`, while wallets used to interact with Externally-owned accounts (EOA) are called `EOA Wallets`.\\n\\n## Wallet-as-a-Service (WaaS)\\n\\nAlso called a key management service (KMS). WaaS is an infrastructure-as-a-service provider that stores private key material. A WaaS provider would be classified under one of the [signer custody types](#signer).\\n\",\"document\":[]}],[\"index.5361b9e7cbb6f4173bd5470f0ac17ceacbec7cf46e0670a4cacdd248cb37422a\",{\"mdx\":\"---\\ntitle: How to use your own Account Signer\\ndescription: Follow this guide to use any Signer you want with Account Kit, a vertically integrated stack for building apps that support ERC-4337 and ERC-6900.\\n---\\n\\n# How to use your own Account Signer\\n\\nAccount Kit is designed to be flexible and allow you to use any Signer you want. If you choose not use our signer, you can either:\\n\\n1. Implement [`SmartAccountSigner`](https://github.com/alchemyplatform/aa-sdk/blob/main/packages/core/src/signer/types.ts#L34) (exported in `@aa-sdk/core`).\\n2. If your Signer is an [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) compliant provider, you can leverage `viem`'s `WalletClient` and the [`WalletClientSigner`](/reference/aa-sdk/core/classes/WalletClientSigner/constructor) (exported in `@aa-sdk/core`).\\n\\nThen you can use your Signer as an owner on Smart Contracts exported from `@account-kit/smart-contracts` and with our infra Smart Account Clients exported from `@account-kit/infra`.\\n\\n## 1. Implementing `SmartAccountAuthenticator` or `SmartAccountSigner`\\n\\nSmart accounts in Account Kit expect an implementation of `SmartAccountSigner` to work in Account Kit. We also include a `SmartAccountAuthenticator` interface that extends `SmartAccountSigner` and wraps any SDKs you may wish to use as part of the implementation of your own Signer.\\n\\n```ts [types.ts] twoslash\\n// [!include ~/../aa-sdk/core/src/signer/types.ts]\\n```\\n\\n## 2. Using `WalletClientSigner`\\n\\nViem allows you to create a `WalletClient`, which can be used to wrap local or JSON RPC based wallets. You can see the complete docs for leveraging the `WalletClient` [here](https://viem.sh/docs/clients/wallet).\\n\\nWe support a `SmartAccountSigner` implementation called `WalletClientSigner` that makes it really easy to use a viem `WalletClient` as a signer on your Smart Contract Account. If your Signer is [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) compliant, it is really easy to use with `WalletClient`. Let's take a look at a simple example:\\n\\n```ts [wallet-client-signer.ts] twoslash\\n// @noErrors\\n// [!include ~/shared/signer/wallet-client-signer.ts]\\n```\\n\",\"document\":[{\"href\":\"/signer/custom-signer#how-to-use-your-own-account-signer\",\"html\":\"\\n

Account Kit is designed to be flexible and allow you to use any Signer you want. If you choose not use our signer, you can either:

\\n
    \\n
  1. Implement SmartAccountSigner (exported in @aa-sdk/core).
  2. \\n
  3. If your Signer is an EIP-1193 compliant provider, you can leverage viem's WalletClient and the WalletClientSigner (exported in @aa-sdk/core).
  4. \\n
\\n

Then you can use your Signer as an owner on Smart Contracts exported from @account-kit/smart-contracts and with our infra Smart Account Clients exported from @account-kit/infra.

\\n\",\"id\":\"pages/signer/custom-signer.mdx#how-to-use-your-own-account-signer\",\"isPage\":true,\"text\":\"\\nAccount Kit is designed to be flexible and allow you to use any Signer you want. If you choose not use our signer, you can either:\\n\\nImplement SmartAccountSigner (exported in @aa-sdk/core).\\nIf your Signer is an EIP-1193 compliant provider, you can leverage viem's WalletClient and the WalletClientSigner (exported in @aa-sdk/core).\\n\\nThen you can use your Signer as an owner on Smart Contracts exported from @account-kit/smart-contracts and with our infra Smart Account Clients exported from @account-kit/infra.\\n\",\"title\":\"How to use your own Account Signer\",\"titles\":[]},{\"href\":\"/signer/custom-signer#1-implementing-smartaccountauthenticator-or-smartaccountsigner\",\"html\":\"\\n

Smart accounts in Account Kit expect an implementation of SmartAccountSigner to work in Account Kit. We also include a SmartAccountAuthenticator interface that extends SmartAccountSigner and wraps any SDKs you may wish to use as part of the implementation of your own Signer.

\\n
import type { Address } from "abitype";\\nimport type {\\n  Hex,\\n  SignableMessage,\\n  TypedData,\\n  TypedDataDefinition,\\n} from "viem";\\n \\n/**\\n * Extends the @interface SmartAccountSigner interface with authentication.\\n *\\n * @template AuthParams - the generic type of the authentication parameters\\n * @template AuthDetails - the generic type of the authentication details\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>\\n  extends SmartAccountSigner<Inner> {\\n  authenticate: (params: AuthParams) => Promise<AuthDetails>;\\n \\n  getAuthDetails: () => Promise<AuthDetails>;\\n}\\n \\n/**\\n * A signer that can sign messages and typed data.\\n *\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountSigner<Inner = any> {\\n  signerType: string;\\n  inner: Inner;\\n \\n  getAddress: () => Promise<Address>;\\n \\n  signMessage: (message: SignableMessage) => Promise<Hex>;\\n \\n  signTypedData: <\\n    const TTypedData extends TypedData | { [key: string]: unknown },\\n    TPrimaryType extends string = string\\n  >(\\n    params: TypedDataDefinition<TTypedData, TPrimaryType>\\n  ) => Promise<Hex>;\\n}
\\n\",\"id\":\"pages/signer/custom-signer.mdx#1-implementing-smartaccountauthenticator-or-smartaccountsigner\",\"isPage\":false,\"text\":\"\\nSmart accounts in Account Kit expect an implementation of SmartAccountSigner to work in Account Kit. We also include a SmartAccountAuthenticator interface that extends SmartAccountSigner and wraps any SDKs you may wish to use as part of the implementation of your own Signer.\\nimport type { Address } from "abitype";\\nimport type {\\n Hex,\\n SignableMessage,\\n TypedData,\\n TypedDataDefinition,\\n} from "viem";\\n \\n/**\\n * Extends the @interface SmartAccountSigner interface with authentication.\\n *\\n * @template AuthParams - the generic type of the authentication parameters\\n * @template AuthDetails - the generic type of the authentication details\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>\\n extends SmartAccountSigner<Inner> {\\n authenticate: (params: AuthParams) => Promise<AuthDetails>;\\n \\n getAuthDetails: () => Promise<AuthDetails>;\\n}\\n \\n/**\\n * A signer that can sign messages and typed data.\\n *\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountSigner<Inner = any> {\\n signerType: string;\\n inner: Inner;\\n \\n getAddress: () => Promise<Address>;\\n \\n signMessage: (message: SignableMessage) => Promise<Hex>;\\n \\n signTypedData: <\\n const TTypedData extends TypedData | { [key: string]: unknown },\\n TPrimaryType extends string = string\\n >(\\n params: TypedDataDefinition<TTypedData, TPrimaryType>\\n ) => Promise<Hex>;\\n}\\n\",\"title\":\"1. Implementing SmartAccountAuthenticator or SmartAccountSigner\",\"titles\":[\"How to use your own Account Signer\"]},{\"href\":\"/signer/custom-signer#2-using-walletclientsigner\",\"html\":\"\\n

Viem allows you to create a WalletClient, which can be used to wrap local or JSON RPC based wallets. You can see the complete docs for leveraging the WalletClient here.

\\n

We support a SmartAccountSigner implementation called WalletClientSigner that makes it really easy to use a viem WalletClient as a signer on your Smart Contract Account. If your Signer is EIP-1193 compliant, it is really easy to use with WalletClient. Let's take a look at a simple example:

\\n
// @noErrors\\nimport { WalletClientSigner, type SmartAccountSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst externalProvider = window.ethereum; // or anyother EIP-1193 provider\\n \\nconst walletClient = createWalletClient({\\n  chain: sepolia, // can provide a different chain here\\n  transport: custom(externalProvider),\\n});\\n \\nexport const signer: SmartAccountSigner = new WalletClientSigner(\\n  walletClient,\\n  "json-rpc" // signerType\\n);
\",\"id\":\"pages/signer/custom-signer.mdx#2-using-walletclientsigner\",\"isPage\":false,\"text\":\"\\nViem allows you to create a WalletClient, which can be used to wrap local or JSON RPC based wallets. You can see the complete docs for leveraging the WalletClient here.\\nWe support a SmartAccountSigner implementation called WalletClientSigner that makes it really easy to use a viem WalletClient as a signer on your Smart Contract Account. If your Signer is EIP-1193 compliant, it is really easy to use with WalletClient. Let's take a look at a simple example:\\n// @noErrors\\nimport { WalletClientSigner, type SmartAccountSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst externalProvider = window.ethereum; // or anyother EIP-1193 provider\\n \\nconst walletClient = createWalletClient({\\n chain: sepolia, // can provide a different chain here\\n transport: custom(externalProvider),\\n});\\n \\nexport const signer: SmartAccountSigner = new WalletClientSigner(\\n walletClient,\\n "json-rpc" // signerType\\n);\",\"title\":\"2. Using WalletClientSigner\",\"titles\":[\"How to use your own Account Signer\"]}]}],[\"index.dc72b27a1db406772d6a2fbdecc6c69103f27e71982853dd12c41c89ec135f7e\",{\"mdx\":\"---\\ntitle: Server Side Rendering\\ndescription: An overview on how to use React Hooks with Server Side Rendering\\n---\\n\\n# Server Side Rendering (SSR)\\n\\nWhen using the React hooks exported by Account Kit in a server-side rendered setting, you will see inconsistencies of the user state between the server and the client. This will lead to flashes of content when a user is logged in. To avoid this, the account state can be optimistically loaded on the server and passed to the client.\\n\\nTo enable this setting, you can set `ssr: true` when creating a config.\\n\\n```ts twoslash [config.ts]\\n// @noErrors\\nimport { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig({\\n // required\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true, // [!code ++]\\n});\\n```\\n\\nThis setting will defer hydration of the account state to the client after the initial mount.\\n\\n## Persisting the Account State\\n\\n### Cookie Storage\\n\\nTo consistently pass the state between the server and the client, you can pass in a cookie storage to the `config` object created above. The cookie storage allows the client state to be written serialized to a cookie which can be passed along to the server on each request. This allows the server to have access to certain parts of the account state when rendering, ensuring a consistent render between client and server (eg. user's address displayed in the top nav). Instances which can only be created on the client will still not be available on the server, however. This includes the signer or smart contract account instances.\\n\\n```ts twoslash [config.ts]\\n// @noErrors\\nimport {\\n createConfig,\\n cookieStorage, // [!code ++]\\n} from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nexport const queryClient = new QueryClient();\\n\\n// [!code focus:99]\\nexport const config = createConfig({\\n // required\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true, // [!code ++]\\n storage: cookieStorage, // [!code ++]\\n});\\n```\\n\\nNow, depending on your application, you can get the state from cookies and pass in the `initialState` to the `AlchemyAccountProvider` to hydrate the account state on the client.\\n\\n### Next.js App Directory\\n\\nIf you are using NextJS App Directory, you can read the cookie state and pass it to the providers like so:\\n\\n:::code-group\\n\\n```tsx twoslash [layout.tsx]\\n// @noErrors\\nimport React from \\\"react\\\";\\nimport { cookieToInitialState } from \\\"@account-kit/core\\\";\\nimport type { Metadata } from \\\"next\\\";\\nimport { Inter } from \\\"next/font/google\\\";\\nimport { headers } from \\\"next/headers\\\";\\nimport { config } from \\\"./config\\\";\\nimport \\\"./globals.css\\\";\\nimport { Providers } from \\\"./providers\\\";\\n\\nconst inter = Inter({ subsets: [\\\"latin\\\"] });\\n\\nexport const metadata: Metadata = {\\n title: \\\"Embedded Accounts Getting Started\\\",\\n description: \\\"Embedded Accounts Quickstart Guide\\\",\\n};\\n\\nexport default function RootLayout({\\n children,\\n}: Readonly<{\\n children: React.ReactNode;\\n}>) {\\n // This will allow us to persist state across page boundaries\\n const initialState = cookieToInitialState(\\n config,\\n headers().get(\\\"cookie\\\") ?? undefined\\n );\\n\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\\n```\\n\\n```tsx twoslash [providers.tsx]\\n// @noErrors\\n\\\"use client\\\";\\n\\nimport React from \\\"react\\\";\\nimport { AlchemyClientState } from \\\"@account-kit/core\\\";\\nimport { AlchemyAccountProvider } from \\\"@account-kit/react\\\";\\nimport { QueryClientProvider } from \\\"@tanstack/react-query\\\";\\nimport { PropsWithChildren, Suspense } from \\\"react\\\";\\nimport { config, queryClient } from \\\"./config\\\";\\n\\nexport const Providers = (\\n props: PropsWithChildren<{ initialState?: AlchemyClientState }>\\n) => {\\n return (\\n \\n \\n \\n {props.children}\\n \\n \\n \\n );\\n};\\n```\\n\\n```tsx twoslash [config.ts]\\n// @noErrors\\nimport { createConfig, cookieStorage } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nexport const queryClient = new QueryClient();\\n\\nexport const config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n storage: cookieStorage,\\n});\\n```\\n\\n:::\\n\\n### Next.js Pages Directory\\n\\nComing soon!\\n\\n### Vanilla SSR\\n\\nComing soon!\\n\",\"document\":[{\"href\":\"/react/ssr#server-side-rendering-ssr\",\"html\":\"\\n

When using the React hooks exported by Account Kit in a server-side rendered setting, you will see inconsistencies of the user state between the server and the client. This will lead to flashes of content when a user is logged in. To avoid this, the account state can be optimistically loaded on the server and passed to the client.

\\n

To enable this setting, you can set ssr: true when creating a config.

\\n
// @noErrors\\nimport { createConfig } from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\n \\nexport const config = createConfig({\\n  // required\\n  rpcUrl: "/api/rpc",\\n  chain: sepolia,\\n  ssr: true, \\n});
\\n

This setting will defer hydration of the account state to the client after the initial mount.

\\n\",\"id\":\"pages/react/ssr.mdx#server-side-rendering-ssr\",\"isPage\":true,\"text\":\"\\nWhen using the React hooks exported by Account Kit in a server-side rendered setting, you will see inconsistencies of the user state between the server and the client. This will lead to flashes of content when a user is logged in. To avoid this, the account state can be optimistically loaded on the server and passed to the client.\\nTo enable this setting, you can set ssr: true when creating a config.\\n// @noErrors\\nimport { createConfig } from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\n \\nexport const config = createConfig({\\n // required\\n rpcUrl: "/api/rpc",\\n chain: sepolia,\\n ssr: true, \\n});\\nThis setting will defer hydration of the account state to the client after the initial mount.\\n\",\"title\":\"Server Side Rendering (SSR)\",\"titles\":[]},{\"href\":\"/react/ssr#persisting-the-account-state\",\"html\":\"\\n\",\"id\":\"pages/react/ssr.mdx#persisting-the-account-state\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Persisting the Account State\",\"titles\":[\"Server Side Rendering (SSR)\"]},{\"href\":\"/react/ssr#cookie-storage\",\"html\":\"\\n

To consistently pass the state between the server and the client, you can pass in a cookie storage to the config object created above. The cookie storage allows the client state to be written serialized to a cookie which can be passed along to the server on each request. This allows the server to have access to certain parts of the account state when rendering, ensuring a consistent render between client and server (eg. user's address displayed in the top nav). Instances which can only be created on the client will still not be available on the server, however. This includes the signer or smart contract account instances.

\\n
// @noErrors\\nimport {\\n  createConfig,\\n  cookieStorage, \\n} from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\nimport { QueryClient } from "@tanstack/react-query";\\n \\nexport const queryClient = new QueryClient();\\n \\n\\nexport const config = createConfig({\\n  // required\\n  rpcUrl: "/api/rpc",\\n  chain: sepolia,\\n  ssr: true, \\n  storage: cookieStorage, \\n});
\\n

Now, depending on your application, you can get the state from cookies and pass in the initialState to the AlchemyAccountProvider to hydrate the account state on the client.

\\n\",\"id\":\"pages/react/ssr.mdx#cookie-storage\",\"isPage\":false,\"text\":\"\\nTo consistently pass the state between the server and the client, you can pass in a cookie storage to the config object created above. The cookie storage allows the client state to be written serialized to a cookie which can be passed along to the server on each request. This allows the server to have access to certain parts of the account state when rendering, ensuring a consistent render between client and server (eg. user's address displayed in the top nav). Instances which can only be created on the client will still not be available on the server, however. This includes the signer or smart contract account instances.\\n// @noErrors\\nimport {\\n createConfig,\\n cookieStorage, \\n} from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\nimport { QueryClient } from "@tanstack/react-query";\\n \\nexport const queryClient = new QueryClient();\\n \\n\\nexport const config = createConfig({\\n // required\\n rpcUrl: "/api/rpc",\\n chain: sepolia,\\n ssr: true, \\n storage: cookieStorage, \\n});\\nNow, depending on your application, you can get the state from cookies and pass in the initialState to the AlchemyAccountProvider to hydrate the account state on the client.\\n\",\"title\":\"Cookie Storage\",\"titles\":[\"Server Side Rendering (SSR)\",\"Persisting the Account State\"]},{\"href\":\"/react/ssr#nextjs-app-directory\",\"html\":\"\\n

If you are using NextJS App Directory, you can read the cookie state and pass it to the providers like so:

\\n
// @noErrors\\nimport React from "react";\\nimport { cookieToInitialState } from "@account-kit/core";\\nimport type { Metadata } from "next";\\nimport { Inter } from "next/font/google";\\nimport { headers } from "next/headers";\\nimport { config } from "./config";\\nimport "./globals.css";\\nimport { Providers } from "./providers";\\n \\nconst inter = Inter({ subsets: ["latin"] });\\n \\nexport const metadata: Metadata = {\\n  title: "Embedded Accounts Getting Started",\\n  description: "Embedded Accounts Quickstart Guide",\\n};\\n \\nexport default function RootLayout({\\n  children,\\n}: Readonly<{\\n  children: React.ReactNode;\\n}>) {\\n  // This will allow us to persist state across page boundaries\\n  const initialState = cookieToInitialState(\\n    config,\\n    headers().get("cookie") ?? undefined\\n  );\\n \\n  return (\\n    <html lang="en">\\n      <body className={inter.className}>\\n        <Providers initialState={initialState}>{children}</Providers>\\n      </body>\\n    </html>\\n  );\\n}
// @noErrors\\n"use client";\\n \\nimport React from "react";\\nimport { AlchemyClientState } from "@account-kit/core";\\nimport { AlchemyAccountProvider } from "@account-kit/react";\\nimport { QueryClientProvider } from "@tanstack/react-query";\\nimport { PropsWithChildren, Suspense } from "react";\\nimport { config, queryClient } from "./config";\\n \\nexport const Providers = (\\n  props: PropsWithChildren<{ initialState?: AlchemyClientState }>\\n) => {\\n  return (\\n    <Suspense>\\n      <QueryClientProvider client={queryClient}>\\n        <AlchemyAccountProvider\\n          config={config}\\n          queryClient={queryClient}\\n          initialState={props.initialState}\\n        >\\n          {props.children}\\n        </AlchemyAccountProvider>\\n      </QueryClientProvider>\\n    </Suspense>\\n  );\\n};
// @noErrors\\nimport { createConfig, cookieStorage } from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\nimport { QueryClient } from "@tanstack/react-query";\\n \\nexport const queryClient = new QueryClient();\\n \\nexport const config = createConfig({\\n  rpcUrl: "/api/rpc",\\n  chain: sepolia,\\n  ssr: true,\\n  storage: cookieStorage,\\n});
\\n\",\"id\":\"pages/react/ssr.mdx#nextjs-app-directory\",\"isPage\":false,\"text\":\"\\nIf you are using NextJS App Directory, you can read the cookie state and pass it to the providers like so:\\n// @noErrors\\nimport React from "react";\\nimport { cookieToInitialState } from "@account-kit/core";\\nimport type { Metadata } from "next";\\nimport { Inter } from "next/font/google";\\nimport { headers } from "next/headers";\\nimport { config } from "./config";\\nimport "./globals.css";\\nimport { Providers } from "./providers";\\n \\nconst inter = Inter({ subsets: ["latin"] });\\n \\nexport const metadata: Metadata = {\\n title: "Embedded Accounts Getting Started",\\n description: "Embedded Accounts Quickstart Guide",\\n};\\n \\nexport default function RootLayout({\\n children,\\n}: Readonly<{\\n children: React.ReactNode;\\n}>) {\\n // This will allow us to persist state across page boundaries\\n const initialState = cookieToInitialState(\\n config,\\n headers().get("cookie") ?? undefined\\n );\\n \\n return (\\n <html lang="en">\\n <body className={inter.className}>\\n <Providers initialState={initialState}>{children}</Providers>\\n </body>\\n </html>\\n );\\n}// @noErrors\\n"use client";\\n \\nimport React from "react";\\nimport { AlchemyClientState } from "@account-kit/core";\\nimport { AlchemyAccountProvider } from "@account-kit/react";\\nimport { QueryClientProvider } from "@tanstack/react-query";\\nimport { PropsWithChildren, Suspense } from "react";\\nimport { config, queryClient } from "./config";\\n \\nexport const Providers = (\\n props: PropsWithChildren<{ initialState?: AlchemyClientState }>\\n) => {\\n return (\\n <Suspense>\\n <QueryClientProvider client={queryClient}>\\n <AlchemyAccountProvider\\n config={config}\\n queryClient={queryClient}\\n initialState={props.initialState}\\n >\\n {props.children}\\n </AlchemyAccountProvider>\\n </QueryClientProvider>\\n </Suspense>\\n );\\n};// @noErrors\\nimport { createConfig, cookieStorage } from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\nimport { QueryClient } from "@tanstack/react-query";\\n \\nexport const queryClient = new QueryClient();\\n \\nexport const config = createConfig({\\n rpcUrl: "/api/rpc",\\n chain: sepolia,\\n ssr: true,\\n storage: cookieStorage,\\n});\\n\",\"title\":\"Next.js App Directory\",\"titles\":[\"Server Side Rendering (SSR)\",\"Persisting the Account State\"]},{\"href\":\"/react/ssr#nextjs-pages-directory\",\"html\":\"\\n

Coming soon!

\\n\",\"id\":\"pages/react/ssr.mdx#nextjs-pages-directory\",\"isPage\":false,\"text\":\"\\nComing soon!\\n\",\"title\":\"Next.js Pages Directory\",\"titles\":[\"Server Side Rendering (SSR)\",\"Persisting the Account State\"]},{\"href\":\"/react/ssr#vanilla-ssr\",\"html\":\"\\n

Coming soon!

\",\"id\":\"pages/react/ssr.mdx#vanilla-ssr\",\"isPage\":false,\"text\":\"\\nComing soon!\",\"title\":\"Vanilla SSR\",\"titles\":[\"Server Side Rendering (SSR)\",\"Persisting the Account State\"]}]}],[\"index.85f0c79f0a4b5e69a1c7e77ca0195d62b0efe00bb6ac95703a18b642100e25f8\",{\"mdx\":\"---\\ntitle: Signer Quickstart\\ndescription: Get started with the Alchemy Signer\\n---\\n\\nimport GetApiKeysSnippet from \\\"../../shared/get-api-key.mdx\\\";\\n\\n# Signer Quickstart\\n\\nGetting started with the Signer is very similar to [getting started with React](/react/quickstart).\\n\\n## Get your API key and create an account config\\n\\n\\n\\n## Install the Signer package\\n\\n:::code-group\\n\\n```bash [yarn]\\nyarn add @account-kit/signer\\n```\\n\\n```bash [npm]\\nyarn add @account-kit/signer\\n```\\n\\n:::\\n\\n## Create a signer instance\\n\\n```ts twoslash\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n## Authenticate a user\\n\\nNext, you'll need to authenticate your user before you can use the Signer as an owner on the account.\\n\\n:::tip\\nIn this example, we use email auth, but we support a number of other auth methods. See the other guides for more examples.\\n:::\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"example@mail.com\\\",\\n});\\n```\\n\\n```ts twoslash [signer] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\\n## Use signer as owner on Smart Account\\n\\nNow that you have authenticated your user, you can use the signer as an owner on a Smart Contract Account.\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { http } from \\\"viem\\\";\\nimport { signer } from \\\"./signer\\\";\\n\\nconst account = await createLightAccount({\\n signer,\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/API_KEY`),\\n});\\n```\\n\\n```ts twoslash [signer] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\",\"document\":[]}],[\"index.ec568f2d24a5be0bc09bb5c2252299604c153aaa90ef7c6e4f6cee21726ac830\",{\"mdx\":\"---\\ntitle: Manage user sessions\\ndescription: Learn how to configure and leverage sessions for you users with the Alchemy Signer\\n---\\n\\n# User sessions\\n\\nBy default, `AlchemyWebSigner` user sessions are cached in `localStorage` for 15 minutes.\\n\\nYou can customize session length by passing a [`sessionConfig`](/reference/account-kit/signer/classes/AlchemyWebSigner/constructor) to your `AlchemyWebSigner` constructor.\\n\\nYou can check if the user has an active session with the following command:\\n:::code-group\\n\\n```ts twoslash [getAuthDetails.ts]\\nimport { signer } from \\\"./signer\\\";\\n\\n// NOTE: this method throws if there is no authenticated user\\n// so we return null in the case of an error\\nconst user = await signer.getAuthDetails().catch(() => null);\\n```\\n\\n```ts twoslash [signer.ts] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\\nIf there is an existing session, then your signer is ready for use! If not, see the section above for logging users in.\\n\",\"document\":[{\"href\":\"/signer/user-sessions#user-sessions\",\"html\":\"\\n

By default, AlchemyWebSigner user sessions are cached in localStorage for 15 minutes.

\\n

You can customize session length by passing a sessionConfig to your AlchemyWebSigner constructor.

\\n

You can check if the user has an active session with the following command:

\\n
// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\n// NOTE: this method throws if there is no authenticated user\\n// so we return null in the case of an error\\nconst user = await signer.getAuthDetails().catch(() => null);
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\\n

If there is an existing session, then your signer is ready for use! If not, see the section above for logging users in.

\",\"id\":\"pages/signer/user-sessions.mdx#user-sessions\",\"isPage\":true,\"text\":\"\\nBy default, AlchemyWebSigner user sessions are cached in localStorage for 15 minutes.\\nYou can customize session length by passing a sessionConfig to your AlchemyWebSigner constructor.\\nYou can check if the user has an active session with the following command:\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\n// NOTE: this method throws if there is no authenticated user\\n// so we return null in the case of an error\\nconst user = await signer.getAuthDetails().catch(() => null);import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\nIf there is an existing session, then your signer is ready for use! If not, see the section above for logging users in.\",\"title\":\"User sessions\",\"titles\":[]}]}],[\"index.f612b47ba82362a827ce3c9d25bd042dc6a9f82fcec65d96e591ec6d5de3f716\",{\"mdx\":\"---\\ntitle: Passkey Login\\ndescription: Authenticate a user using a passkey\\n---\\n\\n# Passkey Login\\n\\nIf a user has added a passkey to their account, or they initially signed up with a passkey, you can easily log them in with that passkey.\\n\\n## Authenticate a user with email and passkey\\n\\nIf you want to allow sign-up and login with a passkey, you can ask the user for an email to associate with their passkey. This way, they can log in with their email and passkey in the future. Under the hood, the email is also used to check if an account exists already so you can have a unified sign-up and login flow.\\n\\n:::danger\\nIt's important that you validate this email before creating an account for the user. This is to prevent users from losing access to their wallets if they lose their device.\\n:::\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n email: \\\"user@mail.com\\\",\\n});\\n```\\n\\n```ts twoslash [signer] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\\n## Authenticate an anonymous user\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n createNew: false,\\n});\\n```\\n\\n```ts twoslash [signer] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/signer/authentication/passkey-login#passkey-login\",\"html\":\"\\n

If a user has added a passkey to their account, or they initially signed up with a passkey, you can easily log them in with that passkey.

\\n\",\"id\":\"pages/signer/authentication/passkey-login.mdx#passkey-login\",\"isPage\":true,\"text\":\"\\nIf a user has added a passkey to their account, or they initially signed up with a passkey, you can easily log them in with that passkey.\\n\",\"title\":\"Passkey Login\",\"titles\":[]},{\"href\":\"/signer/authentication/passkey-login#authenticate-a-user-with-email-and-passkey\",\"html\":\"\\n

If you want to allow sign-up and login with a passkey, you can ask the user for an email to associate with their passkey. This way, they can log in with their email and passkey in the future. Under the hood, the email is also used to check if an account exists already so you can have a unified sign-up and login flow.

\\n\\n
// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\nconst result = await signer.authenticate({\\n  type: "passkey",\\n  email: "user@mail.com",\\n});
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\\n\",\"id\":\"pages/signer/authentication/passkey-login.mdx#authenticate-a-user-with-email-and-passkey\",\"isPage\":false,\"text\":\"\\nIf you want to allow sign-up and login with a passkey, you can ask the user for an email to associate with their passkey. This way, they can log in with their email and passkey in the future. Under the hood, the email is also used to check if an account exists already so you can have a unified sign-up and login flow.\\nIt's important that you validate this email before creating an account for the user. This is to prevent users from losing access to their wallets if they lose their device.\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\nconst result = await signer.authenticate({\\n type: "passkey",\\n email: "user@mail.com",\\n});import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n\",\"title\":\"Authenticate a user with email and passkey\",\"titles\":[\"Passkey Login\"]},{\"href\":\"/signer/authentication/passkey-login#authenticate-an-anonymous-user\",\"html\":\"\\n
// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\nconst result = await signer.authenticate({\\n  type: "passkey",\\n  createNew: false,\\n});
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\",\"id\":\"pages/signer/authentication/passkey-login.mdx#authenticate-an-anonymous-user\",\"isPage\":false,\"text\":\"\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\nconst result = await signer.authenticate({\\n type: "passkey",\\n createNew: false,\\n});import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\",\"title\":\"Authenticate an anonymous user\",\"titles\":[\"Passkey Login\"]}]}],[\"index.352dea1f3a9128ece45cae55d0690f205d24cc53e1362c27fb5fd95dc56a8eb8\",{\"mdx\":\"---\\ntitle: 3rd Paymasters\\ndescription: Learn how to use a 3rd party Paymaster with Account Kit\\n---\\n\\n# Using a third-party paymaster\\n\\nThe `SmartAccountClient` within `@aa-sdk/core` is unopinionated about which paymaster you use, so you can connect to any paymaster really simply. Configuration is done using the `paymasterAndData` config option when you call `createSmartAccountClient`.\\n\\n## Usage\\n\\n```ts twoslash\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst chain = sepolia;\\nconst client = createSmartAccountClient({\\n chain,\\n transport: http(\\\"RPC_URL\\\"),\\n // sets the dummy paymasterAndData with paymaster address appended with some dummy paymasterData\\n // that looks like a valid paymasterData\\n dummyPaymasterAndData: async (userop) => ({\\n ...userop,\\n paymasterAndData: `0x`,\\n }),\\n paymasterAndData: async (userop, opts) => {\\n // call your paymaster here to sponsor the userop\\n // leverage the `opts` field to apply any overrides\\n return {\\n ...userop,\\n paymasterAndData: \\\"0xresponsefromprovider\\\",\\n };\\n },\\n});\\n```\\n\",\"document\":[{\"href\":\"/infra/third-party/paymaster#using-a-third-party-paymaster\",\"html\":\"\\n

The SmartAccountClient within @aa-sdk/core is unopinionated about which paymaster you use, so you can connect to any paymaster really simply. Configuration is done using the paymasterAndData config option when you call createSmartAccountClient.

\\n\",\"id\":\"pages/infra/third-party/paymaster.mdx#using-a-third-party-paymaster\",\"isPage\":true,\"text\":\"\\nThe SmartAccountClient within @aa-sdk/core is unopinionated about which paymaster you use, so you can connect to any paymaster really simply. Configuration is done using the paymasterAndData config option when you call createSmartAccountClient.\\n\",\"title\":\"Using a third-party paymaster\",\"titles\":[]},{\"href\":\"/infra/third-party/paymaster#usage\",\"html\":\"\\n
import { createSmartAccountClient } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst chain = sepolia;\\nconst client = createSmartAccountClient({\\n  chain,\\n  transport: http("RPC_URL"),\\n  // sets the dummy paymasterAndData with paymaster address appended with some dummy paymasterData\\n  // that looks like a valid paymasterData\\n  dummyPaymasterAndData: async (userop) => ({\\n    ...userop,\\n    paymasterAndData: `0x<PAYMASTER_ADDRESS><PAYMASTER_DUMMY_DATA>`,\\n  }),\\n  paymasterAndData: async (userop, opts) => {\\n    // call your paymaster here to sponsor the userop\\n    // leverage the `opts` field to apply any overrides\\n    return {\\n      ...userop,\\n      paymasterAndData: "0xresponsefromprovider",\\n    };\\n  },\\n});
\",\"id\":\"pages/infra/third-party/paymaster.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst chain = sepolia;\\nconst client = createSmartAccountClient({\\n chain,\\n transport: http("RPC_URL"),\\n // sets the dummy paymasterAndData with paymaster address appended with some dummy paymasterData\\n // that looks like a valid paymasterData\\n dummyPaymasterAndData: async (userop) => ({\\n ...userop,\\n paymasterAndData: `0x<PAYMASTER_ADDRESS><PAYMASTER_DUMMY_DATA>`,\\n }),\\n paymasterAndData: async (userop, opts) => {\\n // call your paymaster here to sponsor the userop\\n // leverage the `opts` field to apply any overrides\\n return {\\n ...userop,\\n paymasterAndData: "0xresponsefromprovider",\\n };\\n },\\n});\",\"title\":\"Usage\",\"titles\":[\"Using a third-party paymaster\"]}]}],[\"index.5395587e8c93a69eecb8b3c8a7399ed5f52aa15fc1d04b3c4f542a0e484db3ca\",{\"mdx\":\"---\\ntitle: Choosing a Smart Account\\ndescription: Learn about different smart account implementations to use with\\n Account Kit, a vertically integrated stack for building apps that support\\n ERC-4337 and ERC-6900.\\n---\\n\\n# Choosing a Smart Account\\n\\n## What is a Smart Account?\\n\\nA smart account is an [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) smart account. You can use it to manage assets, execute transactions (known as `UserOperation`s), and more. There are many different implementations of a smart account, including [Modular Account](/smart-contracts/modular-account/) and [Light Account](/smart-contracts/light-account/).\\n\\n## Modular Account\\n\\n[Modular Account](/smart-contracts/modular-account/) is an enterprise-grade smart contract account designed from the ground up for ERC-4337. It is highly secure, gas optimized, and endlessly customizable with ERC-6900 plugins. With our pre-built plugins, it supports multiple owners (1-of-n), multisig thresholds (m-of-n), and session keys with scoped permissions.\\n\\nModular Account is the first [ERC-6900](https://eips.ethereum.org/EIPS/eip-6900) account implementation, making it infinitely extensible with custom plugins. Plug and play from a selection of existing plugins, including session keys and multisig, or write your own to customize the account for your app. We have created three pre-built plugins available today: [`MultiOwnerPlugin`](#TODO/smart-contracts/using-smart-accounts/transfer-ownership/modular-account), [`SessionKeyPlugin`](#TODO/smart-contracts/using-smart-accounts/session-keys/), and [`MultisigPlugin`](/smart-contracts/modular-account/multisig-plugin/). We're actively building new plugins and look forward to what new plugins you create!\\n\\nFor most applications, we recommend using **Modular Account**. Suppose you have already deployed Light Account in the past. In that case, you can follow [Upgrading to a Modular Account](/smart-contracts/modular-account/upgrading-to-modular-account) guide to easily upgrade your account from Light Account to Modular Account using Account Kit and unlock an ecosystem of plugins for your smart account stack.\\n\\nModular Account has been audited by both [Spearbit](https://github.com/alchemyplatform/modular-account/blob/develop/audits/2024-01-31_spearbit_0e3fd1e.pdf) and [Quantstamp](https://github.com/alchemyplatform/modular-account/blob/develop/audits/2024-02-19_quantstamp_0e3fd1e.pdf). It is fully [open source](https://github.com/alchemyplatform/modular-account) and supported by a [Bug Bounty](https://hackerone.com/alchemyplatform) program. It is [deployed](/smart-contracts/modular-account/deployments) on multiple networks and their respective testnets.\\n\\n## Light Account\\n\\n[Light Account](/smart-contracts/light-account) is a collection of lightweight, production-ready [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) smart accounts. It builds on top of Ethereum Foundation's canonical [SimpleAccount](https://github.com/eth-infinitism/account-abstraction/blob/develop/contracts/samples/SimpleAccount.sol) to add key improvements such as ownership transfers, multiple owners, ERC-1271 signature support, and gas optimizations.\\n\\nIt is fully [open source](https://github.com/alchemyplatform/light-account) and has been audited [multiple](https://github.com/alchemyplatform/light-account/blob/develop/audits/2024-01-09_quantstamp_aa8196b.pdf) [times](https://github.com/alchemyplatform/light-account/blob/develop/audits/2024-04-26_quantstamp_93f46a2.pdf) by Quantstamp. It is [deployed](/smart-contracts/light-account/deployments) on multiple networks and their respective testnets.\\n\\n## Use your own Account\\n\\nAccount Kit also makes it easy to use your own smart account implementation. To learn how, see our guide on how to [use your own account](/smart-contracts/custom/using-your-own).\\n\",\"document\":[{\"href\":\"/smart-contracts/choosing-a-smart-account#choosing-a-smart-account\",\"html\":\"\\n\",\"id\":\"pages/smart-contracts/choosing-a-smart-account.mdx#choosing-a-smart-account\",\"isPage\":true,\"text\":\"\\n\",\"title\":\"Choosing a Smart Account\",\"titles\":[]},{\"href\":\"/smart-contracts/choosing-a-smart-account#what-is-a-smart-account\",\"html\":\"\\n

A smart account is an ERC-4337 smart account. You can use it to manage assets, execute transactions (known as UserOperations), and more. There are many different implementations of a smart account, including Modular Account and Light Account.

\\n\",\"id\":\"pages/smart-contracts/choosing-a-smart-account.mdx#what-is-a-smart-account\",\"isPage\":false,\"text\":\"\\nA smart account is an ERC-4337 smart account. You can use it to manage assets, execute transactions (known as UserOperations), and more. There are many different implementations of a smart account, including Modular Account and Light Account.\\n\",\"title\":\"What is a Smart Account?\",\"titles\":[\"Choosing a Smart Account\"]},{\"href\":\"/smart-contracts/choosing-a-smart-account#modular-account\",\"html\":\"\\n

Modular Account is an enterprise-grade smart contract account designed from the ground up for ERC-4337. It is highly secure, gas optimized, and endlessly customizable with ERC-6900 plugins. With our pre-built plugins, it supports multiple owners (1-of-n), multisig thresholds (m-of-n), and session keys with scoped permissions.

\\n

Modular Account is the first ERC-6900 account implementation, making it infinitely extensible with custom plugins. Plug and play from a selection of existing plugins, including session keys and multisig, or write your own to customize the account for your app. We have created three pre-built plugins available today: MultiOwnerPlugin, SessionKeyPlugin, and MultisigPlugin. We're actively building new plugins and look forward to what new plugins you create!

\\n

For most applications, we recommend using Modular Account. Suppose you have already deployed Light Account in the past. In that case, you can follow Upgrading to a Modular Account guide to easily upgrade your account from Light Account to Modular Account using Account Kit and unlock an ecosystem of plugins for your smart account stack.

\\n

Modular Account has been audited by both Spearbit and Quantstamp. It is fully open source and supported by a Bug Bounty program. It is deployed on multiple networks and their respective testnets.

\\n\",\"id\":\"pages/smart-contracts/choosing-a-smart-account.mdx#modular-account\",\"isPage\":false,\"text\":\"\\nModular Account is an enterprise-grade smart contract account designed from the ground up for ERC-4337. It is highly secure, gas optimized, and endlessly customizable with ERC-6900 plugins. With our pre-built plugins, it supports multiple owners (1-of-n), multisig thresholds (m-of-n), and session keys with scoped permissions.\\nModular Account is the first ERC-6900 account implementation, making it infinitely extensible with custom plugins. Plug and play from a selection of existing plugins, including session keys and multisig, or write your own to customize the account for your app. We have created three pre-built plugins available today: MultiOwnerPlugin, SessionKeyPlugin, and MultisigPlugin. We're actively building new plugins and look forward to what new plugins you create!\\nFor most applications, we recommend using Modular Account. Suppose you have already deployed Light Account in the past. In that case, you can follow Upgrading to a Modular Account guide to easily upgrade your account from Light Account to Modular Account using Account Kit and unlock an ecosystem of plugins for your smart account stack.\\nModular Account has been audited by both Spearbit and Quantstamp. It is fully open source and supported by a Bug Bounty program. It is deployed on multiple networks and their respective testnets.\\n\",\"title\":\"Modular Account\",\"titles\":[\"Choosing a Smart Account\"]},{\"href\":\"/smart-contracts/choosing-a-smart-account#light-account\",\"html\":\"\\n

Light Account is a collection of lightweight, production-ready ERC-4337 smart accounts. It builds on top of Ethereum Foundation's canonical SimpleAccount to add key improvements such as ownership transfers, multiple owners, ERC-1271 signature support, and gas optimizations.

\\n

It is fully open source and has been audited multiple times by Quantstamp. It is deployed on multiple networks and their respective testnets.

\\n\",\"id\":\"pages/smart-contracts/choosing-a-smart-account.mdx#light-account\",\"isPage\":false,\"text\":\"\\nLight Account is a collection of lightweight, production-ready ERC-4337 smart accounts. It builds on top of Ethereum Foundation's canonical SimpleAccount to add key improvements such as ownership transfers, multiple owners, ERC-1271 signature support, and gas optimizations.\\nIt is fully open source and has been audited multiple times by Quantstamp. It is deployed on multiple networks and their respective testnets.\\n\",\"title\":\"Light Account\",\"titles\":[\"Choosing a Smart Account\"]},{\"href\":\"/smart-contracts/choosing-a-smart-account#use-your-own-account\",\"html\":\"\\n

Account Kit also makes it easy to use your own smart account implementation. To learn how, see our guide on how to use your own account.

\",\"id\":\"pages/smart-contracts/choosing-a-smart-account.mdx#use-your-own-account\",\"isPage\":false,\"text\":\"\\nAccount Kit also makes it easy to use your own smart account implementation. To learn how, see our guide on how to use your own account.\",\"title\":\"Use your own Account\",\"titles\":[\"Choosing a Smart Account\"]}]}],[\"index.c0632a8022ee70245e01466af9ee944dd478134985532a1a4b8db24399a38b58\",{\"mdx\":\"---\\ntitle: Light Account • Deployments\\ndescription: Deployment addresses\\n---\\n\\n# Deployments\\n\\nThe following tables list the deployed factory and account implementation contract addresses for `LightAccount` and `MultiOwnerLightAccount` on different chains. Deployments for prior versions can be found in the [light-account](https://github.com/alchemyplatform/light-account/tree/develop/deployments) repo.\\n\\n## `LightAccount` (v2.0.0)\\n\\n| Chain | Factory Address | Account Implementation |\\n| ---------------- | -------------------------------------------- | -------------------------------------------- |\\n| Eth Mainnet | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Eth Sepolia | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Polygon Mainnet | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Polygon Amoy | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Optimism | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Optimism Sepolia | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Arbitrum | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Arbitrum Sepolia | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Base | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Base Sepolia | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Zora Mainnet | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Zora Sepolia | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Fraxtal Mainnet | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n| Fraxtal Sepolia | `0x0000000000400CdFef5E2714E63d8040b700BC24` | `0x8E8e658E22B12ada97B402fF0b044D6A325013C7` |\\n\\n## `LightAccount` (v1.1.0)\\n\\n| Chain | Factory Address | Account Implementation |\\n| ---------------- | -------------------------------------------- | -------------------------------------------- |\\n| Eth Mainnet | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Eth Sepolia | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Polygon Mainnet | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Polygon Amoy | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Optimism | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Optimism Sepolia | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Arbitrum | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Arbitrum Sepolia | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Base | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Base Sepolia | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Zora Mainnet | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Zora Sepolia | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Fraxtal Mainnet | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n| Fraxtal Sepolia | `0x00004EC70002a32400f8ae005A26081065620D20` | `0xae8c656ad28F2B59a196AB61815C16A0AE1c3cba` |\\n\\n## `MultiOwnerLightAccount` (v2.0.0)\\n\\n| Chain | Factory Address | Account Implementation |\\n| ---------------- | -------------------------------------------- | -------------------------------------------- |\\n| Eth Mainnet | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Eth Sepolia | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Polygon Mainnet | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Polygon Mumbai | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Polygon Amoy | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Optimism | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Optimism Sepolia | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Arbitrum | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Arbitrum Sepolia | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Base | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Base Sepolia | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Zora Mainnet | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Zora Sepolia | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Fraxtal Mainnet | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n| Fraxtal Sepolia | `0x000000000019d2Ee9F2729A65AfE20bb0020AefC` | `0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D` |\\n\",\"document\":[{\"href\":\"/smart-contracts/light-account/deployments#deployments\",\"html\":\"\\n

The following tables list the deployed factory and account implementation contract addresses for LightAccount and MultiOwnerLightAccount on different chains. Deployments for prior versions can be found in the light-account repo.

\\n\",\"id\":\"pages/smart-contracts/light-account/deployments.mdx#deployments\",\"isPage\":true,\"text\":\"\\nThe following tables list the deployed factory and account implementation contract addresses for LightAccount and MultiOwnerLightAccount on different chains. Deployments for prior versions can be found in the light-account repo.\\n\",\"title\":\"Deployments\",\"titles\":[]},{\"href\":\"/smart-contracts/light-account/deployments#lightaccount-v200\",\"html\":\"\\n
ChainFactory AddressAccount Implementation
Eth Mainnet0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Eth Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Polygon Mainnet0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Polygon Amoy0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Optimism0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Optimism Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Arbitrum0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Arbitrum Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Base0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Base Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Zora Mainnet0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Zora Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Fraxtal Mainnet0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
Fraxtal Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7
\\n\",\"id\":\"pages/smart-contracts/light-account/deployments.mdx#lightaccount-v200\",\"isPage\":false,\"text\":\"\\nChainFactory AddressAccount ImplementationEth Mainnet0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Eth Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Polygon Mainnet0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Polygon Amoy0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Optimism0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Optimism Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Arbitrum0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Arbitrum Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Base0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Base Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Zora Mainnet0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Zora Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Fraxtal Mainnet0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7Fraxtal Sepolia0x0000000000400CdFef5E2714E63d8040b700BC240x8E8e658E22B12ada97B402fF0b044D6A325013C7\\n\",\"title\":\"LightAccount (v2.0.0)\",\"titles\":[\"Deployments\"]},{\"href\":\"/smart-contracts/light-account/deployments#lightaccount-v110\",\"html\":\"\\n
ChainFactory AddressAccount Implementation
Eth Mainnet0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Eth Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Polygon Mainnet0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Polygon Amoy0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Optimism0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Optimism Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Arbitrum0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Arbitrum Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Base0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Base Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Zora Mainnet0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Zora Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Fraxtal Mainnet0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
Fraxtal Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba
\\n\",\"id\":\"pages/smart-contracts/light-account/deployments.mdx#lightaccount-v110\",\"isPage\":false,\"text\":\"\\nChainFactory AddressAccount ImplementationEth Mainnet0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaEth Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaPolygon Mainnet0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaPolygon Amoy0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaOptimism0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaOptimism Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaArbitrum0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaArbitrum Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaBase0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaBase Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaZora Mainnet0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaZora Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaFraxtal Mainnet0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cbaFraxtal Sepolia0x00004EC70002a32400f8ae005A26081065620D200xae8c656ad28F2B59a196AB61815C16A0AE1c3cba\\n\",\"title\":\"LightAccount (v1.1.0)\",\"titles\":[\"Deployments\"]},{\"href\":\"/smart-contracts/light-account/deployments#multiownerlightaccount-v200\",\"html\":\"\\n
ChainFactory AddressAccount Implementation
Eth Mainnet0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Eth Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Polygon Mainnet0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Polygon Mumbai0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Polygon Amoy0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Optimism0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Optimism Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Arbitrum0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Arbitrum Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Base0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Base Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Zora Mainnet0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Zora Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Fraxtal Mainnet0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
Fraxtal Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D
\",\"id\":\"pages/smart-contracts/light-account/deployments.mdx#multiownerlightaccount-v200\",\"isPage\":false,\"text\":\"\\nChainFactory AddressAccount ImplementationEth Mainnet0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DEth Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DPolygon Mainnet0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DPolygon Mumbai0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DPolygon Amoy0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DOptimism0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DOptimism Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DArbitrum0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DArbitrum Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DBase0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DBase Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DZora Mainnet0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DZora Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DFraxtal Mainnet0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823DFraxtal Sepolia0x000000000019d2Ee9F2729A65AfE20bb0020AefC0xd2c27F9eE8E4355f71915ffD5568cB3433b6823D\",\"title\":\"MultiOwnerLightAccount (v2.0.0)\",\"titles\":[\"Deployments\"]}]}],[\"index.90a8eb7b912606251049dfbac8008eba8b1897555a53c52581f971743d913677\",{\"mdx\":\"---\\ntitle: How to transfer ownership of a Light Account\\ndescription: Follow this guide to transfer ownership of a Light Account with\\n Account Kit, a vertically integrated stack for building apps that support\\n ERC-4337 and ERC-6900.\\n---\\n\\n# How to transfer ownership of `LightAccount`\\n\\nNot all smart account implementations support transferring the ownership (e.g. `SimpleAccount`). However, a number of the accounts in this guide and in Account Kit do, including our `LightAccount`! Let's see a few different ways we can transfer ownership of an Account (using `LightAccount` as an example).\\n\\n## Usage\\n\\n`LightAccount` exposes the following method which allows the existing owner to transfer ownership to a new owner address:\\n\\n```solidity\\nfunction transferOwnership(address newOwner) public virtual onlyOwner\\n```\\n\\nThere a number of ways you can call this method using Account Kit.\\n\\n### 1. Using `transferOwnership` client action\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { lightAccountClient } from \\\"./client\\\";\\nimport { createLightAccountClient } from \\\"@account-kit/smart-contracts\\\";\\n\\n// this will return the signer of the smart account you want to transfer ownerhip to\\nconst newOwner = LocalAccountSigner.mnemonicToAccountSigner(NEW_OWNER_MNEMONIC);\\nconst accountAddress = lightAccountClient.getAddress();\\n\\n// [!code focus:99]\\nconst hash = lightAccountClient.transferOwnership({\\n newOwner,\\n waitForTxn: true,\\n});\\n\\n// after transaction is mined on the network,\\n// create a new light account client for the transferred Light Account\\nconst transferredClient = await createLightAccountClient({\\n transport: custom(smartAccountClient),\\n chain: smartAccountClient.chain,\\n signer: newOwner,\\n accountAddress, // NOTE: you MUST specify the original smart account address to connect using the new owner/signer\\n version: \\\"v2.0.0\\\", // NOTE: if the version of the light account is not v2.0.0, it must be specified here\\n});\\n```\\n\\n```ts [client.ts] twoslash filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/light-account-client.ts]\\n```\\n\\n:::\\n\\nSince `@alchemy/aa-accounts` exports a `LightAccount` ABI, the above approach makes it easy to transfer ownership. That said, you can also directly call `sendUserOperation` to execute the ownership transfer. As you will see below, however, it is a bit verbose:\\n\\n### 2. Using `sendUserOperation`\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { encodeFunctionData } from \\\"viem\\\";\\nimport { lightAccountClient } from \\\"./client\\\";\\n\\n// this will return the address of the smart account you want to transfer ownerhip of\\nconst accountAddress = lightAccountClient.getAddress();\\nconst newOwner = \\\"0x...\\\"; // the address of the new owner\\n\\n// [!code focus:99]\\nconst result = await lightAccountClient.sendUserOperation({\\n to: accountAddress,\\n data: lightAccountClient.encodeTransferOwnership(newOwner),\\n});\\n// wait for txn with UO to be mined\\nawait lightAccountClient.waitForUserOperationTransaction(result);\\n```\\n\\n```ts [client.ts] twoslash filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/light-account-client.ts]\\n```\\n\\n:::\\n\\nSee the [`LightAccount`](/smart-contracts/light-account/) docs for more details about our `LightAccount implementation.\\n\",\"document\":[{\"href\":\"/smart-contracts/transfer-ownership/light-account#how-to-transfer-ownership-of-lightaccount\",\"html\":\"\\n

Not all smart account implementations support transferring the ownership (e.g. SimpleAccount). However, a number of the accounts in this guide and in Account Kit do, including our LightAccount! Let's see a few different ways we can transfer ownership of an Account (using LightAccount as an example).

\\n\",\"id\":\"pages/smart-contracts/transfer-ownership/light-account.mdx#how-to-transfer-ownership-of-lightaccount\",\"isPage\":true,\"text\":\"\\nNot all smart account implementations support transferring the ownership (e.g. SimpleAccount). However, a number of the accounts in this guide and in Account Kit do, including our LightAccount! Let's see a few different ways we can transfer ownership of an Account (using LightAccount as an example).\\n\",\"title\":\"How to transfer ownership of LightAccount\",\"titles\":[]},{\"href\":\"/smart-contracts/transfer-ownership/light-account#usage\",\"html\":\"\\n

LightAccount exposes the following method which allows the existing owner to transfer ownership to a new owner address:

\\n
function transferOwnership(address newOwner) public virtual onlyOwner
\\n

There a number of ways you can call this method using Account Kit.

\\n\",\"id\":\"pages/smart-contracts/transfer-ownership/light-account.mdx#usage\",\"isPage\":false,\"text\":\"\\nLightAccount exposes the following method which allows the existing owner to transfer ownership to a new owner address:\\nfunction transferOwnership(address newOwner) public virtual onlyOwner\\nThere a number of ways you can call this method using Account Kit.\\n\",\"title\":\"Usage\",\"titles\":[\"How to transfer ownership of LightAccount\"]},{\"href\":\"/smart-contracts/transfer-ownership/light-account#1-using-transferownership-client-action\",\"html\":\"\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain: sepolia,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain: sepolia,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { lightAccountClient } from "./client";\\nimport { createLightAccountClient } from "@account-kit/smart-contracts";\\n \\n// this will return the signer of the smart account you want to transfer ownerhip to\\nconst newOwner = LocalAccountSigner.mnemonicToAccountSigner(NEW_OWNER_MNEMONIC);\\nconst accountAddress = lightAccountClient.getAddress();\\n \\n\\nconst hash = lightAccountClient.transferOwnership({\\n  newOwner,\\n  waitForTxn: true,\\n});\\n \\n// after transaction is mined on the network,\\n// create a new light account client for the transferred Light Account\\nconst transferredClient = await createLightAccountClient({\\n  transport: custom(smartAccountClient),\\n  chain: smartAccountClient.chain,\\n  signer: newOwner,\\n  accountAddress, // NOTE: you MUST specify the original smart account address to connect using the new owner/signer\\n  version: "v2.0.0", // NOTE: if the version of the light account is not v2.0.0, it must be specified here\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain: sepolia,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n

Since @alchemy/aa-accounts exports a LightAccount ABI, the above approach makes it easy to transfer ownership. That said, you can also directly call sendUserOperation to execute the ownership transfer. As you will see below, however, it is a bit verbose:

\\n\",\"id\":\"pages/smart-contracts/transfer-ownership/light-account.mdx#1-using-transferownership-client-action\",\"isPage\":false,\"text\":\"\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { lightAccountClient } from "./client";\\nimport { createLightAccountClient } from "@account-kit/smart-contracts";\\n \\n// this will return the signer of the smart account you want to transfer ownerhip to\\nconst newOwner = LocalAccountSigner.mnemonicToAccountSigner(NEW_OWNER_MNEMONIC);\\nconst accountAddress = lightAccountClient.getAddress();\\n \\n\\nconst hash = lightAccountClient.transferOwnership({\\n newOwner,\\n waitForTxn: true,\\n});\\n \\n// after transaction is mined on the network,\\n// create a new light account client for the transferred Light Account\\nconst transferredClient = await createLightAccountClient({\\n transport: custom(smartAccountClient),\\n chain: smartAccountClient.chain,\\n signer: newOwner,\\n accountAddress, // NOTE: you MUST specify the original smart account address to connect using the new owner/signer\\n version: "v2.0.0", // NOTE: if the version of the light account is not v2.0.0, it must be specified here\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n});\\nSince @alchemy/aa-accounts exports a LightAccount ABI, the above approach makes it easy to transfer ownership. That said, you can also directly call sendUserOperation to execute the ownership transfer. As you will see below, however, it is a bit verbose:\\n\",\"title\":\"1. Using transferOwnership client action\",\"titles\":[\"How to transfer ownership of LightAccount\",\"Usage\"]},{\"href\":\"/smart-contracts/transfer-ownership/light-account#2-using-senduseroperation\",\"html\":\"\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain: sepolia,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain: sepolia,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { encodeFunctionData } from "viem";\\nimport { lightAccountClient } from "./client";\\n \\n// this will return the address of the smart account you want to transfer ownerhip of\\nconst accountAddress = lightAccountClient.getAddress();\\nconst newOwner = "0x..."; // the address of the new owner\\n \\n\\nconst result = await lightAccountClient.sendUserOperation({\\n  to: accountAddress,\\n  data: lightAccountClient.encodeTransferOwnership(newOwner),\\n});\\n// wait for txn with UO to be mined\\nawait lightAccountClient.waitForUserOperationTransaction(result);
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain: sepolia,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n

See the LightAccount docs for more details about our `LightAccount implementation.

\",\"id\":\"pages/smart-contracts/transfer-ownership/light-account.mdx#2-using-senduseroperation\",\"isPage\":false,\"text\":\"\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { encodeFunctionData } from "viem";\\nimport { lightAccountClient } from "./client";\\n \\n// this will return the address of the smart account you want to transfer ownerhip of\\nconst accountAddress = lightAccountClient.getAddress();\\nconst newOwner = "0x..."; // the address of the new owner\\n \\n\\nconst result = await lightAccountClient.sendUserOperation({\\n to: accountAddress,\\n data: lightAccountClient.encodeTransferOwnership(newOwner),\\n});\\n// wait for txn with UO to be mined\\nawait lightAccountClient.waitForUserOperationTransaction(result);import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n});\\nSee the LightAccount docs for more details about our `LightAccount implementation.\",\"title\":\"2. Using sendUserOperation\",\"titles\":[\"How to transfer ownership of LightAccount\",\"Usage\"]}]}],[\"index.8679b8ab5d69b5432e9dd83a45310f29c7a7e7e71ff3b9305bac000f154470f4\",{\"mdx\":\"---\\ntitle: Using your own Smart Account\\ndescription: Follow this guide to use any smart account implementation you want\\n with Account Kit, a vertically integrated stack for building apps that support\\n ERC-4337 and ERC-6900.\\n---\\n\\n# Using your own Smart Account\\n\\nYou are not limited to the accounts defined in `@account-kit/smart-contracts`. The `SmartAccountClient` can be used with any smart account because it only relies on the `SmartContractAccount` interface. This means you can use your own smart account implementation with Account Kit.\\n\\n```ts [my-account.ts] twoslash\\nimport { getVersion060EntryPoint, toSmartContractAccount } from \\\"@aa-sdk/core\\\";\\nimport { http, type SignableMessage } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst myAccount = await toSmartContractAccount({\\n /// REQUIRED PARAMS ///\\n source: \\\"MyAccount\\\",\\n transport: http(\\\"RPC_URL\\\"),\\n chain: sepolia,\\n // The EntryPointDef that your account is compatible with\\n entryPoint: getVersion060EntryPoint(sepolia),\\n // This should return a concatenation of your `factoryAddress` and the `callData` for your factory's create account method\\n getAccountInitCode: () => \\\"0x{factoryAddress}{callData}\\\",\\n // an invalid signature that doesn't cause your account to revert during validation\\n getDummySignature: () => \\\"0x1234...\\\",\\n // given a UO in the form of {target, data, value} should output the calldata for calling your contract's execution method\\n encodeExecute: (uo) => \\\"....\\\",\\n signMessage: ({ message }: SignableMessage) => \\\"0x...\\\",\\n signTypedData: (typedData) => \\\"0x000\\\",\\n\\n /// OPTIONAL PARAMS ///\\n // if you already know your account's address, pass that in here to avoid generating a new counterfactual\\n accountAddress: Address,\\n // if your account supports batching, this should take an array of UOs and return the calldata for calling your contract's batchExecute method\\n encodeBatchExecute: (uos) => \\\"0x...\\\",\\n // if your contract expects a different signing scheme than the default signMessage scheme, you can override that here\\n signUserOperationHash: (hash) => \\\"0x...\\\",\\n // allows you to define the calldata for upgrading your account\\n encodeUpgradeToAndCall: (params) => \\\"0x...\\\",\\n});\\n```\\n\\nTo use your account, you will need to pass it into a `SmartAccountClient`.\\n\\n```ts twoslash\\nimport { createAlchemySmartAccountClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@aa-sdk/core\\\";\\n\\nconst client = createAlchemySmartAccountClient({\\n // created above\\n account: myAccount,\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n});\\n```\\n\\n## `LightSmartContractAccount` as an Example\\n\\nWe have built an extension of the eth-infinitism `SimpleAccount` called [LightAccount.sol](https://github.com/alchemyplatform/light-account/blob/main/src/LightAccount.sol). You can learn more about Light Account in the [Light Account documentation](/smart-contracts/light-account/).\\n\\nWe provide an implementation of `SmartContractAccount` that works with `LightAccount.sol`, which can be used as an example of how to implement your own Smart Contract Account:\\n:::details[LightSmartContractAccount]\\n\\n```ts twoslash\\n// [!include ~/../account-kit/smart-contracts/src/light-account/accounts/account.ts]\\n```\\n\\n:::\\n\\n## The `toSmartContractAccount` Method\\n\\nFor your reference, this is the definition of the `toSmartContractAccount` interface as pulled from the source code:\\n\\n:::details SmartContractAccount\\n\\n```ts twoslash\\n// [!include ~/../aa-sdk/core/src/account/smartContractAccount.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/smart-contracts/custom/using-your-own#using-your-own-smart-account\",\"html\":\"\\n

You are not limited to the accounts defined in @account-kit/smart-contracts. The SmartAccountClient can be used with any smart account because it only relies on the SmartContractAccount interface. This means you can use your own smart account implementation with Account Kit.

\\n
import { getVersion060EntryPoint, toSmartContractAccount } from "@aa-sdk/core";\\nimport { http, type SignableMessage } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst myAccount = await toSmartContractAccount({\\n  /// REQUIRED PARAMS ///\\n  source: "MyAccount",\\n  transport: http("RPC_URL"),\\n  chain: sepolia,\\n  // The EntryPointDef that your account is compatible with\\n  entryPoint: getVersion060EntryPoint(sepolia),\\n  // This should return a concatenation of your `factoryAddress` and the `callData` for your factory's create account method\\n  getAccountInitCode: () => "0x{factoryAddress}{callData}",\\n  // an invalid signature that doesn't cause your account to revert during validation\\n  getDummySignature: () => "0x1234...",\\n  // given a UO in the form of {target, data, value} should output the calldata for calling your contract's execution method\\n  encodeExecute: (uo) => "....",\\n  signMessage: ({ message }: SignableMessage) => "0x...",\\n  signTypedData: (typedData) => "0x000",\\n \\n  /// OPTIONAL PARAMS ///\\n  // if you already know your account's address, pass that in here to avoid generating a new counterfactual\\n  accountAddress: Address,\\n  // if your account supports batching, this should take an array of UOs and return the calldata for calling your contract's batchExecute method\\n  encodeBatchExecute: (uos) => "0x...",\\n  // if your contract expects a different signing scheme than the default signMessage scheme, you can override that here\\n  signUserOperationHash: (hash) => "0x...",\\n  // allows you to define the calldata for upgrading your account\\n  encodeUpgradeToAndCall: (params) => "0x...",\\n});
\\n

To use your account, you will need to pass it into a SmartAccountClient.

\\n
import { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { sepolia } from "@aa-sdk/core";\\n \\nconst client = createAlchemySmartAccountClient({\\n  // created above\\n  account: myAccount,\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n});
\\n\",\"id\":\"pages/smart-contracts/custom/using-your-own.mdx#using-your-own-smart-account\",\"isPage\":true,\"text\":\"\\nYou are not limited to the accounts defined in @account-kit/smart-contracts. The SmartAccountClient can be used with any smart account because it only relies on the SmartContractAccount interface. This means you can use your own smart account implementation with Account Kit.\\nimport { getVersion060EntryPoint, toSmartContractAccount } from "@aa-sdk/core";\\nimport { http, type SignableMessage } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst myAccount = await toSmartContractAccount({\\n /// REQUIRED PARAMS ///\\n source: "MyAccount",\\n transport: http("RPC_URL"),\\n chain: sepolia,\\n // The EntryPointDef that your account is compatible with\\n entryPoint: getVersion060EntryPoint(sepolia),\\n // This should return a concatenation of your `factoryAddress` and the `callData` for your factory's create account method\\n getAccountInitCode: () => "0x{factoryAddress}{callData}",\\n // an invalid signature that doesn't cause your account to revert during validation\\n getDummySignature: () => "0x1234...",\\n // given a UO in the form of {target, data, value} should output the calldata for calling your contract's execution method\\n encodeExecute: (uo) => "....",\\n signMessage: ({ message }: SignableMessage) => "0x...",\\n signTypedData: (typedData) => "0x000",\\n \\n /// OPTIONAL PARAMS ///\\n // if you already know your account's address, pass that in here to avoid generating a new counterfactual\\n accountAddress: Address,\\n // if your account supports batching, this should take an array of UOs and return the calldata for calling your contract's batchExecute method\\n encodeBatchExecute: (uos) => "0x...",\\n // if your contract expects a different signing scheme than the default signMessage scheme, you can override that here\\n signUserOperationHash: (hash) => "0x...",\\n // allows you to define the calldata for upgrading your account\\n encodeUpgradeToAndCall: (params) => "0x...",\\n});\\nTo use your account, you will need to pass it into a SmartAccountClient.\\nimport { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { sepolia } from "@aa-sdk/core";\\n \\nconst client = createAlchemySmartAccountClient({\\n // created above\\n account: myAccount,\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n});\\n\",\"title\":\"Using your own Smart Account\",\"titles\":[]},{\"href\":\"/smart-contracts/custom/using-your-own#lightsmartcontractaccount-as-an-example\",\"html\":\"\\n

We have built an extension of the eth-infinitism SimpleAccount called LightAccount.sol. You can learn more about Light Account in the Light Account documentation.

\\n

We provide an implementation of SmartContractAccount that works with LightAccount.sol, which can be used as an example of how to implement your own Smart Contract Account:

\\n
LightSmartContractAccount
import {\\n  createBundlerClient,\\n  getAccountAddress,\\n  getEntryPoint,\\n  type Address,\\n  type EntryPointDef,\\n  type SmartAccountSigner,\\n} from "@aa-sdk/core";\\nimport {\\n  concatHex,\\n  encodeFunctionData,\\n  type Chain,\\n  type Hex,\\n  type Transport,\\n} from "viem";\\nimport { LightAccountAbi_v1 } from "../abis/LightAccountAbi_v1.js";\\nimport { LightAccountAbi_v2 } from "../abis/LightAccountAbi_v2.js";\\nimport { LightAccountFactoryAbi_v1 } from "../abis/LightAccountFactoryAbi_v1.js";\\nimport { LightAccountFactoryAbi_v2 } from "../abis/LightAccountFactoryAbi_v2.js";\\nimport type {\\n  LightAccountEntryPointVersion,\\n  LightAccountVersion,\\n} from "../types.js";\\nimport {\\n  AccountVersionRegistry,\\n  LightAccountUnsupported1271Factories,\\n  defaultLightAccountVersion,\\n  getDefaultLightAccountFactoryAddress,\\n} from "../utils.js";\\nimport {\\n  createLightAccountBase,\\n  type CreateLightAccountBaseParams,\\n  type LightAccountBase,\\n} from "./base.js";\\n \\nexport type LightAccount<\\n  TSigner extends SmartAccountSigner = SmartAccountSigner,\\n  TLightAccountVersion extends LightAccountVersion<"LightAccount"> = LightAccountVersion<"LightAccount">\\n> = LightAccountBase<TSigner, "LightAccount", TLightAccountVersion> & {\\n  encodeTransferOwnership: (newOwner: Address) => Hex;\\n  getOwnerAddress: () => Promise<Address>;\\n};\\n \\nexport type CreateLightAccountParams<\\n  TTransport extends Transport = Transport,\\n  TSigner extends SmartAccountSigner = SmartAccountSigner,\\n  TLightAccountVersion extends LightAccountVersion<"LightAccount"> = LightAccountVersion<"LightAccount">\\n> = Omit<\\n  CreateLightAccountBaseParams<\\n    "LightAccount",\\n    TLightAccountVersion,\\n    TTransport,\\n    TSigner\\n  >,\\n  | "getAccountInitCode"\\n  | "entryPoint"\\n  | "version"\\n  | "abi"\\n  | "accountAddress"\\n  | "type"\\n> & {\\n  salt?: bigint;\\n  initCode?: Hex;\\n  accountAddress?: Address;\\n  factoryAddress?: Address;\\n  version?: TLightAccountVersion;\\n  entryPoint?: EntryPointDef<\\n    LightAccountEntryPointVersion<"LightAccount", TLightAccountVersion>,\\n    Chain\\n  >;\\n};\\n \\nexport async function createLightAccount<\\n  TTransport extends Transport = Transport,\\n  TSigner extends SmartAccountSigner = SmartAccountSigner,\\n  TLightAccountVersion extends LightAccountVersion<"LightAccount"> = "v2.0.0"\\n>(\\n  config: CreateLightAccountParams<TTransport, TSigner, TLightAccountVersion>\\n): Promise<LightAccount<TSigner, TLightAccountVersion>>;\\n \\n/**\\n * Creates a light account based on the provided parameters such as transport, chain, signer, init code, and more. Ensures that an account is configured and returned with various capabilities, such as transferring ownership and retrieving the owner's address.\\n *\\n * @example\\n * ```ts\\n * import { createLightAccount } from "@account-kit/smart-contracts";\\n * import { LocalAccountSigner } from "@aa-sdk/core";\\n * import { sepolia } from "viem/chains";\\n * import { http, generatePrivateKey } from "viem"\\n *\\n * const account = await createLightAccount({\\n *  chain: sepolia,\\n *  transport: http("RPC_URL"),\\n *  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey())\\n * });\\n * ```\\n *\\n * @param {CreateLightAccountParams} config The parameters for creating a light account\\n * @returns {Promise<LightAccount>} A promise that resolves to a `LightAccount` object containing the created account information and methods\\n */\\nexport async function createLightAccount({\\n  transport,\\n  chain,\\n  signer,\\n  initCode,\\n  version = defaultLightAccountVersion(),\\n  entryPoint = getEntryPoint(chain, {\\n    version: AccountVersionRegistry["LightAccount"][version]\\n      .entryPointVersion as any,\\n  }),\\n  accountAddress,\\n  factoryAddress = getDefaultLightAccountFactoryAddress(chain, version),\\n  salt: salt_ = 0n,\\n}: CreateLightAccountParams): Promise<LightAccount> {\\n  const client = createBundlerClient({\\n    transport,\\n    chain,\\n  });\\n \\n  const accountAbi =\\n    version === "v2.0.0" ? LightAccountAbi_v2 : LightAccountAbi_v1;\\n  const factoryAbi =\\n    version === "v2.0.0"\\n      ? LightAccountFactoryAbi_v1\\n      : LightAccountFactoryAbi_v2;\\n \\n  const getAccountInitCode = async () => {\\n    if (initCode) return initCode;\\n \\n    const salt = LightAccountUnsupported1271Factories.has(\\n      factoryAddress.toLowerCase() as Address\\n    )\\n      ? 0n\\n      : salt_;\\n \\n    return concatHex([\\n      factoryAddress,\\n      encodeFunctionData({\\n        abi: factoryAbi,\\n        functionName: "createAccount",\\n        args: [await signer.getAddress(), salt],\\n      }),\\n    ]);\\n  };\\n \\n  const address = await getAccountAddress({\\n    client,\\n    entryPoint,\\n    accountAddress,\\n    getAccountInitCode,\\n  });\\n \\n  const account = await createLightAccountBase<\\n    "LightAccount",\\n    LightAccountVersion<"LightAccount">,\\n    Transport,\\n    SmartAccountSigner\\n  >({\\n    transport,\\n    chain,\\n    signer,\\n    abi: accountAbi,\\n    type: "LightAccount",\\n    version,\\n    entryPoint,\\n    accountAddress: address,\\n    getAccountInitCode,\\n  });\\n \\n  return {\\n    ...account,\\n \\n    encodeTransferOwnership: (newOwner: Address) => {\\n      return encodeFunctionData({\\n        abi: accountAbi,\\n        functionName: "transferOwnership",\\n        args: [newOwner],\\n      });\\n    },\\n    async getOwnerAddress(): Promise<Address> {\\n      const callResult = await client.readContract({\\n        address,\\n        abi: accountAbi,\\n        functionName: "owner",\\n      });\\n \\n      if (callResult == null) {\\n        throw new Error("could not get on-chain owner");\\n      }\\n \\n      return callResult;\\n    },\\n  };\\n}
\\n\",\"id\":\"pages/smart-contracts/custom/using-your-own.mdx#lightsmartcontractaccount-as-an-example\",\"isPage\":false,\"text\":\"\\nWe have built an extension of the eth-infinitism SimpleAccount called LightAccount.sol. You can learn more about Light Account in the Light Account documentation.\\nWe provide an implementation of SmartContractAccount that works with LightAccount.sol, which can be used as an example of how to implement your own Smart Contract Account:\\nLightSmartContractAccountimport {\\n createBundlerClient,\\n getAccountAddress,\\n getEntryPoint,\\n type Address,\\n type EntryPointDef,\\n type SmartAccountSigner,\\n} from "@aa-sdk/core";\\nimport {\\n concatHex,\\n encodeFunctionData,\\n type Chain,\\n type Hex,\\n type Transport,\\n} from "viem";\\nimport { LightAccountAbi_v1 } from "../abis/LightAccountAbi_v1.js";\\nimport { LightAccountAbi_v2 } from "../abis/LightAccountAbi_v2.js";\\nimport { LightAccountFactoryAbi_v1 } from "../abis/LightAccountFactoryAbi_v1.js";\\nimport { LightAccountFactoryAbi_v2 } from "../abis/LightAccountFactoryAbi_v2.js";\\nimport type {\\n LightAccountEntryPointVersion,\\n LightAccountVersion,\\n} from "../types.js";\\nimport {\\n AccountVersionRegistry,\\n LightAccountUnsupported1271Factories,\\n defaultLightAccountVersion,\\n getDefaultLightAccountFactoryAddress,\\n} from "../utils.js";\\nimport {\\n createLightAccountBase,\\n type CreateLightAccountBaseParams,\\n type LightAccountBase,\\n} from "./base.js";\\n \\nexport type LightAccount<\\n TSigner extends SmartAccountSigner = SmartAccountSigner,\\n TLightAccountVersion extends LightAccountVersion<"LightAccount"> = LightAccountVersion<"LightAccount">\\n> = LightAccountBase<TSigner, "LightAccount", TLightAccountVersion> & {\\n encodeTransferOwnership: (newOwner: Address) => Hex;\\n getOwnerAddress: () => Promise<Address>;\\n};\\n \\nexport type CreateLightAccountParams<\\n TTransport extends Transport = Transport,\\n TSigner extends SmartAccountSigner = SmartAccountSigner,\\n TLightAccountVersion extends LightAccountVersion<"LightAccount"> = LightAccountVersion<"LightAccount">\\n> = Omit<\\n CreateLightAccountBaseParams<\\n "LightAccount",\\n TLightAccountVersion,\\n TTransport,\\n TSigner\\n >,\\n | "getAccountInitCode"\\n | "entryPoint"\\n | "version"\\n | "abi"\\n | "accountAddress"\\n | "type"\\n> & {\\n salt?: bigint;\\n initCode?: Hex;\\n accountAddress?: Address;\\n factoryAddress?: Address;\\n version?: TLightAccountVersion;\\n entryPoint?: EntryPointDef<\\n LightAccountEntryPointVersion<"LightAccount", TLightAccountVersion>,\\n Chain\\n >;\\n};\\n \\nexport async function createLightAccount<\\n TTransport extends Transport = Transport,\\n TSigner extends SmartAccountSigner = SmartAccountSigner,\\n TLightAccountVersion extends LightAccountVersion<"LightAccount"> = "v2.0.0"\\n>(\\n config: CreateLightAccountParams<TTransport, TSigner, TLightAccountVersion>\\n): Promise<LightAccount<TSigner, TLightAccountVersion>>;\\n \\n/**\\n * Creates a light account based on the provided parameters such as transport, chain, signer, init code, and more. Ensures that an account is configured and returned with various capabilities, such as transferring ownership and retrieving the owner's address.\\n *\\n * @example\\n * ```ts\\n * import { createLightAccount } from "@account-kit/smart-contracts";\\n * import { LocalAccountSigner } from "@aa-sdk/core";\\n * import { sepolia } from "viem/chains";\\n * import { http, generatePrivateKey } from "viem"\\n *\\n * const account = await createLightAccount({\\n * chain: sepolia,\\n * transport: http("RPC_URL"),\\n * signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey())\\n * });\\n * ```\\n *\\n * @param {CreateLightAccountParams} config The parameters for creating a light account\\n * @returns {Promise<LightAccount>} A promise that resolves to a `LightAccount` object containing the created account information and methods\\n */\\nexport async function createLightAccount({\\n transport,\\n chain,\\n signer,\\n initCode,\\n version = defaultLightAccountVersion(),\\n entryPoint = getEntryPoint(chain, {\\n version: AccountVersionRegistry["LightAccount"][version]\\n .entryPointVersion as any,\\n }),\\n accountAddress,\\n factoryAddress = getDefaultLightAccountFactoryAddress(chain, version),\\n salt: salt_ = 0n,\\n}: CreateLightAccountParams): Promise<LightAccount> {\\n const client = createBundlerClient({\\n transport,\\n chain,\\n });\\n \\n const accountAbi =\\n version === "v2.0.0" ? LightAccountAbi_v2 : LightAccountAbi_v1;\\n const factoryAbi =\\n version === "v2.0.0"\\n ? LightAccountFactoryAbi_v1\\n : LightAccountFactoryAbi_v2;\\n \\n const getAccountInitCode = async () => {\\n if (initCode) return initCode;\\n \\n const salt = LightAccountUnsupported1271Factories.has(\\n factoryAddress.toLowerCase() as Address\\n )\\n ? 0n\\n : salt_;\\n \\n return concatHex([\\n factoryAddress,\\n encodeFunctionData({\\n abi: factoryAbi,\\n functionName: "createAccount",\\n args: [await signer.getAddress(), salt],\\n }),\\n ]);\\n };\\n \\n const address = await getAccountAddress({\\n client,\\n entryPoint,\\n accountAddress,\\n getAccountInitCode,\\n });\\n \\n const account = await createLightAccountBase<\\n "LightAccount",\\n LightAccountVersion<"LightAccount">,\\n Transport,\\n SmartAccountSigner\\n >({\\n transport,\\n chain,\\n signer,\\n abi: accountAbi,\\n type: "LightAccount",\\n version,\\n entryPoint,\\n accountAddress: address,\\n getAccountInitCode,\\n });\\n \\n return {\\n ...account,\\n \\n encodeTransferOwnership: (newOwner: Address) => {\\n return encodeFunctionData({\\n abi: accountAbi,\\n functionName: "transferOwnership",\\n args: [newOwner],\\n });\\n },\\n async getOwnerAddress(): Promise<Address> {\\n const callResult = await client.readContract({\\n address,\\n abi: accountAbi,\\n functionName: "owner",\\n });\\n \\n if (callResult == null) {\\n throw new Error("could not get on-chain owner");\\n }\\n \\n return callResult;\\n },\\n };\\n}\\n\",\"title\":\"LightSmartContractAccount as an Example\",\"titles\":[\"Using your own Smart Account\"]},{\"href\":\"/smart-contracts/custom/using-your-own#the-tosmartcontractaccount-method\",\"html\":\"\\n

For your reference, this is the definition of the toSmartContractAccount interface as pulled from the source code:

\\n

:::details SmartContractAccount

\\n
import {\\n  getContract,\\n  hexToBytes,\\n  trim,\\n  type Address,\\n  type Chain,\\n  type CustomSource,\\n  type Hex,\\n  type LocalAccount,\\n  type PublicClient,\\n  type SignableMessage,\\n  type Transport,\\n  type TypedData,\\n  type TypedDataDefinition,\\n} from "viem";\\nimport { toAccount } from "viem/accounts";\\nimport { createBundlerClient } from "../client/bundlerClient.js";\\nimport type {\\n  EntryPointDef,\\n  EntryPointRegistryBase,\\n  EntryPointVersion,\\n} from "../entrypoint/types.js";\\nimport {\\n  BatchExecutionNotSupportedError,\\n  FailedToGetStorageSlotError,\\n  GetCounterFactualAddressError,\\n  SignTransactionNotSupportedError,\\n  UpgradesNotSupportedError,\\n} from "../errors/account.js";\\nimport { InvalidRpcUrlError } from "../errors/client.js";\\nimport { InvalidEntryPointError } from "../errors/entrypoint.js";\\nimport { Logger } from "../logger.js";\\nimport type { SmartAccountSigner } from "../signer/types.js";\\nimport { wrapSignatureWith6492 } from "../signer/utils.js";\\nimport type { NullAddress } from "../types.js";\\nimport type { IsUndefined } from "../utils/types.js";\\n \\nexport type AccountOp = {\\n  target: Address;\\n  value?: bigint;\\n  data: Hex | "0x";\\n};\\n \\nexport enum DeploymentState {\\n  UNDEFINED = "0x0",\\n  NOT_DEPLOYED = "0x1",\\n  DEPLOYED = "0x2",\\n}\\n \\nexport type GetEntryPointFromAccount<\\n  TAccount extends SmartContractAccount | undefined,\\n  TAccountOverride extends SmartContractAccount = SmartContractAccount\\n> = GetAccountParameter<\\n  TAccount,\\n  TAccountOverride\\n> extends SmartContractAccount<string, infer TEntryPointVersion>\\n  ? TEntryPointVersion\\n  : EntryPointVersion;\\n \\nexport type GetAccountParameter<\\n  TAccount extends SmartContractAccount | undefined =\\n    | SmartContractAccount\\n    | undefined,\\n  TAccountOverride extends SmartContractAccount = SmartContractAccount\\n> = IsUndefined<TAccount> extends true\\n  ? { account: TAccountOverride }\\n  : { account?: TAccountOverride };\\n \\nexport type UpgradeToAndCallParams = {\\n  upgradeToAddress: Address;\\n  upgradeToInitData: Hex;\\n};\\n \\nexport type SmartContractAccountWithSigner<\\n  Name extends string = string,\\n  TSigner extends SmartAccountSigner = SmartAccountSigner,\\n  TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = SmartContractAccount<Name, TEntryPointVersion> & {\\n  getSigner: () => TSigner;\\n};\\n \\n/**\\n * Determines if the given SmartContractAccount has a signer associated with it.\\n *\\n * @example\\n * ```ts\\n * import { toSmartContractAccount } from "@aa-sdk/core";\\n *\\n * const account = await toSmartContractAccount(...);\\n *\\n * console.log(isSmartAccountWithSigner(account)); // false: the base account does not have a publicly accessible signer\\n * ```\\n *\\n * @param {SmartContractAccount} account The account to check.\\n * @returns {boolean} true if the account has a signer, otherwise false.\\n */\\nexport const isSmartAccountWithSigner = (\\n  account: SmartContractAccount\\n): account is SmartContractAccountWithSigner => {\\n  return "getSigner" in account;\\n};\\n \\nexport type SmartContractAccount<\\n  Name extends string = string,\\n  TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = LocalAccount<Name> & {\\n  source: Name;\\n  getDummySignature: () => Hex | Promise<Hex>;\\n  encodeExecute: (tx: AccountOp) => Promise<Hex>;\\n  encodeBatchExecute: (txs: AccountOp[]) => Promise<Hex>;\\n  signUserOperationHash: (uoHash: Hex) => Promise<Hex>;\\n  signMessageWith6492: (params: { message: SignableMessage }) => Promise<Hex>;\\n  signTypedDataWith6492: <\\n    const typedData extends TypedData | Record<string, unknown>,\\n    primaryType extends keyof typedData | "EIP712Domain" = keyof typedData\\n  >(\\n    typedDataDefinition: TypedDataDefinition<typedData, primaryType>\\n  ) => Promise<Hex>;\\n  encodeUpgradeToAndCall: (params: UpgradeToAndCallParams) => Promise<Hex>;\\n  getNonce(nonceKey?: bigint): Promise<bigint>;\\n  getInitCode: () => Promise<Hex>;\\n  isAccountDeployed: () => Promise<boolean>;\\n  getFactoryAddress: () => Promise<Address>;\\n  getFactoryData: () => Promise<Hex>;\\n  getEntryPoint: () => EntryPointDef<TEntryPointVersion>;\\n  getImplementationAddress: () => Promise<NullAddress | Address>;\\n};\\n \\nexport interface AccountEntryPointRegistry<Name extends string = string>\\n  extends EntryPointRegistryBase<\\n    SmartContractAccount<Name, EntryPointVersion>\\n  > {\\n  "0.6.0": SmartContractAccount<Name, "0.6.0">;\\n  "0.7.0": SmartContractAccount<Name, "0.7.0">;\\n}\\n \\nexport type ToSmartContractAccountParams<\\n  Name extends string = string,\\n  TTransport extends Transport = Transport,\\n  TChain extends Chain = Chain,\\n  TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = {\\n  source: Name;\\n  transport: TTransport;\\n  chain: TChain;\\n  entryPoint: EntryPointDef<TEntryPointVersion, TChain>;\\n  accountAddress?: Address;\\n  getAccountInitCode: () => Promise<Hex>;\\n  getDummySignature: () => Hex | Promise<Hex>;\\n  encodeExecute: (tx: AccountOp) => Promise<Hex>;\\n  encodeBatchExecute?: (txs: AccountOp[]) => Promise<Hex>;\\n  // if not provided, will default to just using signMessage over the Hex\\n  signUserOperationHash?: (uoHash: Hex) => Promise<Hex>;\\n  encodeUpgradeToAndCall?: (params: UpgradeToAndCallParams) => Promise<Hex>;\\n} & Omit<CustomSource, "signTransaction" | "address">;\\n \\n/**\\n * Parses the factory address and factory calldata from the provided account initialization code (initCode).\\n *\\n * @example\\n * ```ts\\n * import { parseFactoryAddressFromAccountInitCode } from "@aa-sdk/core";\\n *\\n * const [address, calldata] = parseFactoryAddressFromAccountInitCode("0xAddressCalldata");\\n * ```\\n *\\n * @param {Hex} initCode The initialization code from which to parse the factory address and calldata\\n * @returns {[Address, Hex]} A tuple containing the parsed factory address and factory calldata\\n */\\nexport const parseFactoryAddressFromAccountInitCode = (\\n  initCode: Hex\\n): [Address, Hex] => {\\n  const factoryAddress: Address = `0x${initCode.substring(2, 42)}`;\\n  const factoryCalldata: Hex = `0x${initCode.substring(42)}`;\\n  return [factoryAddress, factoryCalldata];\\n};\\n \\nexport type GetAccountAddressParams = {\\n  client: PublicClient;\\n  entryPoint: EntryPointDef;\\n  accountAddress?: Address;\\n  getAccountInitCode: () => Promise<Hex>;\\n};\\n \\n/**\\n * Retrieves the account address. Uses a provided `accountAddress` if available; otherwise, it computes the address using the entry point contract and the initial code.\\n *\\n * @example\\n * ```ts\\n * import { getEntryPoint, getAccountAddress } from "@aa-sdk/core";\\n *\\n * const accountAddress = await getAccountAddress({\\n *  client,\\n *  entryPoint: getEntryPoint(chain),\\n *  getAccountInitCode: async () => "0x{factoryAddress}{factoryCallData}",\\n * });\\n * ```\\n *\\n * @param {GetAccountAddressParams} params The configuration object\\n * @param {PublicClient} params.client A public client instance to interact with the blockchain\\n * @param {EntryPointDef} params.entryPoint The entry point definition which includes the address and ABI\\n * @param {Address} params.accountAddress Optional existing account address\\n * @param {() => Promise<Hex>} params.getAccountInitCode A function that returns a Promise resolving to a Hex string representing the initial code of the account\\n * @returns {Promise<Address>} A promise that resolves to the account address\\n */\\nexport const getAccountAddress = async ({\\n  client,\\n  entryPoint,\\n  accountAddress,\\n  getAccountInitCode,\\n}: GetAccountAddressParams) => {\\n  if (accountAddress) return accountAddress;\\n \\n  const entryPointContract = getContract({\\n    address: entryPoint.address,\\n    abi: entryPoint.abi,\\n    client,\\n  });\\n \\n  const initCode = await getAccountInitCode();\\n  Logger.verbose("[BaseSmartContractAccount](getAddress) initCode: ", initCode);\\n \\n  try {\\n    await entryPointContract.simulate.getSenderAddress([initCode]);\\n  } catch (err: any) {\\n    Logger.verbose(\\n      "[BaseSmartContractAccount](getAddress) getSenderAddress err: ",\\n      err\\n    );\\n    if (err.cause?.data?.errorName === "SenderAddressResult") {\\n      Logger.verbose(\\n        "[BaseSmartContractAccount](getAddress) entryPoint.getSenderAddress result:",\\n        err.cause.data.args[0]\\n      );\\n \\n      return err.cause.data.args[0] as Address;\\n    }\\n \\n    if (err.details === "Invalid URL") {\\n      throw new InvalidRpcUrlError();\\n    }\\n  }\\n \\n  throw new GetCounterFactualAddressError();\\n};\\n \\nexport async function toSmartContractAccount<\\n  Name extends string = string,\\n  TTransport extends Transport = Transport,\\n  TChain extends Chain = Chain,\\n  TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n>({\\n  transport,\\n  chain,\\n  entryPoint,\\n  source,\\n  accountAddress,\\n  getAccountInitCode,\\n  signMessage,\\n  signTypedData,\\n  encodeBatchExecute,\\n  encodeExecute,\\n  getDummySignature,\\n  signUserOperationHash,\\n  encodeUpgradeToAndCall,\\n}: ToSmartContractAccountParams<\\n  Name,\\n  TTransport,\\n  TChain,\\n  TEntryPointVersion\\n>): Promise<SmartContractAccount<Name, TEntryPointVersion>>;\\n \\n/**\\n * Converts an account to a smart contract account and sets up various account-related methods using the provided parameters like transport, chain, entry point, and other utilities.\\n *\\n * @example\\n * ```ts\\n * import { http, type SignableMessage } from "viem";\\n * import { sepolia } from "viem/chains";\\n *\\n * const myAccount = await toSmartContractAccount({\\n *  /// REQUIRED PARAMS ///\\n *  source: "MyAccount",\\n *  transport: http("RPC_URL"),\\n *  chain: sepolia,\\n *  // The EntryPointDef that your account is com"patible with\\n *  entryPoint: getEntryPoint(sepolia, { version: "0.6.0" }),\\n *  // This should return a concatenation of your `factoryAddress` and the `callData` for your factory's create account method\\n *  getAccountInitCode: async () => "0x{factoryAddress}{callData}",\\n *  // an invalid signature that doesn't cause your account to revert during validation\\n *  getDummySignature: () => "0x1234...",\\n *  // given a UO in the form of {target, data, value} should output the calldata for calling your contract's execution method\\n *  encodeExecute: async (uo) => "0xcalldata",\\n *  signMessage: async ({ message }: { message: SignableMessage }) => "0x...",\\n *  signTypedData: async (typedData) => "0x000",\\n *\\n *  /// OPTIONAL PARAMS ///\\n *  // if you already know your account's address, pass that in here to avoid generating a new counterfactual\\n *  accountAddress: "0xaddressoverride",\\n *  // if your account supports batching, this should take an array of UOs and return the calldata for calling your contract's batchExecute method\\n *  encodeBatchExecute: async (uos) => "0x...",\\n *  // if your contract expects a different signing scheme than the default signMessage scheme, you can override that here\\n *  signUserOperationHash: async (hash) => "0x...",\\n *  // allows you to define the calldata for upgrading your account\\n *  encodeUpgradeToAndCall: async (params) => "0x...",\\n * });\\n * ```\\n *\\n * @param {ToSmartContractAccountParams} params the parameters required for converting to a smart contract account\\n * @param {Transport} params.transport the transport mechanism used for communication\\n * @param {Chain} params.chain the blockchain chain used in the account\\n * @param {EntryPoint} params.entryPoint the entry point of the smart contract\\n * @param {string} params.source the source identifier for the account\\n * @param {Address} [params.accountAddress] the address of the account\\n * @param {() => Promise<Hex>} params.getAccountInitCode a function to get the initial state code of the account\\n * @param {(message: { message: SignableMessage }) => Promise<Hex>} params.signMessage a function to sign a message\\n * @param {(typedDataDefinition: TypedDataDefinition<typedData, primaryType>) => Promise<Hex>} params.signTypedData a function to sign typed data\\n * @param {(transactions: Transaction[]) => Hex} [params.encodeBatchExecute] a function to encode batch transactions\\n * @param {(tx: Transaction) => Hex} params.encodeExecute a function to encode a single transaction\\n * @param {() => Promise<Hex>} params.getDummySignature a function to get a dummy signature\\n * @param {(uoHash: Hex) => Promise<Hex>} [params.signUserOperationHash] a function to sign user operations\\n * @param {(implementationAddress: Address, implementationCallData: Hex) => Hex} [params.encodeUpgradeToAndCall] a function to encode upgrade call\\n * @returns {Promise<SmartContractAccount>} a promise that resolves to a SmartContractAccount object with methods and properties for interacting with the smart contract account\\n */\\nexport async function toSmartContractAccount(\\n  params: ToSmartContractAccountParams\\n): Promise<SmartContractAccount> {\\n  const {\\n    transport,\\n    chain,\\n    entryPoint,\\n    source,\\n    accountAddress,\\n    getAccountInitCode,\\n    signMessage,\\n    signTypedData,\\n    encodeBatchExecute,\\n    encodeExecute,\\n    getDummySignature,\\n    signUserOperationHash,\\n    encodeUpgradeToAndCall,\\n  } = params;\\n \\n  const client = createBundlerClient({\\n    // we set the retry count to 0 so that viem doesn't retry during\\n    // getting the address. That call always reverts and without this\\n    // viem will retry 3 times, making this call very slow\\n    transport: (opts) => transport({ ...opts, chain, retryCount: 0 }),\\n    chain,\\n  });\\n \\n  const entryPointContract = getContract({\\n    address: entryPoint.address,\\n    abi: entryPoint.abi,\\n    client,\\n  });\\n \\n  const accountAddress_ = await getAccountAddress({\\n    client,\\n    entryPoint: entryPoint,\\n    accountAddress,\\n    getAccountInitCode,\\n  });\\n \\n  let deploymentState = DeploymentState.UNDEFINED;\\n \\n  const getInitCode = async () => {\\n    if (deploymentState === DeploymentState.DEPLOYED) {\\n      return "0x";\\n    }\\n    const contractCode = await client.getBytecode({\\n      address: accountAddress_,\\n    });\\n \\n    if ((contractCode?.length ?? 0) > 2) {\\n      deploymentState = DeploymentState.DEPLOYED;\\n      return "0x";\\n    } else {\\n      deploymentState = DeploymentState.NOT_DEPLOYED;\\n    }\\n \\n    return getAccountInitCode();\\n  };\\n \\n  const signUserOperationHash_ =\\n    signUserOperationHash ??\\n    (async (uoHash: Hex) => {\\n      return signMessage({ message: { raw: hexToBytes(uoHash) } });\\n    });\\n \\n  const getFactoryAddress = async (): Promise<Address> =>\\n    parseFactoryAddressFromAccountInitCode(await getAccountInitCode())[0];\\n \\n  const getFactoryData = async (): Promise<Hex> =>\\n    parseFactoryAddressFromAccountInitCode(await getAccountInitCode())[1];\\n \\n  const encodeUpgradeToAndCall_ =\\n    encodeUpgradeToAndCall ??\\n    (() => {\\n      throw new UpgradesNotSupportedError(source);\\n    });\\n \\n  const isAccountDeployed = async () => {\\n    const initCode = await getInitCode();\\n    return initCode === "0x";\\n  };\\n \\n  const getNonce = async (nonceKey = 0n): Promise<bigint> => {\\n    if (!(await isAccountDeployed())) {\\n      return 0n;\\n    }\\n \\n    return entryPointContract.read.getNonce([\\n      accountAddress_,\\n      nonceKey,\\n    ]) as Promise<bigint>;\\n  };\\n \\n  const account = toAccount({\\n    address: accountAddress_,\\n    signMessage,\\n    signTypedData,\\n    signTransaction: () => {\\n      throw new SignTransactionNotSupportedError();\\n    },\\n  });\\n \\n  const create6492Signature = async (isDeployed: boolean, signature: Hex) => {\\n    if (isDeployed) {\\n      return signature;\\n    }\\n \\n    const [factoryAddress, factoryCalldata] =\\n      parseFactoryAddressFromAccountInitCode(await getAccountInitCode());\\n \\n    return wrapSignatureWith6492({\\n      factoryAddress,\\n      factoryCalldata,\\n      signature,\\n    });\\n  };\\n \\n  const signMessageWith6492 = async (message: { message: SignableMessage }) => {\\n    const [isDeployed, signature] = await Promise.all([\\n      isAccountDeployed(),\\n      account.signMessage(message),\\n    ]);\\n \\n    return create6492Signature(isDeployed, signature);\\n  };\\n \\n  const signTypedDataWith6492 = async <\\n    const typedData extends TypedData | Record<string, unknown>,\\n    primaryType extends keyof typedData | "EIP712Domain" = keyof typedData\\n  >(\\n    typedDataDefinition: TypedDataDefinition<typedData, primaryType>\\n  ): Promise<Hex> => {\\n    const [isDeployed, signature] = await Promise.all([\\n      isAccountDeployed(),\\n      account.signTypedData(typedDataDefinition),\\n    ]);\\n \\n    return create6492Signature(isDeployed, signature);\\n  };\\n \\n  const getImplementationAddress = async (): Promise<NullAddress | Address> => {\\n    const storage = await client.getStorageAt({\\n      address: account.address,\\n      // This is the default slot for the implementation address for Proxies\\n      slot: "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",\\n    });\\n \\n    if (storage == null) {\\n      throw new FailedToGetStorageSlotError(\\n        "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",\\n        "Proxy Implementation Address"\\n      );\\n    }\\n \\n    return trim(storage);\\n  };\\n \\n  if (entryPoint.version !== "0.6.0" && entryPoint.version !== "0.7.0") {\\n    throw new InvalidEntryPointError(chain, entryPoint.version);\\n  }\\n \\n  return {\\n    ...account,\\n    source,\\n    // TODO: I think this should probably be signUserOperation instead\\n    // and allow for generating the UO hash based on the EP version\\n    signUserOperationHash: signUserOperationHash_,\\n    getFactoryAddress,\\n    getFactoryData,\\n    encodeBatchExecute:\\n      encodeBatchExecute ??\\n      (() => {\\n        throw new BatchExecutionNotSupportedError(source);\\n      }),\\n    encodeExecute,\\n    getDummySignature,\\n    getInitCode,\\n    encodeUpgradeToAndCall: encodeUpgradeToAndCall_,\\n    getEntryPoint: () => entryPoint,\\n    isAccountDeployed,\\n    getNonce,\\n    signMessageWith6492,\\n    signTypedDataWith6492,\\n    getImplementationAddress,\\n  };\\n}
\\n

:::

\",\"id\":\"pages/smart-contracts/custom/using-your-own.mdx#the-tosmartcontractaccount-method\",\"isPage\":false,\"text\":\"\\nFor your reference, this is the definition of the toSmartContractAccount interface as pulled from the source code:\\n:::details SmartContractAccount\\nimport {\\n getContract,\\n hexToBytes,\\n trim,\\n type Address,\\n type Chain,\\n type CustomSource,\\n type Hex,\\n type LocalAccount,\\n type PublicClient,\\n type SignableMessage,\\n type Transport,\\n type TypedData,\\n type TypedDataDefinition,\\n} from "viem";\\nimport { toAccount } from "viem/accounts";\\nimport { createBundlerClient } from "../client/bundlerClient.js";\\nimport type {\\n EntryPointDef,\\n EntryPointRegistryBase,\\n EntryPointVersion,\\n} from "../entrypoint/types.js";\\nimport {\\n BatchExecutionNotSupportedError,\\n FailedToGetStorageSlotError,\\n GetCounterFactualAddressError,\\n SignTransactionNotSupportedError,\\n UpgradesNotSupportedError,\\n} from "../errors/account.js";\\nimport { InvalidRpcUrlError } from "../errors/client.js";\\nimport { InvalidEntryPointError } from "../errors/entrypoint.js";\\nimport { Logger } from "../logger.js";\\nimport type { SmartAccountSigner } from "../signer/types.js";\\nimport { wrapSignatureWith6492 } from "../signer/utils.js";\\nimport type { NullAddress } from "../types.js";\\nimport type { IsUndefined } from "../utils/types.js";\\n \\nexport type AccountOp = {\\n target: Address;\\n value?: bigint;\\n data: Hex | "0x";\\n};\\n \\nexport enum DeploymentState {\\n UNDEFINED = "0x0",\\n NOT_DEPLOYED = "0x1",\\n DEPLOYED = "0x2",\\n}\\n \\nexport type GetEntryPointFromAccount<\\n TAccount extends SmartContractAccount | undefined,\\n TAccountOverride extends SmartContractAccount = SmartContractAccount\\n> = GetAccountParameter<\\n TAccount,\\n TAccountOverride\\n> extends SmartContractAccount<string, infer TEntryPointVersion>\\n ? TEntryPointVersion\\n : EntryPointVersion;\\n \\nexport type GetAccountParameter<\\n TAccount extends SmartContractAccount | undefined =\\n | SmartContractAccount\\n | undefined,\\n TAccountOverride extends SmartContractAccount = SmartContractAccount\\n> = IsUndefined<TAccount> extends true\\n ? { account: TAccountOverride }\\n : { account?: TAccountOverride };\\n \\nexport type UpgradeToAndCallParams = {\\n upgradeToAddress: Address;\\n upgradeToInitData: Hex;\\n};\\n \\nexport type SmartContractAccountWithSigner<\\n Name extends string = string,\\n TSigner extends SmartAccountSigner = SmartAccountSigner,\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = SmartContractAccount<Name, TEntryPointVersion> & {\\n getSigner: () => TSigner;\\n};\\n \\n/**\\n * Determines if the given SmartContractAccount has a signer associated with it.\\n *\\n * @example\\n * ```ts\\n * import { toSmartContractAccount } from "@aa-sdk/core";\\n *\\n * const account = await toSmartContractAccount(...);\\n *\\n * console.log(isSmartAccountWithSigner(account)); // false: the base account does not have a publicly accessible signer\\n * ```\\n *\\n * @param {SmartContractAccount} account The account to check.\\n * @returns {boolean} true if the account has a signer, otherwise false.\\n */\\nexport const isSmartAccountWithSigner = (\\n account: SmartContractAccount\\n): account is SmartContractAccountWithSigner => {\\n return "getSigner" in account;\\n};\\n \\nexport type SmartContractAccount<\\n Name extends string = string,\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = LocalAccount<Name> & {\\n source: Name;\\n getDummySignature: () => Hex | Promise<Hex>;\\n encodeExecute: (tx: AccountOp) => Promise<Hex>;\\n encodeBatchExecute: (txs: AccountOp[]) => Promise<Hex>;\\n signUserOperationHash: (uoHash: Hex) => Promise<Hex>;\\n signMessageWith6492: (params: { message: SignableMessage }) => Promise<Hex>;\\n signTypedDataWith6492: <\\n const typedData extends TypedData | Record<string, unknown>,\\n primaryType extends keyof typedData | "EIP712Domain" = keyof typedData\\n >(\\n typedDataDefinition: TypedDataDefinition<typedData, primaryType>\\n ) => Promise<Hex>;\\n encodeUpgradeToAndCall: (params: UpgradeToAndCallParams) => Promise<Hex>;\\n getNonce(nonceKey?: bigint): Promise<bigint>;\\n getInitCode: () => Promise<Hex>;\\n isAccountDeployed: () => Promise<boolean>;\\n getFactoryAddress: () => Promise<Address>;\\n getFactoryData: () => Promise<Hex>;\\n getEntryPoint: () => EntryPointDef<TEntryPointVersion>;\\n getImplementationAddress: () => Promise<NullAddress | Address>;\\n};\\n \\nexport interface AccountEntryPointRegistry<Name extends string = string>\\n extends EntryPointRegistryBase<\\n SmartContractAccount<Name, EntryPointVersion>\\n > {\\n "0.6.0": SmartContractAccount<Name, "0.6.0">;\\n "0.7.0": SmartContractAccount<Name, "0.7.0">;\\n}\\n \\nexport type ToSmartContractAccountParams<\\n Name extends string = string,\\n TTransport extends Transport = Transport,\\n TChain extends Chain = Chain,\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n> = {\\n source: Name;\\n transport: TTransport;\\n chain: TChain;\\n entryPoint: EntryPointDef<TEntryPointVersion, TChain>;\\n accountAddress?: Address;\\n getAccountInitCode: () => Promise<Hex>;\\n getDummySignature: () => Hex | Promise<Hex>;\\n encodeExecute: (tx: AccountOp) => Promise<Hex>;\\n encodeBatchExecute?: (txs: AccountOp[]) => Promise<Hex>;\\n // if not provided, will default to just using signMessage over the Hex\\n signUserOperationHash?: (uoHash: Hex) => Promise<Hex>;\\n encodeUpgradeToAndCall?: (params: UpgradeToAndCallParams) => Promise<Hex>;\\n} & Omit<CustomSource, "signTransaction" | "address">;\\n \\n/**\\n * Parses the factory address and factory calldata from the provided account initialization code (initCode).\\n *\\n * @example\\n * ```ts\\n * import { parseFactoryAddressFromAccountInitCode } from "@aa-sdk/core";\\n *\\n * const [address, calldata] = parseFactoryAddressFromAccountInitCode("0xAddressCalldata");\\n * ```\\n *\\n * @param {Hex} initCode The initialization code from which to parse the factory address and calldata\\n * @returns {[Address, Hex]} A tuple containing the parsed factory address and factory calldata\\n */\\nexport const parseFactoryAddressFromAccountInitCode = (\\n initCode: Hex\\n): [Address, Hex] => {\\n const factoryAddress: Address = `0x${initCode.substring(2, 42)}`;\\n const factoryCalldata: Hex = `0x${initCode.substring(42)}`;\\n return [factoryAddress, factoryCalldata];\\n};\\n \\nexport type GetAccountAddressParams = {\\n client: PublicClient;\\n entryPoint: EntryPointDef;\\n accountAddress?: Address;\\n getAccountInitCode: () => Promise<Hex>;\\n};\\n \\n/**\\n * Retrieves the account address. Uses a provided `accountAddress` if available; otherwise, it computes the address using the entry point contract and the initial code.\\n *\\n * @example\\n * ```ts\\n * import { getEntryPoint, getAccountAddress } from "@aa-sdk/core";\\n *\\n * const accountAddress = await getAccountAddress({\\n * client,\\n * entryPoint: getEntryPoint(chain),\\n * getAccountInitCode: async () => "0x{factoryAddress}{factoryCallData}",\\n * });\\n * ```\\n *\\n * @param {GetAccountAddressParams} params The configuration object\\n * @param {PublicClient} params.client A public client instance to interact with the blockchain\\n * @param {EntryPointDef} params.entryPoint The entry point definition which includes the address and ABI\\n * @param {Address} params.accountAddress Optional existing account address\\n * @param {() => Promise<Hex>} params.getAccountInitCode A function that returns a Promise resolving to a Hex string representing the initial code of the account\\n * @returns {Promise<Address>} A promise that resolves to the account address\\n */\\nexport const getAccountAddress = async ({\\n client,\\n entryPoint,\\n accountAddress,\\n getAccountInitCode,\\n}: GetAccountAddressParams) => {\\n if (accountAddress) return accountAddress;\\n \\n const entryPointContract = getContract({\\n address: entryPoint.address,\\n abi: entryPoint.abi,\\n client,\\n });\\n \\n const initCode = await getAccountInitCode();\\n Logger.verbose("[BaseSmartContractAccount](getAddress) initCode: ", initCode);\\n \\n try {\\n await entryPointContract.simulate.getSenderAddress([initCode]);\\n } catch (err: any) {\\n Logger.verbose(\\n "[BaseSmartContractAccount](getAddress) getSenderAddress err: ",\\n err\\n );\\n if (err.cause?.data?.errorName === "SenderAddressResult") {\\n Logger.verbose(\\n "[BaseSmartContractAccount](getAddress) entryPoint.getSenderAddress result:",\\n err.cause.data.args[0]\\n );\\n \\n return err.cause.data.args[0] as Address;\\n }\\n \\n if (err.details === "Invalid URL") {\\n throw new InvalidRpcUrlError();\\n }\\n }\\n \\n throw new GetCounterFactualAddressError();\\n};\\n \\nexport async function toSmartContractAccount<\\n Name extends string = string,\\n TTransport extends Transport = Transport,\\n TChain extends Chain = Chain,\\n TEntryPointVersion extends EntryPointVersion = EntryPointVersion\\n>({\\n transport,\\n chain,\\n entryPoint,\\n source,\\n accountAddress,\\n getAccountInitCode,\\n signMessage,\\n signTypedData,\\n encodeBatchExecute,\\n encodeExecute,\\n getDummySignature,\\n signUserOperationHash,\\n encodeUpgradeToAndCall,\\n}: ToSmartContractAccountParams<\\n Name,\\n TTransport,\\n TChain,\\n TEntryPointVersion\\n>): Promise<SmartContractAccount<Name, TEntryPointVersion>>;\\n \\n/**\\n * Converts an account to a smart contract account and sets up various account-related methods using the provided parameters like transport, chain, entry point, and other utilities.\\n *\\n * @example\\n * ```ts\\n * import { http, type SignableMessage } from "viem";\\n * import { sepolia } from "viem/chains";\\n *\\n * const myAccount = await toSmartContractAccount({\\n * /// REQUIRED PARAMS ///\\n * source: "MyAccount",\\n * transport: http("RPC_URL"),\\n * chain: sepolia,\\n * // The EntryPointDef that your account is com"patible with\\n * entryPoint: getEntryPoint(sepolia, { version: "0.6.0" }),\\n * // This should return a concatenation of your `factoryAddress` and the `callData` for your factory's create account method\\n * getAccountInitCode: async () => "0x{factoryAddress}{callData}",\\n * // an invalid signature that doesn't cause your account to revert during validation\\n * getDummySignature: () => "0x1234...",\\n * // given a UO in the form of {target, data, value} should output the calldata for calling your contract's execution method\\n * encodeExecute: async (uo) => "0xcalldata",\\n * signMessage: async ({ message }: { message: SignableMessage }) => "0x...",\\n * signTypedData: async (typedData) => "0x000",\\n *\\n * /// OPTIONAL PARAMS ///\\n * // if you already know your account's address, pass that in here to avoid generating a new counterfactual\\n * accountAddress: "0xaddressoverride",\\n * // if your account supports batching, this should take an array of UOs and return the calldata for calling your contract's batchExecute method\\n * encodeBatchExecute: async (uos) => "0x...",\\n * // if your contract expects a different signing scheme than the default signMessage scheme, you can override that here\\n * signUserOperationHash: async (hash) => "0x...",\\n * // allows you to define the calldata for upgrading your account\\n * encodeUpgradeToAndCall: async (params) => "0x...",\\n * });\\n * ```\\n *\\n * @param {ToSmartContractAccountParams} params the parameters required for converting to a smart contract account\\n * @param {Transport} params.transport the transport mechanism used for communication\\n * @param {Chain} params.chain the blockchain chain used in the account\\n * @param {EntryPoint} params.entryPoint the entry point of the smart contract\\n * @param {string} params.source the source identifier for the account\\n * @param {Address} [params.accountAddress] the address of the account\\n * @param {() => Promise<Hex>} params.getAccountInitCode a function to get the initial state code of the account\\n * @param {(message: { message: SignableMessage }) => Promise<Hex>} params.signMessage a function to sign a message\\n * @param {(typedDataDefinition: TypedDataDefinition<typedData, primaryType>) => Promise<Hex>} params.signTypedData a function to sign typed data\\n * @param {(transactions: Transaction[]) => Hex} [params.encodeBatchExecute] a function to encode batch transactions\\n * @param {(tx: Transaction) => Hex} params.encodeExecute a function to encode a single transaction\\n * @param {() => Promise<Hex>} params.getDummySignature a function to get a dummy signature\\n * @param {(uoHash: Hex) => Promise<Hex>} [params.signUserOperationHash] a function to sign user operations\\n * @param {(implementationAddress: Address, implementationCallData: Hex) => Hex} [params.encodeUpgradeToAndCall] a function to encode upgrade call\\n * @returns {Promise<SmartContractAccount>} a promise that resolves to a SmartContractAccount object with methods and properties for interacting with the smart contract account\\n */\\nexport async function toSmartContractAccount(\\n params: ToSmartContractAccountParams\\n): Promise<SmartContractAccount> {\\n const {\\n transport,\\n chain,\\n entryPoint,\\n source,\\n accountAddress,\\n getAccountInitCode,\\n signMessage,\\n signTypedData,\\n encodeBatchExecute,\\n encodeExecute,\\n getDummySignature,\\n signUserOperationHash,\\n encodeUpgradeToAndCall,\\n } = params;\\n \\n const client = createBundlerClient({\\n // we set the retry count to 0 so that viem doesn't retry during\\n // getting the address. That call always reverts and without this\\n // viem will retry 3 times, making this call very slow\\n transport: (opts) => transport({ ...opts, chain, retryCount: 0 }),\\n chain,\\n });\\n \\n const entryPointContract = getContract({\\n address: entryPoint.address,\\n abi: entryPoint.abi,\\n client,\\n });\\n \\n const accountAddress_ = await getAccountAddress({\\n client,\\n entryPoint: entryPoint,\\n accountAddress,\\n getAccountInitCode,\\n });\\n \\n let deploymentState = DeploymentState.UNDEFINED;\\n \\n const getInitCode = async () => {\\n if (deploymentState === DeploymentState.DEPLOYED) {\\n return "0x";\\n }\\n const contractCode = await client.getBytecode({\\n address: accountAddress_,\\n });\\n \\n if ((contractCode?.length ?? 0) > 2) {\\n deploymentState = DeploymentState.DEPLOYED;\\n return "0x";\\n } else {\\n deploymentState = DeploymentState.NOT_DEPLOYED;\\n }\\n \\n return getAccountInitCode();\\n };\\n \\n const signUserOperationHash_ =\\n signUserOperationHash ??\\n (async (uoHash: Hex) => {\\n return signMessage({ message: { raw: hexToBytes(uoHash) } });\\n });\\n \\n const getFactoryAddress = async (): Promise<Address> =>\\n parseFactoryAddressFromAccountInitCode(await getAccountInitCode())[0];\\n \\n const getFactoryData = async (): Promise<Hex> =>\\n parseFactoryAddressFromAccountInitCode(await getAccountInitCode())[1];\\n \\n const encodeUpgradeToAndCall_ =\\n encodeUpgradeToAndCall ??\\n (() => {\\n throw new UpgradesNotSupportedError(source);\\n });\\n \\n const isAccountDeployed = async () => {\\n const initCode = await getInitCode();\\n return initCode === "0x";\\n };\\n \\n const getNonce = async (nonceKey = 0n): Promise<bigint> => {\\n if (!(await isAccountDeployed())) {\\n return 0n;\\n }\\n \\n return entryPointContract.read.getNonce([\\n accountAddress_,\\n nonceKey,\\n ]) as Promise<bigint>;\\n };\\n \\n const account = toAccount({\\n address: accountAddress_,\\n signMessage,\\n signTypedData,\\n signTransaction: () => {\\n throw new SignTransactionNotSupportedError();\\n },\\n });\\n \\n const create6492Signature = async (isDeployed: boolean, signature: Hex) => {\\n if (isDeployed) {\\n return signature;\\n }\\n \\n const [factoryAddress, factoryCalldata] =\\n parseFactoryAddressFromAccountInitCode(await getAccountInitCode());\\n \\n return wrapSignatureWith6492({\\n factoryAddress,\\n factoryCalldata,\\n signature,\\n });\\n };\\n \\n const signMessageWith6492 = async (message: { message: SignableMessage }) => {\\n const [isDeployed, signature] = await Promise.all([\\n isAccountDeployed(),\\n account.signMessage(message),\\n ]);\\n \\n return create6492Signature(isDeployed, signature);\\n };\\n \\n const signTypedDataWith6492 = async <\\n const typedData extends TypedData | Record<string, unknown>,\\n primaryType extends keyof typedData | "EIP712Domain" = keyof typedData\\n >(\\n typedDataDefinition: TypedDataDefinition<typedData, primaryType>\\n ): Promise<Hex> => {\\n const [isDeployed, signature] = await Promise.all([\\n isAccountDeployed(),\\n account.signTypedData(typedDataDefinition),\\n ]);\\n \\n return create6492Signature(isDeployed, signature);\\n };\\n \\n const getImplementationAddress = async (): Promise<NullAddress | Address> => {\\n const storage = await client.getStorageAt({\\n address: account.address,\\n // This is the default slot for the implementation address for Proxies\\n slot: "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",\\n });\\n \\n if (storage == null) {\\n throw new FailedToGetStorageSlotError(\\n "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",\\n "Proxy Implementation Address"\\n );\\n }\\n \\n return trim(storage);\\n };\\n \\n if (entryPoint.version !== "0.6.0" && entryPoint.version !== "0.7.0") {\\n throw new InvalidEntryPointError(chain, entryPoint.version);\\n }\\n \\n return {\\n ...account,\\n source,\\n // TODO: I think this should probably be signUserOperation instead\\n // and allow for generating the UO hash based on the EP version\\n signUserOperationHash: signUserOperationHash_,\\n getFactoryAddress,\\n getFactoryData,\\n encodeBatchExecute:\\n encodeBatchExecute ??\\n (() => {\\n throw new BatchExecutionNotSupportedError(source);\\n }),\\n encodeExecute,\\n getDummySignature,\\n getInitCode,\\n encodeUpgradeToAndCall: encodeUpgradeToAndCall_,\\n getEntryPoint: () => entryPoint,\\n isAccountDeployed,\\n getNonce,\\n signMessageWith6492,\\n signTypedDataWith6492,\\n getImplementationAddress,\\n };\\n}\\n:::\",\"title\":\"The toSmartContractAccount Method\",\"titles\":[\"Using your own Smart Account\"]}]}],[\"index.3ec62e7d5e7de514dde7dc4c4ad2891803dfeab5d69dde3010776a64f3c5dbe7\",{\"mdx\":\"---\\ntitle: Modular Account Smart Contract\\ndescription: Follow this guide to use Modular Accounts with Account Kit, a\\n vertically integrated stack for building apps that support ERC-4337 and\\n ERC-6900.\\n---\\n\\n# Modular Account\\n\\n## Overview\\n\\nModular Account is an ERC-4337 smart account that supports customizable features with ERC-6900 plugins. It is fully production-ready with multiple security audits, three prebuilt plugins in `MultiOwnerPlugin`, `SessionKeyPlugin`, and `MultisigPlugin`, and the capability to support any custom account behavior you need.\\n\\n## Why Modular Account?\\n\\n### Make the most of Account Abstraction\\n\\nSmart accounts unlock lots of customizable ways to improve the wallet experience. Still, it requires writing this behavior into the smart contract for the account, which is difficult and security-critical. Modular Account uses the [ERC-6900](https://eips.ethereum.org/EIPS/eip-6900) framework to simplify creating powerful features for smart accounts. We have created three plugins to level up your smart accounts, and we look forward to what new plugins you create!\\n\\n### Multi Owner Plugin\\n\\nThe Multi Owner plugin lets your smart accounts have one or more ECDSA or SCA owners. This allows your account to integrate with multiple signers simultaneously and supports recovering your account if one is lost.\\n\\nRead more about Multi Owner Plugin and how to get started with Modular Account [here](#TODO/smart-contracts/using-smart-accounts/transfer-ownership/modular-account)!\\n\\n### Session Key Plugin\\n\\nThe Session Key plugin lets your smart account add additional signers with specific permissions to your account.\\nSession keys can be customized and configured to:\\n\\n- Contract Restrictions: restrict to only interact with specific contracts and/or a subset of their methods\\n- Spending Limits: spend up to a set amount of ERC-20 tokens or native token amount\\n- Time Period: expire after specific time periods\\n\\nSession keys let you streamline interactions by reducing confirmation steps or automating actions on behalf of the account. These features are kept secure through the permission system, which protects the account from malicious use of the session key.\\n\\nRead more about installing and using the Session Key plugin [here](#TODO/smart-contracts/using-smart-accounts/session-keys/)!\\n\\n### Multisig Plugin\\n\\nThe Multisig plugin allows your account to have multiple ECDSA or SCA signers and require multiple signatures to perform actions on the account. This is commonly referred to as a k-of-n signature scheme and would create Modular Accounts that are similar to [Gnosis Safe](https://safe.global/) accounts. This plugin is recommended for accounts that require maximum security.\\n\\nRead more about Multisig Plugin [here](/smart-contracts/modular-account/multisig-plugin/)!\\n\\n### Full compatibility\\n\\nModular Account also supports the same baseline set of account abstraction features as Light Account: sponsoring gas, batching transactions, rotating owners, and checking ERC-1271 signatures.\\n\\n### Build your own Plugin\\n\\nHave an idea for more account features? Modular Account supports ERC-6900 for installing and uninstalling additional plugins to your account, letting you fully customize the account logic.\\n\\nCheck out the plugin development guide [here](https://www.notion.so/alchemotion/How-to-write-an-ERC-6900-Plugin-8ef518630b1a43a1b301723925407ec5?utm_content=8ef51863-0b1a-43a1-b301-723925407ec5&utm_campaign=T06RY9YKG&n=slack&n=slack_link_unfurl&pvs=6) if you’re interested!\\n\\n### Secure, audited, open source\\n\\nModular Account has been audited by Spearbit and Quanstamp. You can find the audit reports [here](https://github.com/alchemyplatform/modular-account/tree/develop/audits). Modular Account is fully open source, so you can validate the [source code](https://github.com/alchemyplatform/modular-account).\\n\\nimport Bbp from \\\"../../resources/bbp.mdx\\\";\\n\\n\\n\",\"document\":[]}],[\"index.a26936e483a76eb9f89f1fa7d77d46a8ad57f5c8e084dd0c20668023247abe5b\",{\"mdx\":\"---\\ntitle: How to manage ownership of a Modular Account\\ndescription: Follow this guide to manage ownership of a Modular Account with\\n Account Kit, a vertically integrated stack for building apps that support\\n ERC-4337 and ERC-6900.\\n---\\n\\n# How to manage ownership of a Modular Account\\n\\nThe Multi Owner plugin lets your smart accounts have one or more ECDSA or SCA owners. This lets your account integrate with multiple signers at once, and supports recovering your account if one signer is lost.\\n\\nThe Multi-Owner Plugin is able to:\\n\\n- Update (add or remove) owners for an MSCA.\\n- Check if an address is an owner address of an MSCA.\\n- Show all owners of an MSCA.\\n- Validate signed signatures of ERC-4337 enabled user operations as well as regular transactions.\\n\\nAll Modular Accounts have `MultiOwnerPlugin` pre-installed upon creation, exposing following methods for account owners to update (add or remove) and read the current owners of the account:\\n\\n```solidity\\n/// @notice Update owners of the account. Owners can update owners.\\n/// @param ownersToAdd The address array of owners to be added.\\n/// @param ownersToRemove The address array of owners to be removed.\\nfunction updateOwners(address[] memory ownersToAdd, address[] memory ownersToRemove) external;\\n\\n/// @notice Get the owners of `account`.\\n/// @param account The account to get the owners of.\\n/// @return The addresses of the owners of the account.\\nfunction ownersOf(address account) external view returns (address[] memory);\\n```\\n\\nWhen you connect your Modular Account to `SmartAccountClient` you can extend the client with `multiOwnerPluginActions`, which exposes a set of methods available to call the installed `MultiOwnerPlugin` with the client connected to the account.\\n\\n### 1. Check if an address is one of the current owners of a Modular Account\\n\\nYou should first extend the `SmartAccountClient` connected to a Modular Account, which already comes with `MultiOwnerPlugin` installed upon creation, with client to `multiOwnerPluginActions` for the client to include the `MultiOwnerPlugin` actions.\\n\\n:::tip[Note]\\nWhen using `createModularAccountAlchemyClient` in `@account-kit/smart-contracts`, the `SmartAccountClient` comes automatically extended with `multiOwnerPluginActions`, `pluginManagerActions`, and `accountLoupeActions` decorators as defaults available for use.\\n:::\\n\\nThen, you can use the `readOwners` method of the `multiOwnerPluginActions` extended smart account client to check if a given address is one of the current owners of a Modular Account.\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { modularAccountClient } from \\\"./client\\\";\\n\\nconst ownerToCheck = \\\"0x...\\\"; // the address of the account to check the ownership of\\n\\n// returns a boolean whether an address is an owner of account or not\\nconst isOwner = await modularAccountClient.isOwnerOf({\\n address: ownerToCheck,\\n});\\n```\\n\\n```ts [client.ts] filename=\\\"client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\\n### 2. Get all current owners of a Modular Account\\n\\nYou can use the `readOwners` method on the `multiOwnerPluginActions` extended smart account client to fetch all current owners of the connected Modular Account.\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { modularAccountClient } from \\\"./client\\\";\\n\\n// owners is an array of the addresses of the account owners\\nconst owners = await modularAccountClient.readOwners();\\n```\\n\\n```ts [client.ts] filename=\\\"client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\\n### 3. Add or remove owners for a Modular Account\\n\\nYou can use the `updateOwners` method on the `multiOwnerPluginActions` extended smart account client to add or remove owners from the Modular Account.\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { modularAccountClient } from \\\"./client\\\";\\n\\nconst ownersToAdd = []; // the addresses of owners to be added\\nconst ownersToRemove = []; // the addresses of owners to be removed\\n\\nconst result = await modularAccountClient.updateOwners({\\n args: [ownersToAdd, ownersToRemove],\\n});\\n\\nconst txHash = await modularAccountClient.waitForUserOperationTransaction(\\n result\\n);\\n```\\n\\n```ts [client.ts] filename=\\\"client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/smart-contracts/transfer-ownership/modular-account#how-to-manage-ownership-of-a-modular-account\",\"html\":\"\\n

The Multi Owner plugin lets your smart accounts have one or more ECDSA or SCA owners. This lets your account integrate with multiple signers at once, and supports recovering your account if one signer is lost.

\\n

The Multi-Owner Plugin is able to:

\\n
    \\n
  • Update (add or remove) owners for an MSCA.
  • \\n
  • Check if an address is an owner address of an MSCA.
  • \\n
  • Show all owners of an MSCA.
  • \\n
  • Validate signed signatures of ERC-4337 enabled user operations as well as regular transactions.
  • \\n
\\n

All Modular Accounts have MultiOwnerPlugin pre-installed upon creation, exposing following methods for account owners to update (add or remove) and read the current owners of the account:

\\n
/// @notice Update owners of the account. Owners can update owners.\\n/// @param ownersToAdd The address array of owners to be added.\\n/// @param ownersToRemove The address array of owners to be removed.\\nfunction updateOwners(address[] memory ownersToAdd, address[] memory ownersToRemove) external;\\n \\n/// @notice Get the owners of `account`.\\n/// @param account The account to get the owners of.\\n/// @return The addresses of the owners of the account.\\nfunction ownersOf(address account) external view returns (address[] memory);
\\n

When you connect your Modular Account to SmartAccountClient you can extend the client with multiOwnerPluginActions, which exposes a set of methods available to call the installed MultiOwnerPlugin with the client connected to the account.

\\n\",\"id\":\"pages/smart-contracts/transfer-ownership/modular-account.mdx#how-to-manage-ownership-of-a-modular-account\",\"isPage\":true,\"text\":\"\\nThe Multi Owner plugin lets your smart accounts have one or more ECDSA or SCA owners. This lets your account integrate with multiple signers at once, and supports recovering your account if one signer is lost.\\nThe Multi-Owner Plugin is able to:\\n\\nUpdate (add or remove) owners for an MSCA.\\nCheck if an address is an owner address of an MSCA.\\nShow all owners of an MSCA.\\nValidate signed signatures of ERC-4337 enabled user operations as well as regular transactions.\\n\\nAll Modular Accounts have MultiOwnerPlugin pre-installed upon creation, exposing following methods for account owners to update (add or remove) and read the current owners of the account:\\n/// @notice Update owners of the account. Owners can update owners.\\n/// @param ownersToAdd The address array of owners to be added.\\n/// @param ownersToRemove The address array of owners to be removed.\\nfunction updateOwners(address[] memory ownersToAdd, address[] memory ownersToRemove) external;\\n \\n/// @notice Get the owners of `account`.\\n/// @param account The account to get the owners of.\\n/// @return The addresses of the owners of the account.\\nfunction ownersOf(address account) external view returns (address[] memory);\\nWhen you connect your Modular Account to SmartAccountClient you can extend the client with multiOwnerPluginActions, which exposes a set of methods available to call the installed MultiOwnerPlugin with the client connected to the account.\\n\",\"title\":\"How to manage ownership of a Modular Account\",\"titles\":[]},{\"href\":\"/smart-contracts/transfer-ownership/modular-account#1-check-if-an-address-is-one-of-the-current-owners-of-a-modular-account\",\"html\":\"\\n

You should first extend the SmartAccountClient connected to a Modular Account, which already comes with MultiOwnerPlugin installed upon creation, with client to multiOwnerPluginActions for the client to include the MultiOwnerPlugin actions.

\\n\\n

Then, you can use the readOwners method of the multiOwnerPluginActions extended smart account client to check if a given address is one of the current owners of a Modular Account.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\n \\nconst ownerToCheck = "0x..."; // the address of the account to check the ownership of\\n \\n// returns a boolean whether an address is an owner of account or not\\nconst isOwner = await modularAccountClient.isOwnerOf({\\n  address: ownerToCheck,\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/transfer-ownership/modular-account.mdx#1-check-if-an-address-is-one-of-the-current-owners-of-a-modular-account\",\"isPage\":false,\"text\":\"\\nYou should first extend the SmartAccountClient connected to a Modular Account, which already comes with MultiOwnerPlugin installed upon creation, with client to multiOwnerPluginActions for the client to include the MultiOwnerPlugin actions.\\nNoteWhen using createModularAccountAlchemyClient in @account-kit/smart-contracts, the SmartAccountClient comes automatically extended with multiOwnerPluginActions, pluginManagerActions, and accountLoupeActions decorators as defaults available for use.\\nThen, you can use the readOwners method of the multiOwnerPluginActions extended smart account client to check if a given address is one of the current owners of a Modular Account.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\n \\nconst ownerToCheck = "0x..."; // the address of the account to check the ownership of\\n \\n// returns a boolean whether an address is an owner of account or not\\nconst isOwner = await modularAccountClient.isOwnerOf({\\n address: ownerToCheck,\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"1. Check if an address is one of the current owners of a Modular Account\",\"titles\":[\"How to manage ownership of a Modular Account\",null]},{\"href\":\"/smart-contracts/transfer-ownership/modular-account#2-get-all-current-owners-of-a-modular-account\",\"html\":\"\\n

You can use the readOwners method on the multiOwnerPluginActions extended smart account client to fetch all current owners of the connected Modular Account.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\n \\n// owners is an array of the addresses of the account owners\\nconst owners = await modularAccountClient.readOwners();
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/transfer-ownership/modular-account.mdx#2-get-all-current-owners-of-a-modular-account\",\"isPage\":false,\"text\":\"\\nYou can use the readOwners method on the multiOwnerPluginActions extended smart account client to fetch all current owners of the connected Modular Account.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\n \\n// owners is an array of the addresses of the account owners\\nconst owners = await modularAccountClient.readOwners();import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"2. Get all current owners of a Modular Account\",\"titles\":[\"How to manage ownership of a Modular Account\",null]},{\"href\":\"/smart-contracts/transfer-ownership/modular-account#3-add-or-remove-owners-for-a-modular-account\",\"html\":\"\\n

You can use the updateOwners method on the multiOwnerPluginActions extended smart account client to add or remove owners from the Modular Account.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\n \\nconst ownersToAdd = []; // the addresses of owners to be added\\nconst ownersToRemove = []; // the addresses of owners to be removed\\n \\nconst result = await modularAccountClient.updateOwners({\\n  args: [ownersToAdd, ownersToRemove],\\n});\\n \\nconst txHash = await modularAccountClient.waitForUserOperationTransaction(\\n  result\\n);
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\",\"id\":\"pages/smart-contracts/transfer-ownership/modular-account.mdx#3-add-or-remove-owners-for-a-modular-account\",\"isPage\":false,\"text\":\"\\nYou can use the updateOwners method on the multiOwnerPluginActions extended smart account client to add or remove owners from the Modular Account.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\n \\nconst ownersToAdd = []; // the addresses of owners to be added\\nconst ownersToRemove = []; // the addresses of owners to be removed\\n \\nconst result = await modularAccountClient.updateOwners({\\n args: [ownersToAdd, ownersToRemove],\\n});\\n \\nconst txHash = await modularAccountClient.waitForUserOperationTransaction(\\n result\\n);import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\",\"title\":\"3. Add or remove owners for a Modular Account\",\"titles\":[\"How to manage ownership of a Modular Account\",null]}]}],[\"index.5db954635beb64e0ad478bc7a4aca68cb77480f8d4d54f3ff72af3ba1c66e33d\",{\"mdx\":\"---\\ntitle: Modular Account • Upgrading to a Modular Account using Account Kit\\ndescription: Upgrading to a Modular Account using Account Kit\\n---\\n\\n# Upgrading to a Modular Account\\n\\nUpgrading a `SmartContractAccount` can be done easily using Account Kit. It just involves a simple call to a single function on the `SmartAccountClient`, namely `upgradeAccount`, along with the necessary call data, `UpgradeToData`, for the account targeted for the upgrade. For upgrading to a Modular Account, you can use the utility function `getMSCAUpgradeToData` provided by the `@account-kit/smart-contracts` package to retrieve the call data for the upgrade. This process applies to any account with upgrade capabilities.\\n\\nUsing the Light Account as an example, here is an overview of how the upgrade can be executed using a Smart Account Client:\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { lightAccountClient } from \\\"./lightAccountClient\\\";\\nimport { getMSCAUpgradeToData } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst { createMAAccount, ...upgradeToData } = await getMSCAUpgradeToData(\\n lightAccountClient,\\n { account: lightAccountClient.account }\\n);\\n\\nconst hash = await lightAccountClient.upgradeAccount({\\n upgradeTo: upgradeToData,\\n waitForTx: true,\\n});\\n\\nconst upgradedAccount = await createMAAccount();\\n```\\n\\n```ts [lightAccountClient.ts] twoslash filename=\\\"lightAccountClient.ts\\\"\\nimport { createLightAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n:::\\n\\nThat is all! Now, you can create a smart account client to connect with the upgraded account as a Modular Account.\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { createAlchemySmartAccountClient } from \\\"@account-kit/infra\\\";\\nimport { multiOwnerPluginActions } from \\\"@account-kit/smart-contracts\\\";\\nimport { upgradedAccount } from \\\"./upgradedAccount\\\";\\n\\nconst upgradedAccountClient = await createAlchemySmartAccountClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n chain: lightAccountClient.chain,\\n account: upgradedAccount,\\n}).extend(multiOwnerPluginActions);\\n\\nconst owners = await upgradedAccountClient.readOwners();\\n```\\n\\n```ts [upgradedAccount.ts] twoslash filename=\\\"upgradedAccount.ts\\\"\\nimport { lightAccountClient } from \\\"./lightAccountClient\\\";\\nimport { getMSCAUpgradeToData } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst { createMAAccount, ...upgradeToData } = await getMSCAUpgradeToData(\\n lightAccountClient,\\n { account: lightAccountClient.account }\\n);\\n\\nconst hash = await lightAccountClient.upgradeAccount({\\n upgradeTo: upgradeToData,\\n waitForTx: true,\\n});\\n\\nexport const upgradedAccount = await createMAAccount();\\n```\\n\\n```ts [lightAccountClient.ts] twoslash filename=\\\"lightAccountClient.ts\\\"\\nimport { createLightAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/smart-contracts/modular-account/upgrading-to-modular-account#upgrading-to-a-modular-account\",\"html\":\"\\n

Upgrading a SmartContractAccount can be done easily using Account Kit. It just involves a simple call to a single function on the SmartAccountClient, namely upgradeAccount, along with the necessary call data, UpgradeToData, for the account targeted for the upgrade. For upgrading to a Modular Account, you can use the utility function getMSCAUpgradeToData provided by the @account-kit/smart-contracts package to retrieve the call data for the upgrade. This process applies to any account with upgrade capabilities.

\\n

Using the Light Account as an example, here is an overview of how the upgrade can be executed using a Smart Account Client:

\\n
// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "YOUR_API_KEY",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "YOUR_API_KEY",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { lightAccountClient } from "./lightAccountClient";\\nimport { getMSCAUpgradeToData } from "@account-kit/smart-contracts";\\n \\nconst { createMAAccount, ...upgradeToData } = await getMSCAUpgradeToData(\\n  lightAccountClient,\\n  { account: lightAccountClient.account }\\n);\\n \\nconst hash = await lightAccountClient.upgradeAccount({\\n  upgradeTo: upgradeToData,\\n  waitForTx: true,\\n});\\n \\nconst upgradedAccount = await createMAAccount();
import { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "YOUR_API_KEY",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n

That is all! Now, you can create a smart account client to connect with the upgraded account as a Modular Account.

\\n
// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "YOUR_API_KEY",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: upgradedAccount.ts\\n \\n// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "YOUR_API_KEY",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { lightAccountClient } from "./lightAccountClient";\\nimport { getMSCAUpgradeToData } from "@account-kit/smart-contracts";\\n \\nconst { createMAAccount, ...upgradeToData } = await getMSCAUpgradeToData(\\n  lightAccountClient,\\n  { account: lightAccountClient.account }\\n);\\n \\nconst hash = await lightAccountClient.upgradeAccount({\\n  upgradeTo: upgradeToData,\\n  waitForTx: true,\\n});\\n \\nexport const upgradedAccount = await createMAAccount();\\n// @filename: example.js\\n \\n// ---cut---\\nimport { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { multiOwnerPluginActions } from "@account-kit/smart-contracts";\\nimport { upgradedAccount } from "./upgradedAccount";\\n \\nconst upgradedAccountClient = await createAlchemySmartAccountClient({\\n  apiKey: "YOUR_API_KEY",\\n  chain: lightAccountClient.chain,\\n  account: upgradedAccount,\\n}).extend(multiOwnerPluginActions);\\n \\nconst owners = await upgradedAccountClient.readOwners();
// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "YOUR_API_KEY",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "YOUR_API_KEY",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { lightAccountClient } from "./lightAccountClient";\\nimport { getMSCAUpgradeToData } from "@account-kit/smart-contracts";\\n \\nconst { createMAAccount, ...upgradeToData } = await getMSCAUpgradeToData(\\n  lightAccountClient,\\n  { account: lightAccountClient.account }\\n);\\n \\nconst hash = await lightAccountClient.upgradeAccount({\\n  upgradeTo: upgradeToData,\\n  waitForTx: true,\\n});\\n \\nexport const upgradedAccount = await createMAAccount();
import { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "YOUR_API_KEY",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\",\"id\":\"pages/smart-contracts/modular-account/upgrading-to-modular-account.mdx#upgrading-to-a-modular-account\",\"isPage\":true,\"text\":\"\\nUpgrading a SmartContractAccount can be done easily using Account Kit. It just involves a simple call to a single function on the SmartAccountClient, namely upgradeAccount, along with the necessary call data, UpgradeToData, for the account targeted for the upgrade. For upgrading to a Modular Account, you can use the utility function getMSCAUpgradeToData provided by the @account-kit/smart-contracts package to retrieve the call data for the upgrade. This process applies to any account with upgrade capabilities.\\nUsing the Light Account as an example, here is an overview of how the upgrade can be executed using a Smart Account Client:\\n// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "YOUR_API_KEY",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "YOUR_API_KEY",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { lightAccountClient } from "./lightAccountClient";\\nimport { getMSCAUpgradeToData } from "@account-kit/smart-contracts";\\n \\nconst { createMAAccount, ...upgradeToData } = await getMSCAUpgradeToData(\\n lightAccountClient,\\n { account: lightAccountClient.account }\\n);\\n \\nconst hash = await lightAccountClient.upgradeAccount({\\n upgradeTo: upgradeToData,\\n waitForTx: true,\\n});\\n \\nconst upgradedAccount = await createMAAccount();import { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "YOUR_API_KEY",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\nThat is all! Now, you can create a smart account client to connect with the upgraded account as a Modular Account.\\n// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "YOUR_API_KEY",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: upgradedAccount.ts\\n \\n// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "YOUR_API_KEY",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { lightAccountClient } from "./lightAccountClient";\\nimport { getMSCAUpgradeToData } from "@account-kit/smart-contracts";\\n \\nconst { createMAAccount, ...upgradeToData } = await getMSCAUpgradeToData(\\n lightAccountClient,\\n { account: lightAccountClient.account }\\n);\\n \\nconst hash = await lightAccountClient.upgradeAccount({\\n upgradeTo: upgradeToData,\\n waitForTx: true,\\n});\\n \\nexport const upgradedAccount = await createMAAccount();\\n// @filename: example.js\\n \\n// ---cut---\\nimport { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { multiOwnerPluginActions } from "@account-kit/smart-contracts";\\nimport { upgradedAccount } from "./upgradedAccount";\\n \\nconst upgradedAccountClient = await createAlchemySmartAccountClient({\\n apiKey: "YOUR_API_KEY",\\n chain: lightAccountClient.chain,\\n account: upgradedAccount,\\n}).extend(multiOwnerPluginActions);\\n \\nconst owners = await upgradedAccountClient.readOwners();// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "YOUR_API_KEY",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: lightAccountClient.ts\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "YOUR_API_KEY",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { lightAccountClient } from "./lightAccountClient";\\nimport { getMSCAUpgradeToData } from "@account-kit/smart-contracts";\\n \\nconst { createMAAccount, ...upgradeToData } = await getMSCAUpgradeToData(\\n lightAccountClient,\\n { account: lightAccountClient.account }\\n);\\n \\nconst hash = await lightAccountClient.upgradeAccount({\\n upgradeTo: upgradeToData,\\n waitForTx: true,\\n});\\n \\nexport const upgradedAccount = await createMAAccount();import { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "YOUR_API_KEY",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\",\"title\":\"Upgrading to a Modular Account\",\"titles\":[]}]}],[\"index.6e42e27942f266ffb7305b9e1f42d39e957e40b834319e75b4beb2bbbfcdb45d\",{\"mdx\":\"---\\ntitle: How to manage ownership of a Multi-Owner Light Account\\ndescription: Follow this guide to manage ownership of a Multi-Owner Light\\n Account with Account Kit, a vertically integrated stack for building apps that\\n support ERC-4337 and ERC-6900.\\n---\\n\\n# How to manage ownership of `MultiOwnerLightAccount`\\n\\nA `MultiOwnerLightAccount` has one or more ECDSA or SCA owners. This lets your account integrate with multiple signers at once, and supports recovering your account if one signer is lost.\\n\\nThe `MultiOwnerLightAccount` is able to:\\n\\n- Update (add or remove) owners for an account.\\n- Show all owners of an account.\\n- Validate signed signatures of ERC-4337 enabled user operations as well as regular transactions.\\n\\nWhen you connect your `MultiOwnerLightAccount` to `SmartAccountClient` you can extend the client with `multiOwnerLightAccountClientActions`, which exposes a set of methods available to call the `MultiOwnerLightAccount` with the client connected to the account.\\n\\n:::tip[Note]\\nWhen using `createMultiOwnerLightAccountAlchemyClient` in `@account-kit/smart-contracts`, the `SmartAccountClient` comes automatically extended with `multiOwnerLightAccountClientActions` as defaults available for use.\\n:::\\n\\n### 1. Get all current owners of a `MultiOwnerLightAccount`\\n\\nYou can use the `getOwnerAddresses` method on the `MultiOwnerLightAccount` object, which can be accessed from a connected client.\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { multiOwnerLightAccountClient } from \\\"./client\\\";\\n\\nconst owners = await multiOwnerLightAccountClient.account.getOwnerAddresses();\\n```\\n\\n```ts [client.ts] twoslash filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/multi-owner-light-account-client.ts]\\n```\\n\\n:::\\n\\n### 2. Add or remove owners for a `MultiOwnerLightAccount`\\n\\nYou can use the `updateOwners` method on the `multiOwnerLightAccountClientActions` extended smart account client to add or remove owners from the `MultiOwnerLightAccount`.\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { multiOwnerLightAccountClient } from \\\"./client\\\";\\n\\nconst ownersToAdd = []; // the addresses of owners to be added\\nconst ownersToRemove = []; // the addresses of owners to be removed\\n\\nconst opHash = await multiOwnerLightAccountClient.updateOwners({\\n ownersToAdd,\\n ownersToRemove,\\n});\\n\\nconst txHash =\\n await multiOwnerLightAccountClient.waitForUserOperationTransaction({\\n hash: opHash,\\n });\\n```\\n\\n```ts [client.ts] twoslash filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/multi-owner-light-account-client.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/smart-contracts/transfer-ownership/multi-owner-light-account#how-to-manage-ownership-of-multiownerlightaccount\",\"html\":\"\\n

A MultiOwnerLightAccount has one or more ECDSA or SCA owners. This lets your account integrate with multiple signers at once, and supports recovering your account if one signer is lost.

\\n

The MultiOwnerLightAccount is able to:

\\n
    \\n
  • Update (add or remove) owners for an account.
  • \\n
  • Show all owners of an account.
  • \\n
  • Validate signed signatures of ERC-4337 enabled user operations as well as regular transactions.
  • \\n
\\n

When you connect your MultiOwnerLightAccount to SmartAccountClient you can extend the client with multiOwnerLightAccountClientActions, which exposes a set of methods available to call the MultiOwnerLightAccount with the client connected to the account.

\\n\\n\",\"id\":\"pages/smart-contracts/transfer-ownership/multi-owner-light-account.mdx#how-to-manage-ownership-of-multiownerlightaccount\",\"isPage\":true,\"text\":\"\\nA MultiOwnerLightAccount has one or more ECDSA or SCA owners. This lets your account integrate with multiple signers at once, and supports recovering your account if one signer is lost.\\nThe MultiOwnerLightAccount is able to:\\n\\nUpdate (add or remove) owners for an account.\\nShow all owners of an account.\\nValidate signed signatures of ERC-4337 enabled user operations as well as regular transactions.\\n\\nWhen you connect your MultiOwnerLightAccount to SmartAccountClient you can extend the client with multiOwnerLightAccountClientActions, which exposes a set of methods available to call the MultiOwnerLightAccount with the client connected to the account.\\nNoteWhen using createMultiOwnerLightAccountAlchemyClient in @account-kit/smart-contracts, the SmartAccountClient comes automatically extended with multiOwnerLightAccountClientActions as defaults available for use.\\n\",\"title\":\"How to manage ownership of MultiOwnerLightAccount\",\"titles\":[]},{\"href\":\"/smart-contracts/transfer-ownership/multi-owner-light-account#1-get-all-current-owners-of-a-multiownerlightaccount\",\"html\":\"\\n

You can use the getOwnerAddresses method on the MultiOwnerLightAccount object, which can be accessed from a connected client.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n  await createMultiOwnerLightAccountAlchemyClient({\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n    chain: sepolia,\\n    apiKey: "YOUR_API_KEY",\\n  });\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n  await createMultiOwnerLightAccountAlchemyClient({\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n    chain: sepolia,\\n    apiKey: "YOUR_API_KEY",\\n  });\\n// @filename: example.js\\n \\n// ---cut---\\nimport { multiOwnerLightAccountClient } from "./client";\\n \\nconst owners = await multiOwnerLightAccountClient.account.getOwnerAddresses();
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n  await createMultiOwnerLightAccountAlchemyClient({\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n    chain: sepolia,\\n    apiKey: "YOUR_API_KEY",\\n  });
\\n\",\"id\":\"pages/smart-contracts/transfer-ownership/multi-owner-light-account.mdx#1-get-all-current-owners-of-a-multiownerlightaccount\",\"isPage\":false,\"text\":\"\\nYou can use the getOwnerAddresses method on the MultiOwnerLightAccount object, which can be accessed from a connected client.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n await createMultiOwnerLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n });\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n await createMultiOwnerLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n });\\n// @filename: example.js\\n \\n// ---cut---\\nimport { multiOwnerLightAccountClient } from "./client";\\n \\nconst owners = await multiOwnerLightAccountClient.account.getOwnerAddresses();import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n await createMultiOwnerLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n });\\n\",\"title\":\"1. Get all current owners of a MultiOwnerLightAccount\",\"titles\":[\"How to manage ownership of MultiOwnerLightAccount\",null]},{\"href\":\"/smart-contracts/transfer-ownership/multi-owner-light-account#2-add-or-remove-owners-for-a-multiownerlightaccount\",\"html\":\"\\n

You can use the updateOwners method on the multiOwnerLightAccountClientActions extended smart account client to add or remove owners from the MultiOwnerLightAccount.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n  await createMultiOwnerLightAccountAlchemyClient({\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n    chain: sepolia,\\n    apiKey: "YOUR_API_KEY",\\n  });\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n  await createMultiOwnerLightAccountAlchemyClient({\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n    chain: sepolia,\\n    apiKey: "YOUR_API_KEY",\\n  });\\n// @filename: example.js\\n \\n// ---cut---\\nimport { multiOwnerLightAccountClient } from "./client";\\n \\nconst ownersToAdd = []; // the addresses of owners to be added\\nconst ownersToRemove = []; // the addresses of owners to be removed\\n \\nconst opHash = await multiOwnerLightAccountClient.updateOwners({\\n  ownersToAdd,\\n  ownersToRemove,\\n});\\n \\nconst txHash =\\n  await multiOwnerLightAccountClient.waitForUserOperationTransaction({\\n    hash: opHash,\\n  });
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n  await createMultiOwnerLightAccountAlchemyClient({\\n    signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n    chain: sepolia,\\n    apiKey: "YOUR_API_KEY",\\n  });
\",\"id\":\"pages/smart-contracts/transfer-ownership/multi-owner-light-account.mdx#2-add-or-remove-owners-for-a-multiownerlightaccount\",\"isPage\":false,\"text\":\"\\nYou can use the updateOwners method on the multiOwnerLightAccountClientActions extended smart account client to add or remove owners from the MultiOwnerLightAccount.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n await createMultiOwnerLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n });\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n await createMultiOwnerLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n });\\n// @filename: example.js\\n \\n// ---cut---\\nimport { multiOwnerLightAccountClient } from "./client";\\n \\nconst ownersToAdd = []; // the addresses of owners to be added\\nconst ownersToRemove = []; // the addresses of owners to be removed\\n \\nconst opHash = await multiOwnerLightAccountClient.updateOwners({\\n ownersToAdd,\\n ownersToRemove,\\n});\\n \\nconst txHash =\\n await multiOwnerLightAccountClient.waitForUserOperationTransaction({\\n hash: opHash,\\n });import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const multiOwnerLightAccountClient =\\n await createMultiOwnerLightAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n apiKey: "YOUR_API_KEY",\\n });\",\"title\":\"2. Add or remove owners for a MultiOwnerLightAccount\",\"titles\":[\"How to manage ownership of MultiOwnerLightAccount\",null]}]}],[\"index.719851936788136081fee82389dce6f61e7ef3e9bb707f8c5e06cfa369e328b2\",{\"mdx\":\"---\\ntitle: Light Account\\ndescription: What is Light Account?\\n---\\n\\n# Light Account\\n\\n## Overview\\n\\nLight Account is a collection of lightweight [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) smart accounts. We started with the Ethereum Foundation's canonical [SimpleAccount](https://github.com/eth-infinitism/account-abstraction/blob/develop/contracts/samples/SimpleAccount.sol) and added key improvements. It is fully production-ready [multiple](https://github.com/alchemyplatform/light-account/blob/develop/audits/2024-01-09_quantstamp_aa8196b.pdf) [audits](https://github.com/alchemyplatform/light-account/blob/develop/audits/2024-04-26_quantstamp_93f46a2.pdf), gas optimizations, and [ERC-1271](https://eips.ethereum.org/EIPS/eip-1271) signature support. Additionally, Light Account supports ownership transfers to ensure you and your users don't get locked into a particular signer.\\n\\n## Light Account variants\\n\\nLight Account has two variants catered to particular use cases. Both variants inherit the characteristics and features listed above.\\n\\n### `LightAccount`\\n\\nThis is the default variant of Light Account that supports a single ECDSA or SCA owner. It is slightly more gas efficient than `MultiOwnerLightAccount`, and can be useful when you want to maximally optimize for gas spend or ensure that only one signer has access to the account at any given time.\\n\\n`LightAccount` comes in versions v1.1.0 and v2.0.0, which make use of the v0.6 and v0.7 entry points respectively.\\n\\nFor backwards compatibility, `LightAccount` defaults to version v2.0.0. However, once a version is chosen and the Light Account is created, the version must remain consistent in order for the Light Account client to work with the existing Light Account.\\n\\n### `MultiOwnerLightAccount`\\n\\nMulti-Owner Light Account is a variant of Light Account that supports multiple ECDSA or SCA owners at once rather than a single one. Each owner has full control over the account, including the ability to add or remove other owners. This lets your account integrate with multiple signers at once, and supports recovering your account if one signer is lost.\\n\\nMulti-Owner Light Account uses v0.7 of the entry point.\\n\\n## Developer links\\n\\n- [Light Account deployment addresses](/smart-contracts/light-account/deployments)\\n- [Light Account Github repo](https://github.com/alchemyplatform/light-account)\\n- [Quantstamp audit report](https://github.com/alchemyplatform/light-account/blob/develop/audits/2024-04-26_quantstamp_93f46a2.pdf)\\n\",\"document\":[{\"href\":\"/smart-contracts/light-account#light-account\",\"html\":\"\\n\",\"id\":\"pages/smart-contracts/light-account/#light-account\",\"isPage\":true,\"text\":\"\\n\",\"title\":\"Light Account\",\"titles\":[]},{\"href\":\"/smart-contracts/light-account#overview\",\"html\":\"\\n

Light Account is a collection of lightweight ERC-4337 smart accounts. We started with the Ethereum Foundation's canonical SimpleAccount and added key improvements. It is fully production-ready multiple audits, gas optimizations, and ERC-1271 signature support. Additionally, Light Account supports ownership transfers to ensure you and your users don't get locked into a particular signer.

\\n\",\"id\":\"pages/smart-contracts/light-account/#overview\",\"isPage\":false,\"text\":\"\\nLight Account is a collection of lightweight ERC-4337 smart accounts. We started with the Ethereum Foundation's canonical SimpleAccount and added key improvements. It is fully production-ready multiple audits, gas optimizations, and ERC-1271 signature support. Additionally, Light Account supports ownership transfers to ensure you and your users don't get locked into a particular signer.\\n\",\"title\":\"Overview\",\"titles\":[\"Light Account\"]},{\"href\":\"/smart-contracts/light-account#light-account-variants\",\"html\":\"\\n

Light Account has two variants catered to particular use cases. Both variants inherit the characteristics and features listed above.

\\n\",\"id\":\"pages/smart-contracts/light-account/#light-account-variants\",\"isPage\":false,\"text\":\"\\nLight Account has two variants catered to particular use cases. Both variants inherit the characteristics and features listed above.\\n\",\"title\":\"Light Account variants\",\"titles\":[\"Light Account\"]},{\"href\":\"/smart-contracts/light-account#lightaccount\",\"html\":\"\\n

This is the default variant of Light Account that supports a single ECDSA or SCA owner. It is slightly more gas efficient than MultiOwnerLightAccount, and can be useful when you want to maximally optimize for gas spend or ensure that only one signer has access to the account at any given time.

\\n

LightAccount comes in versions v1.1.0 and v2.0.0, which make use of the v0.6 and v0.7 entry points respectively.

\\n

For backwards compatibility, LightAccount defaults to version v2.0.0. However, once a version is chosen and the Light Account is created, the version must remain consistent in order for the Light Account client to work with the existing Light Account.

\\n\",\"id\":\"pages/smart-contracts/light-account/#lightaccount\",\"isPage\":false,\"text\":\"\\nThis is the default variant of Light Account that supports a single ECDSA or SCA owner. It is slightly more gas efficient than MultiOwnerLightAccount, and can be useful when you want to maximally optimize for gas spend or ensure that only one signer has access to the account at any given time.\\nLightAccount comes in versions v1.1.0 and v2.0.0, which make use of the v0.6 and v0.7 entry points respectively.\\nFor backwards compatibility, LightAccount defaults to version v2.0.0. However, once a version is chosen and the Light Account is created, the version must remain consistent in order for the Light Account client to work with the existing Light Account.\\n\",\"title\":\"LightAccount\",\"titles\":[\"Light Account\",\"Light Account variants\"]},{\"href\":\"/smart-contracts/light-account#multiownerlightaccount\",\"html\":\"\\n

Multi-Owner Light Account is a variant of Light Account that supports multiple ECDSA or SCA owners at once rather than a single one. Each owner has full control over the account, including the ability to add or remove other owners. This lets your account integrate with multiple signers at once, and supports recovering your account if one signer is lost.

\\n

Multi-Owner Light Account uses v0.7 of the entry point.

\\n\",\"id\":\"pages/smart-contracts/light-account/#multiownerlightaccount\",\"isPage\":false,\"text\":\"\\nMulti-Owner Light Account is a variant of Light Account that supports multiple ECDSA or SCA owners at once rather than a single one. Each owner has full control over the account, including the ability to add or remove other owners. This lets your account integrate with multiple signers at once, and supports recovering your account if one signer is lost.\\nMulti-Owner Light Account uses v0.7 of the entry point.\\n\",\"title\":\"MultiOwnerLightAccount\",\"titles\":[\"Light Account\",\"Light Account variants\"]},{\"href\":\"/smart-contracts/light-account#developer-links\",\"html\":\"\\n\",\"id\":\"pages/smart-contracts/light-account/#developer-links\",\"isPage\":false,\"text\":\"\\n\\nLight Account deployment addresses\\nLight Account Github repo\\nQuantstamp audit report\\n\",\"title\":\"Developer links\",\"titles\":[\"Light Account\"]}]}],[\"index.4b8fabf6a37f99f859b2a6e5939de24c06dd8493f350284f4148f9d28bcafa13\",{\"mdx\":\"---\\ntitle: Modular Account • Getting started\\ndescription: Getting started with Modular Account in Account Kit\\n---\\n\\n# Getting started with Modular Account\\n\\nIt is easy to get started with Modular Account! We will show you two different ways using Alchemy Infra or 3rd party infra.\\n\\n## Install packages\\n\\nFirst, install the the `@account-kit/smart-contracts` package.\\n\\n:::code-group\\n\\n```bash [yarn]\\nyarn add @account-kit/smart-contracts\\n# if using alchemy infra\\nyarn add @account-kit/infra\\n```\\n\\n```bash [npm]\\nyarn add @account-kit/smart-contracts\\n# if using alchemy infra\\nyarn add @account-kit/infra\\n```\\n\\n:::\\n\\n## With Alchemy Infra\\n\\nThen you can do the following:\\n\\n```ts twoslash\\nimport { createModularAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nconst alchemyAccountClient = await createModularAccountAlchemyClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n:::tip[Address calculation]\\nFor Modular Account, the address of the smart account will be calculated as a combination of [the owners and the salt](https://github.com/alchemyplatform/modular-account/blob/v1.0.x/src/factory/MultiOwnerModularAccountFactory.sol#L79-L82). You will get the same smart account address each time you supply the same `owners`, the signer(s) used to create the account for the first time. You can also optionally supply `salt` if you want a different address for the same `owners` param (the default salt is `0n`).\\n\\nIf you want to use a signer to connect to an account whose address does not map to the contract-generated address, you can supply the `accountAddress` to connect with the account of interest. In that case, the `signer` address is not used for address calculation, but only for signing the operation.\\n:::\\n\\n## With 3rd-party infra\\n\\nIf you're using a 3rd-party for infra, we also expose a client that you can use to interact with Modular Account using other RPC providers.\\n\\n```ts twoslash\\nimport { createMultiOwnerModularAccountClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nconst accountClient = await createMultiOwnerModularAccountClient({\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\nNext, if you want to use a different `signer` with a smart account signer, check out [choosing a signer](/signer/what-is-a-signer). Otherwise, if you are ready to get on-chain, go to [send user operations](/infra/send-user-operations).\\n\",\"document\":[{\"href\":\"/smart-contracts/modular-account/getting-started#getting-started-with-modular-account\",\"html\":\"\\n

It is easy to get started with Modular Account! We will show you two different ways using Alchemy Infra or 3rd party infra.

\\n\",\"id\":\"pages/smart-contracts/modular-account/getting-started.mdx#getting-started-with-modular-account\",\"isPage\":true,\"text\":\"\\nIt is easy to get started with Modular Account! We will show you two different ways using Alchemy Infra or 3rd party infra.\\n\",\"title\":\"Getting started with Modular Account\",\"titles\":[]},{\"href\":\"/smart-contracts/modular-account/getting-started#install-packages\",\"html\":\"\\n

First, install the the @account-kit/smart-contracts package.

\\n
yarn add @account-kit/smart-contracts\\n# if using alchemy infra\\nyarn add @account-kit/infra
yarn add @account-kit/smart-contracts\\n# if using alchemy infra\\nyarn add @account-kit/infra
\\n\",\"id\":\"pages/smart-contracts/modular-account/getting-started.mdx#install-packages\",\"isPage\":false,\"text\":\"\\nFirst, install the the @account-kit/smart-contracts package.\\nyarn add @account-kit/smart-contracts\\n# if using alchemy infra\\nyarn add @account-kit/infrayarn add @account-kit/smart-contracts\\n# if using alchemy infra\\nyarn add @account-kit/infra\\n\",\"title\":\"Install packages\",\"titles\":[\"Getting started with Modular Account\"]},{\"href\":\"/smart-contracts/modular-account/getting-started#with-alchemy-infra\",\"html\":\"\\n

Then you can do the following:

\\n
import { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nconst alchemyAccountClient = await createModularAccountAlchemyClient({\\n  apiKey: "your-api-key",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\\n\",\"id\":\"pages/smart-contracts/modular-account/getting-started.mdx#with-alchemy-infra\",\"isPage\":false,\"text\":\"\\nThen you can do the following:\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nconst alchemyAccountClient = await createModularAccountAlchemyClient({\\n apiKey: "your-api-key",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\nAddress calculationFor Modular Account, the address of the smart account will be calculated as a combination of the owners and the salt. You will get the same smart account address each time you supply the same owners, the signer(s) used to create the account for the first time. You can also optionally supply salt if you want a different address for the same owners param (the default salt is 0n).If you want to use a signer to connect to an account whose address does not map to the contract-generated address, you can supply the accountAddress to connect with the account of interest. In that case, the signer address is not used for address calculation, but only for signing the operation.\\n\",\"title\":\"With Alchemy Infra\",\"titles\":[\"Getting started with Modular Account\"]},{\"href\":\"/smart-contracts/modular-account/getting-started#with-3rd-party-infra\",\"html\":\"\\n

If you're using a 3rd-party for infra, we also expose a client that you can use to interact with Modular Account using other RPC providers.

\\n
import { createMultiOwnerModularAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nconst accountClient = await createMultiOwnerModularAccountClient({\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n

Next, if you want to use a different signer with a smart account signer, check out choosing a signer. Otherwise, if you are ready to get on-chain, go to send user operations.

\",\"id\":\"pages/smart-contracts/modular-account/getting-started.mdx#with-3rd-party-infra\",\"isPage\":false,\"text\":\"\\nIf you're using a 3rd-party for infra, we also expose a client that you can use to interact with Modular Account using other RPC providers.\\nimport { createMultiOwnerModularAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nconst accountClient = await createMultiOwnerModularAccountClient({\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\nNext, if you want to use a different signer with a smart account signer, check out choosing a signer. Otherwise, if you are ready to get on-chain, go to send user operations.\",\"title\":\"With 3rd-party infra\",\"titles\":[\"Getting started with Modular Account\"]}]}],[\"index.35fc497f3b25eacdcd3a0d8e8a41382ed897e42a30b625ad8572c85974801625\",{\"mdx\":\"---\\ntitle: Extending Smart Accounts • Installing & uninstalling plugins on a Modular\\n Account\\ndescription: Follow this guide to install and uninstall plugins on a Modular\\n Account with Account Kit, a vertically integrated stack for building apps that\\n support ERC-4337 and ERC-6900.\\n---\\n\\n# How to install and uninstall plugins on a Modular Account\\n\\n[ERC-6900](https://eips.ethereum.org/EIPS/eip-6900) Modular Accounts implements Plugin manager interface [`IPluginManager.sol`](https://eips.ethereum.org/EIPS/eip-6900#ipluginmanagersol) to support installing and uninstalling plugins on a Modular Account. This contract interface defines the method `installPlugin()` and `uninstallPlugin()` that clients can use to install or uninstall plugins on a Modular Account.\\n\\nAccount Kit provides a streamlined experience of interacting with the Modular Account AccoutLoupe interface easily by providing `pluginManagerActions` defined in `@account-kit/smart-contracts` package. When you connect your Modular Account to `SmartAccountClient` you can extend the client with `pluginManagerActions`, which exposes a set of methods available to call the account `AccountLoupe` with the client connected to the account.\\n\\nThere are two ways to install plugins. The first method is to use the `pluginManagerActions`'s generic `installPlugin` method, but this method requires the [`PluginGenConfig`](https://github.com/alchemyplatform/aa-sdk/blob/a9a11ec23b1084fa43edaa3cb933ff36318ca573/packages/accounts/plugindefs/types.ts) configure the correct plugin dependencies and function references for the plugin.\\n\\nAccount Kit provides a more robust, easier way to install plugins with `pluginActions`. Each plugin comes with the its own `pluginActions` that includes already configured install method, named `install`, for installing any plugin of interest. For example, `MultiOwnerPlugin` has `multiOwnerPluginActions` that includes `installMultiOwnerPlugin()` method, and `SessionKeyPlugin` has `sessionKeyPluginActions` that includes `installSessionKeyPlugin()` method, all exported from the `@account-kit/smart-contracts` package.\\n\\nThis guide will use the `SessionKeyPlugin` as an example to show how you can install `SessionKeyPlugin` easily using the `SmartAccountClient` extended with `sessionKeyPluginActions`.\\n\\n:::warning\\n**Please use caution when uninstalling plug-ins to avoid \\\"bricking\\\" your account!**\\n\\nIf the account only has 1 plug-in installed and you uninstall it, there will no longer be a validator on the account (no owner) and you will not be able to use or recover it.\\n\\nFor example, do not call uninstall plugin of the multi-owner plugin on a Modular Account in a single action.\\n:::\\n\\n## 1. Installing the Session Key Plugin\\n\\nYou should first extend the `SmartAccountClient` connected to a Modular Account with `sessionKeyPluginActions`.\\n\\nThen, you can use the `installSessionKeyPlugin()` method exposed on `sessionKeyPluginActions` extended smart account client to install the session key plugin for the connected account.\\n\\n:::tip[Note]\\nWhen using `createModularAccountAlchemyClient` in `@account-kit/smart-contracts`, the `SmartAccountClient` comes automatically extended with `multiOwnerPluginActions`, `pluginManagerActions`, and `accountLoupeActions` decorators as defaults available for use.\\n:::\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { modularAccountClient } from \\\"./client\\\";\\nimport { sessionKeyPluginActions } from \\\"@account-kit/smart-contracts\\\";\\n\\n// [!code focus:99]\\n// extend smart account client with sessionKeyPluginActions to call SessionKeyPlugin methods\\nconst sessionKeyExtendedClient = modularAccountClient.extend(\\n sessionKeyPluginActions\\n);\\n\\nconst { hash } = await sessionKeyExtendedClient.installSessionKeyPlugin({\\n // 1st arg is the initial set of session keys\\n // 2nd arg is the tags for the session keys\\n // 3rd arg is the initial set of permissions\\n args: [[], [], []],\\n});\\n\\nawait client.waitForUserOperationTransaction({ hash });\\n```\\n\\n```ts [client.ts] twoslash filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\\nRefer to the [Session Key](/smart-contracts/session-keys/) section to learn more about using the `SessionKeyPlugin`.\\n\\n## 2. Uninstalling the Session Key Plugin\\n\\nOn the other hand, uninstalling plugins usually does not involve configuring contract dependencies or function references. You can use the `pluginManagerActions`'s generic `uninstallPlugin` method to uninstall a particular plugin of interest.\\nFirst, extend the `SmartAccountClient` connected to a Modular Account with `pluginManagerActions`.\\n\\nThen, you can use the `uninstallPlugin()` method exposed on `pluginManagerActions` extended smart account client to uninstall the session key plugin for the connected account.\\n\\n:::warning\\n**Please use caution when uninstalling plug-ins to avoid \\\"bricking\\\" your account!**\\n\\nIf the account only has 1 plug-in installed and you uninstall it, there will no longer be a validator on the account (no owner) and you will not be able to use or recover it.\\n\\nFor example, do not call uninstall plugin of the multi-owner plugin on a Modular Account in a single action.\\n:::\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { chain, modularAccountClient } from \\\"./client\\\";\\nimport { SessionKeyPlugin } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst { hash } = await modularAccountClient.uninstallPlugin({\\n pluginAddress: SessionKeyPlugin.meta.addresses[chain.id],\\n});\\n\\nawait modularAccountClient.waitForUserOperationTransaction({ hash });\\n```\\n\\n```ts [client.ts] twoslash filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\\n### Extend Modular Account with Multisig\\n\\nAs mentioned above, you should not uninstall the multiowner plugin from a Modular Account in a single action. This will leave your account without a validator, no owner, and therefore will be unusable.\\n\\n**Recommended flow today**: Rather than switch ownership post creation, use `createModularAccountAlchemyClient` OR the `createMultisigAccountAlchemyClient` on account creation directly depending on if you want multi-owner or multi-sig ownership respectively.\\n\\n**Problem**: In order to switch from multi-owner (installed in Modular Account by default) to multi-sig, you will need to batch call an uninstall of the multi-owner plugin and an install of the multi-sig plugin. **It is required to batch these steps!** If you uninstall the multi-owner plugin in a single action, the account will no longer have a validation function, and will be bricked (unusable).\\n\\n**Solution for extending Modular Account AFTER deployment**: You will need to manually encode 1) the uninstall of the multi-owner plugin and 2) the install of the multi-sig plugin and batch those together in one UO (using `encodeFunctionData` and [batching](/infra/send-user-operations#batch-user-operations) using `sendUserOperation`). We are working to make this workflow easier in the next SDK version.\\n\\nSee a working example in this [discussion](https://github.com/alchemyplatform/aa-sdk/discussions/865#discussioncomment-10206160).\\n\\nAfter uninstalling and installing successfully, you will then be able to use the Multisig Account Client to [sign and send UOs](/smart-contracts/modular-account/multisig-plugin/getting-started/).\\n\",\"document\":[{\"href\":\"/smart-contracts/install-plugins#how-to-install-and-uninstall-plugins-on-a-modular-account\",\"html\":\"\\n

ERC-6900 Modular Accounts implements Plugin manager interface IPluginManager.sol to support installing and uninstalling plugins on a Modular Account. This contract interface defines the method installPlugin() and uninstallPlugin() that clients can use to install or uninstall plugins on a Modular Account.

\\n

Account Kit provides a streamlined experience of interacting with the Modular Account AccoutLoupe interface easily by providing pluginManagerActions defined in @account-kit/smart-contracts package. When you connect your Modular Account to SmartAccountClient you can extend the client with pluginManagerActions, which exposes a set of methods available to call the account AccountLoupe with the client connected to the account.

\\n

There are two ways to install plugins. The first method is to use the pluginManagerActions's generic installPlugin method, but this method requires the PluginGenConfig configure the correct plugin dependencies and function references for the plugin.

\\n

Account Kit provides a more robust, easier way to install plugins with pluginActions. Each plugin comes with the its own pluginActions that includes already configured install method, named install<PluginName>, for installing any plugin of interest. For example, MultiOwnerPlugin has multiOwnerPluginActions that includes installMultiOwnerPlugin() method, and SessionKeyPlugin has sessionKeyPluginActions that includes installSessionKeyPlugin() method, all exported from the @account-kit/smart-contracts package.

\\n

This guide will use the SessionKeyPlugin as an example to show how you can install SessionKeyPlugin easily using the SmartAccountClient extended with sessionKeyPluginActions.

\\n\\n\",\"id\":\"pages/smart-contracts/install-plugins.mdx#how-to-install-and-uninstall-plugins-on-a-modular-account\",\"isPage\":true,\"text\":\"\\nERC-6900 Modular Accounts implements Plugin manager interface IPluginManager.sol to support installing and uninstalling plugins on a Modular Account. This contract interface defines the method installPlugin() and uninstallPlugin() that clients can use to install or uninstall plugins on a Modular Account.\\nAccount Kit provides a streamlined experience of interacting with the Modular Account AccoutLoupe interface easily by providing pluginManagerActions defined in @account-kit/smart-contracts package. When you connect your Modular Account to SmartAccountClient you can extend the client with pluginManagerActions, which exposes a set of methods available to call the account AccountLoupe with the client connected to the account.\\nThere are two ways to install plugins. The first method is to use the pluginManagerActions's generic installPlugin method, but this method requires the PluginGenConfig configure the correct plugin dependencies and function references for the plugin.\\nAccount Kit provides a more robust, easier way to install plugins with pluginActions. Each plugin comes with the its own pluginActions that includes already configured install method, named install<PluginName>, for installing any plugin of interest. For example, MultiOwnerPlugin has multiOwnerPluginActions that includes installMultiOwnerPlugin() method, and SessionKeyPlugin has sessionKeyPluginActions that includes installSessionKeyPlugin() method, all exported from the @account-kit/smart-contracts package.\\nThis guide will use the SessionKeyPlugin as an example to show how you can install SessionKeyPlugin easily using the SmartAccountClient extended with sessionKeyPluginActions.\\nPlease use caution when uninstalling plug-ins to avoid "bricking" your account!If the account only has 1 plug-in installed and you uninstall it, there will no longer be a validator on the account (no owner) and you will not be able to use or recover it.For example, do not call uninstall plugin of the multi-owner plugin on a Modular Account in a single action.\\n\",\"title\":\"How to install and uninstall plugins on a Modular Account\",\"titles\":[]},{\"href\":\"/smart-contracts/install-plugins#1-installing-the-session-key-plugin\",\"html\":\"\\n

You should first extend the SmartAccountClient connected to a Modular Account with sessionKeyPluginActions.

\\n

Then, you can use the installSessionKeyPlugin() method exposed on sessionKeyPluginActions extended smart account client to install the session key plugin for the connected account.

\\n\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport { sessionKeyPluginActions } from "@account-kit/smart-contracts";\\n \\n\\n// extend smart account client with sessionKeyPluginActions to call SessionKeyPlugin methods\\nconst sessionKeyExtendedClient = modularAccountClient.extend(\\n  sessionKeyPluginActions\\n);\\n \\nconst { hash } = await sessionKeyExtendedClient.installSessionKeyPlugin({\\n  // 1st arg is the initial set of session keys\\n  // 2nd arg is the tags for the session keys\\n  // 3rd arg is the initial set of permissions\\n  args: [[], [], []],\\n});\\n \\nawait client.waitForUserOperationTransaction({ hash });
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n

Refer to the Session Key section to learn more about using the SessionKeyPlugin.

\\n\",\"id\":\"pages/smart-contracts/install-plugins.mdx#1-installing-the-session-key-plugin\",\"isPage\":false,\"text\":\"\\nYou should first extend the SmartAccountClient connected to a Modular Account with sessionKeyPluginActions.\\nThen, you can use the installSessionKeyPlugin() method exposed on sessionKeyPluginActions extended smart account client to install the session key plugin for the connected account.\\nNoteWhen using createModularAccountAlchemyClient in @account-kit/smart-contracts, the SmartAccountClient comes automatically extended with multiOwnerPluginActions, pluginManagerActions, and accountLoupeActions decorators as defaults available for use.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport { sessionKeyPluginActions } from "@account-kit/smart-contracts";\\n \\n\\n// extend smart account client with sessionKeyPluginActions to call SessionKeyPlugin methods\\nconst sessionKeyExtendedClient = modularAccountClient.extend(\\n sessionKeyPluginActions\\n);\\n \\nconst { hash } = await sessionKeyExtendedClient.installSessionKeyPlugin({\\n // 1st arg is the initial set of session keys\\n // 2nd arg is the tags for the session keys\\n // 3rd arg is the initial set of permissions\\n args: [[], [], []],\\n});\\n \\nawait client.waitForUserOperationTransaction({ hash });import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\nRefer to the Session Key section to learn more about using the SessionKeyPlugin.\\n\",\"title\":\"1. Installing the Session Key Plugin\",\"titles\":[\"How to install and uninstall plugins on a Modular Account\"]},{\"href\":\"/smart-contracts/install-plugins#2-uninstalling-the-session-key-plugin\",\"html\":\"\\n

On the other hand, uninstalling plugins usually does not involve configuring contract dependencies or function references. You can use the pluginManagerActions's generic uninstallPlugin method to uninstall a particular plugin of interest.\\nFirst, extend the SmartAccountClient connected to a Modular Account with pluginManagerActions.

\\n

Then, you can use the uninstallPlugin() method exposed on pluginManagerActions extended smart account client to uninstall the session key plugin for the connected account.

\\n\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { chain, modularAccountClient } from "./client";\\nimport { SessionKeyPlugin } from "@account-kit/smart-contracts";\\n \\nconst { hash } = await modularAccountClient.uninstallPlugin({\\n  pluginAddress: SessionKeyPlugin.meta.addresses[chain.id],\\n});\\n \\nawait modularAccountClient.waitForUserOperationTransaction({ hash });
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/install-plugins.mdx#2-uninstalling-the-session-key-plugin\",\"isPage\":false,\"text\":\"\\nOn the other hand, uninstalling plugins usually does not involve configuring contract dependencies or function references. You can use the pluginManagerActions's generic uninstallPlugin method to uninstall a particular plugin of interest.\\nFirst, extend the SmartAccountClient connected to a Modular Account with pluginManagerActions.\\nThen, you can use the uninstallPlugin() method exposed on pluginManagerActions extended smart account client to uninstall the session key plugin for the connected account.\\nPlease use caution when uninstalling plug-ins to avoid "bricking" your account!If the account only has 1 plug-in installed and you uninstall it, there will no longer be a validator on the account (no owner) and you will not be able to use or recover it.For example, do not call uninstall plugin of the multi-owner plugin on a Modular Account in a single action.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { chain, modularAccountClient } from "./client";\\nimport { SessionKeyPlugin } from "@account-kit/smart-contracts";\\n \\nconst { hash } = await modularAccountClient.uninstallPlugin({\\n pluginAddress: SessionKeyPlugin.meta.addresses[chain.id],\\n});\\n \\nawait modularAccountClient.waitForUserOperationTransaction({ hash });import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"2. Uninstalling the Session Key Plugin\",\"titles\":[\"How to install and uninstall plugins on a Modular Account\"]},{\"href\":\"/smart-contracts/install-plugins#extend-modular-account-with-multisig\",\"html\":\"\\n

As mentioned above, you should not uninstall the multiowner plugin from a Modular Account in a single action. This will leave your account without a validator, no owner, and therefore will be unusable.

\\n

Recommended flow today: Rather than switch ownership post creation, use createModularAccountAlchemyClient OR the createMultisigAccountAlchemyClient on account creation directly depending on if you want multi-owner or multi-sig ownership respectively.

\\n

Problem: In order to switch from multi-owner (installed in Modular Account by default) to multi-sig, you will need to batch call an uninstall of the multi-owner plugin and an install of the multi-sig plugin. It is required to batch these steps! If you uninstall the multi-owner plugin in a single action, the account will no longer have a validation function, and will be bricked (unusable).

\\n

Solution for extending Modular Account AFTER deployment: You will need to manually encode 1) the uninstall of the multi-owner plugin and 2) the install of the multi-sig plugin and batch those together in one UO (using encodeFunctionData and batching using sendUserOperation). We are working to make this workflow easier in the next SDK version.

\\n

See a working example in this discussion.

\\n

After uninstalling and installing successfully, you will then be able to use the Multisig Account Client to sign and send UOs.

\",\"id\":\"pages/smart-contracts/install-plugins.mdx#extend-modular-account-with-multisig\",\"isPage\":false,\"text\":\"\\nAs mentioned above, you should not uninstall the multiowner plugin from a Modular Account in a single action. This will leave your account without a validator, no owner, and therefore will be unusable.\\nRecommended flow today: Rather than switch ownership post creation, use createModularAccountAlchemyClient OR the createMultisigAccountAlchemyClient on account creation directly depending on if you want multi-owner or multi-sig ownership respectively.\\nProblem: In order to switch from multi-owner (installed in Modular Account by default) to multi-sig, you will need to batch call an uninstall of the multi-owner plugin and an install of the multi-sig plugin. It is required to batch these steps! If you uninstall the multi-owner plugin in a single action, the account will no longer have a validation function, and will be bricked (unusable).\\nSolution for extending Modular Account AFTER deployment: You will need to manually encode 1) the uninstall of the multi-owner plugin and 2) the install of the multi-sig plugin and batch those together in one UO (using encodeFunctionData and batching using sendUserOperation). We are working to make this workflow easier in the next SDK version.\\nSee a working example in this discussion.\\nAfter uninstalling and installing successfully, you will then be able to use the Multisig Account Client to sign and send UOs.\",\"title\":\"Extend Modular Account with Multisig\",\"titles\":[\"How to install and uninstall plugins on a Modular Account\",\"2. Uninstalling the Session Key Plugin\"]}]}],[\"index.30d58f29d8bac96a8c9367628ef2f932310b0e98b2d7c23d2779e552afc045bf\",{\"mdx\":\"---\\ntitle: Session Key Supported Permissions\\ndescription: All permissions the Alchemy Session Key Plugin supports.\\n---\\n\\n# Supported Permissions\\n\\n### Time range\\n\\nSupports a start time and an end time for each session key.\\n\\n### Access control lists\\n\\nSupports either an allowlist or a denylist for addresses. Optionally, access control lists may also specify specific functions on contracts to allow or deny.\\n\\n### ERC-20 spending Limits\\n\\nSupports limiting how much of a specific ERC-20 token a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 100 USDC per week).\\n\\n### Native token spending limits\\n\\nSupports limiting how much of the native token, e.g. ETH or MATIC, a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).\\n\\n### Gas spending limits\\n\\nSupports limiting how much of the native token (e.g. ETH or MATIC) a session key can spend on gas. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).\\n\\nAlternatively, you can also require that a session key uses a specific paymaster address, instead of spending the account’s native token for gas.\\n\\n## Importance of Gas Limits\\n\\nGas spend limits are critically important to protecting the account. If you are using a session key, you should configure either a required paymaster rule or a gas spend limit. Failing to do so could allow a compromised session key to drain the account’s native token balance.\\n\\nNote that the gas limit is tracked in terms of native token units (wei), not in units of gas. The gas usage of a user operation is considered to be the maximum gas a user operation can spend, i.e. `total gas limit * maxFeePerGas`. This can overestimate when compared to the actual gas cost of each user operation.\\n\\n## Default values\\n\\nPermissions start with the following default values:\\n\\n| Permission | Default Value |\\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |\\n| Access control list | Type: allowlist
The list starts empty. When the allowlist is empty, all calls will be denied. |\\n| Time range | Unlimited |\\n| Native token spend limit | 0
This means all calls spending the native token will be denied, unless the limit is updated or removed. |\\n| ERC-20 spend limit | Unset. If you want to enabled an ERC-20 spend limit, add the ERC-20 token contract to the access control list and set the spending limit amount. |\\n| Gas spend limits | Unset. When defining the session key’s permissions, you should specify either a gas spending limit or a required paymaster. |\\n\\n## Using the PermissionsBuilder\\n\\nTo construct the data to set a key's permissions, you will need to use the `SessionKeyPermissionBuilder` class. This will allow you to specify a series of updates, and when complete, you may generate the encoded data to perform all updates at once.\\n\\nThe permissions data may be specified in 3 places:\\n\\n- In the Session Key Plugin's `onInstall` data, setting the intial permissions for a session key added at install time.\\n- As data for the initial permissions of a session key added via `addSessionKey`.\\n- As a parameter to the `updateKeyPermissions` function, to change the permissions of an existing key.\\n\\n#### Generating the permissions\\n\\n```ts\\n// [!include ~/shared/smart-contracts/session-keys/supported-permissions.ts:generatepermissions]\\n```\\n\\n#### Example: Permissions in plugin install data\\n\\n```ts\\n// [!include ~/shared/smart-contracts/session-keys/supported-permissions.ts:permissionsinplugininstall]\\n```\\n\\n#### Example: Initial permissions for a new key\\n\\n```ts\\n// [!include ~/shared/smart-contracts/session-keys/supported-permissions.ts:permissionsinadd]\\n```\\n\\n#### Exmaple: Updating a session key's permissions\\n\\nThis example updates a key's time range, but leaves other permissions to their current values.\\n\\n```ts\\n// [!include ~/shared/smart-contracts/session-keys/supported-permissions.ts:permissionsinupdate]\\n```\\n\\n### Permissions Builder full reference\\n\\n:::details[View the full set of supported permissions here]\\n\\n```ts\\n// [!include ~/../account-kit/smart-contracts/src/msca/plugins/session-key/permissions.ts]\\n```\\n\\n:::\\n\\n## Reading Permissions\\n\\nYou may wish to view the current permissions of a given session key. This can be done using view functions defined by the Session Key Plugin.\\n\\nHere's an example of viewing all permissions in TypeScript:\\n\\n```ts\\n// [!include ~/shared/smart-contracts/session-keys/supported-permissions.ts:viewpermissions]\\n```\\n\\n### Permission View Functions\\n\\nThe following view functions are declared by the session key plugin and used to read information about permissions. These are the functions used in the example above.\\n\\n```solidity\\nenum ContractAccessControlType {\\n ALLOWLIST, // Allowlist is default\\n DENYLIST,\\n ALLOW_ALL_ACCESS // Disables contract access control, any address and selector are allowed.\\n}\\n\\n// Struct returned by view functions to provide information about a session key's spend limit.\\n// Used for native token, ERC-20, and gas spend limits.\\nstruct SpendLimitInfo {\\n bool hasLimit;\\n uint256 limit;\\n uint256 limitUsed;\\n uint48 refreshInterval;\\n uint48 lastUsedTime;\\n}\\n\\n/// @notice Get the access control type for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return The access control type for the session key on the account.\\nfunction getAccessControlType(address account, address sessionKey)\\n external\\n view\\n returns (ContractAccessControlType);\\n\\n/// @notice Get an access control entry for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @param targetAddress The target address to check.\\n/// @return isOnList Whether the target address is on the list (either allowlist or blocklist depending on the\\n/// access control type).\\n/// @return checkSelectors Whether the target address should be checked for selectors during permissions\\n/// enforcement.\\nfunction getAccessControlEntry(address account, address sessionKey, address targetAddress)\\n external\\n view\\n returns (bool isOnList, bool checkSelectors);\\n\\n/// @notice Get whether a selector is on the access control list for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @param targetAddress The target address to check.\\n/// @param selector The selector to check.\\n/// @return isOnList Whether the selector is on the list (either allowlist or blocklist depending on the\\n/// access control type).\\nfunction isSelectorOnAccessControlList(\\n address account,\\n address sessionKey,\\n address targetAddress,\\n bytes4 selector\\n) external view returns (bool isOnList);\\n\\n/// @notice Get the active time range for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return validAfter The time after which the session key is valid.\\n/// @return validUntil The time until which the session key is valid.\\nfunction getKeyTimeRange(address account, address sessionKey)\\n external\\n view\\n returns (uint48 validAfter, uint48 validUntil);\\n\\n/// @notice Get the native token spend limit for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return A struct with fields describing the state of native token spending limits on this session key.\\nfunction getNativeTokenSpendLimitInfo(address account, address sessionKey)\\n external\\n view\\n returns (SpendLimitInfo memory);\\n\\n/// @notice Get the gas spend limit for a session key on an account.\\n/// Note that this spend limit is measured in wei, not units of gas.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return info A struct with fields describing the state of gas spending limits on this session key.\\n/// @return shouldReset Whether this session key must be reset by calling `resetSessionKeyGasLimitTimestamp`\\n/// before it can be used.\\nfunction getGasSpendLimit(address account, address sessionKey)\\n external\\n view\\n returns (SpendLimitInfo memory info, bool shouldReset);\\n\\n/// @notice Get the ERC20 spend limit for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @param token The token to check.\\n/// @return A struct with fields describing the state of ERC20 spending limits on this session key.\\nfunction getERC20SpendLimitInfo(address account, address sessionKey, address token)\\n external\\n view\\n returns (SpendLimitInfo memory);\\n\\n/// @notice Get the required paymaster address for a session key on an account, if any.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return The required paymaster address for this session key on this account, or the zero address if the\\n/// rule is disabled.\\nfunction getRequiredPaymaster(address account, address sessionKey) external view returns (address);\\n```\\n\",\"document\":[{\"href\":\"/smart-contracts/session-keys/supported-permissions#supported-permissions\",\"html\":\"\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#supported-permissions\",\"isPage\":true,\"text\":\"\\n\",\"title\":\"Supported Permissions\",\"titles\":[]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#time-range\",\"html\":\"\\n

Supports a start time and an end time for each session key.

\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#time-range\",\"isPage\":false,\"text\":\"\\nSupports a start time and an end time for each session key.\\n\",\"title\":\"Time range\",\"titles\":[\"Supported Permissions\",null]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#access-control-lists\",\"html\":\"\\n

Supports either an allowlist or a denylist for addresses. Optionally, access control lists may also specify specific functions on contracts to allow or deny.

\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#access-control-lists\",\"isPage\":false,\"text\":\"\\nSupports either an allowlist or a denylist for addresses. Optionally, access control lists may also specify specific functions on contracts to allow or deny.\\n\",\"title\":\"Access control lists\",\"titles\":[\"Supported Permissions\",null]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#erc-20-spending-limits\",\"html\":\"\\n

Supports limiting how much of a specific ERC-20 token a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 100 USDC per week).

\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#erc-20-spending-limits\",\"isPage\":false,\"text\":\"\\nSupports limiting how much of a specific ERC-20 token a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 100 USDC per week).\\n\",\"title\":\"ERC-20 spending Limits\",\"titles\":[\"Supported Permissions\",null]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#native-token-spending-limits\",\"html\":\"\\n

Supports limiting how much of the native token, e.g. ETH or MATIC, a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).

\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#native-token-spending-limits\",\"isPage\":false,\"text\":\"\\nSupports limiting how much of the native token, e.g. ETH or MATIC, a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).\\n\",\"title\":\"Native token spending limits\",\"titles\":[\"Supported Permissions\",null]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#gas-spending-limits\",\"html\":\"\\n

Supports limiting how much of the native token (e.g. ETH or MATIC) a session key can spend on gas. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).

\\n

Alternatively, you can also require that a session key uses a specific paymaster address, instead of spending the account’s native token for gas.

\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#gas-spending-limits\",\"isPage\":false,\"text\":\"\\nSupports limiting how much of the native token (e.g. ETH or MATIC) a session key can spend on gas. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).\\nAlternatively, you can also require that a session key uses a specific paymaster address, instead of spending the account’s native token for gas.\\n\",\"title\":\"Gas spending limits\",\"titles\":[\"Supported Permissions\",null]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#importance-of-gas-limits\",\"html\":\"\\n

Gas spend limits are critically important to protecting the account. If you are using a session key, you should configure either a required paymaster rule or a gas spend limit. Failing to do so could allow a compromised session key to drain the account’s native token balance.

\\n

Note that the gas limit is tracked in terms of native token units (wei), not in units of gas. The gas usage of a user operation is considered to be the maximum gas a user operation can spend, i.e. total gas limit * maxFeePerGas. This can overestimate when compared to the actual gas cost of each user operation.

\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#importance-of-gas-limits\",\"isPage\":false,\"text\":\"\\nGas spend limits are critically important to protecting the account. If you are using a session key, you should configure either a required paymaster rule or a gas spend limit. Failing to do so could allow a compromised session key to drain the account’s native token balance.\\nNote that the gas limit is tracked in terms of native token units (wei), not in units of gas. The gas usage of a user operation is considered to be the maximum gas a user operation can spend, i.e. total gas limit * maxFeePerGas. This can overestimate when compared to the actual gas cost of each user operation.\\n\",\"title\":\"Importance of Gas Limits\",\"titles\":[\"Supported Permissions\"]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#default-values\",\"html\":\"\\n

Permissions start with the following default values:

\\n
PermissionDefault Value
Access control listType: allowlist
The list starts empty. When the allowlist is empty, all calls will be denied.
Time rangeUnlimited
Native token spend limit0
This means all calls spending the native token will be denied, unless the limit is updated or removed.
ERC-20 spend limitUnset. If you want to enabled an ERC-20 spend limit, add the ERC-20 token contract to the access control list and set the spending limit amount.
Gas spend limitsUnset. When defining the session key’s permissions, you should specify either a gas spending limit or a required paymaster.
\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#default-values\",\"isPage\":false,\"text\":\"\\nPermissions start with the following default values:\\nPermissionDefault ValueAccess control listType: allowlist The list starts empty. When the allowlist is empty, all calls will be denied.Time rangeUnlimitedNative token spend limit0 This means all calls spending the native token will be denied, unless the limit is updated or removed.ERC-20 spend limitUnset. If you want to enabled an ERC-20 spend limit, add the ERC-20 token contract to the access control list and set the spending limit amount.Gas spend limitsUnset. When defining the session key’s permissions, you should specify either a gas spending limit or a required paymaster.\\n\",\"title\":\"Default values\",\"titles\":[\"Supported Permissions\"]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#using-the-permissionsbuilder\",\"html\":\"\\n

To construct the data to set a key's permissions, you will need to use the SessionKeyPermissionBuilder class. This will allow you to specify a series of updates, and when complete, you may generate the encoded data to perform all updates at once.

\\n

The permissions data may be specified in 3 places:

\\n
    \\n
  • In the Session Key Plugin's onInstall data, setting the intial permissions for a session key added at install time.
  • \\n
  • As data for the initial permissions of a session key added via addSessionKey.
  • \\n
  • As a parameter to the updateKeyPermissions function, to change the permissions of an existing key.
  • \\n
\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#using-the-permissionsbuilder\",\"isPage\":false,\"text\":\"\\nTo construct the data to set a key's permissions, you will need to use the SessionKeyPermissionBuilder class. This will allow you to specify a series of updates, and when complete, you may generate the encoded data to perform all updates at once.\\nThe permissions data may be specified in 3 places:\\n\\nIn the Session Key Plugin's onInstall data, setting the intial permissions for a session key added at install time.\\nAs data for the initial permissions of a session key added via addSessionKey.\\nAs a parameter to the updateKeyPermissions function, to change the permissions of an existing key.\\n\\n\",\"title\":\"Using the PermissionsBuilder\",\"titles\":[\"Supported Permissions\"]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#generating-the-permissions\",\"html\":\"\\n
// Let's create an initial permission set for the session key giving it an eth spend limit\\nconst keyPermissions = new SessionKeyPermissionsBuilder()\\n  .setNativeTokenSpendLimit({\\n    spendLimit: 1000000n,\\n  })\\n  // this will allow the session key plugin to interact with all addresses\\n  .setContractAccessControlType(SessionKeyAccessListType.ALLOW_ALL_ACCESS)\\n  .setTimeRange({\\n    validFrom: Math.round(Date.now() / 1000),\\n    // valid for 1 hour\\n    validUntil: Math.round(Date.now() / 1000 + 60 * 60),\\n  });
\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#generating-the-permissions\",\"isPage\":false,\"text\":\"\\n// Let's create an initial permission set for the session key giving it an eth spend limit\\nconst keyPermissions = new SessionKeyPermissionsBuilder()\\n .setNativeTokenSpendLimit({\\n spendLimit: 1000000n,\\n })\\n // this will allow the session key plugin to interact with all addresses\\n .setContractAccessControlType(SessionKeyAccessListType.ALLOW_ALL_ACCESS)\\n .setTimeRange({\\n validFrom: Math.round(Date.now() / 1000),\\n // valid for 1 hour\\n validUntil: Math.round(Date.now() / 1000 + 60 * 60),\\n });\\n\",\"title\":\"Generating the permissions\",\"titles\":[\"Supported Permissions\",\"Using the PermissionsBuilder\",\"Gas spending limits\"]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#example-permissions-in-plugin-install-data\",\"html\":\"\\n
  const result = await client.installSessionKeyPlugin({\\n    // 1st arg is the initial set of session keys\\n    // 2nd arg is the tags for the session keys\\n    // 3rd arg is the initial set of permissions\\n    args: [\\n      [await sessionKeySigner.getAddress()],\\n      [zeroHash],\\n      [keyPermissions.encode()],\\n    ],\\n  });
\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#example-permissions-in-plugin-install-data\",\"isPage\":false,\"text\":\"\\n const result = await client.installSessionKeyPlugin({\\n // 1st arg is the initial set of session keys\\n // 2nd arg is the tags for the session keys\\n // 3rd arg is the initial set of permissions\\n args: [\\n [await sessionKeySigner.getAddress()],\\n [zeroHash],\\n [keyPermissions.encode()],\\n ],\\n });\\n\",\"title\":\"Example: Permissions in plugin install data\",\"titles\":[\"Supported Permissions\",\"Using the PermissionsBuilder\",\"Gas spending limits\"]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#example-initial-permissions-for-a-new-key\",\"html\":\"\\n
  const result = await client.addSessionKey({\\n    key: "0x1234123412341234123412341234123412341234", // Session key address\\n    tag: keccak256(new TextEncoder().encode("session-key-tag")), // Session key tag\\n    permissions: keyPermissions.encode(), // Initial permissions\\n  });
\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#example-initial-permissions-for-a-new-key\",\"isPage\":false,\"text\":\"\\n const result = await client.addSessionKey({\\n key: "0x1234123412341234123412341234123412341234", // Session key address\\n tag: keccak256(new TextEncoder().encode("session-key-tag")), // Session key tag\\n permissions: keyPermissions.encode(), // Initial permissions\\n });\\n\",\"title\":\"Example: Initial permissions for a new key\",\"titles\":[\"Supported Permissions\",\"Using the PermissionsBuilder\",\"Gas spending limits\"]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#exmaple-updating-a-session-keys-permissions\",\"html\":\"\\n

This example updates a key's time range, but leaves other permissions to their current values.

\\n
  const result = await client.updateSessionKeyPermissions({\\n    key: "0x1234123412341234123412341234123412341234", // Session key address\\n    // add other permissions to the builder, if needed\\n    permissions: new SessionKeyPermissionsBuilder()\\n      .setTimeRange({\\n        validFrom: Math.round(Date.now() / 1000),\\n        // valid for 1 hour\\n        validUntil: Math.round(Date.now() / 1000 + 60 * 60),\\n      })\\n      .encode(),\\n  });
\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#exmaple-updating-a-session-keys-permissions\",\"isPage\":false,\"text\":\"\\nThis example updates a key's time range, but leaves other permissions to their current values.\\n const result = await client.updateSessionKeyPermissions({\\n key: "0x1234123412341234123412341234123412341234", // Session key address\\n // add other permissions to the builder, if needed\\n permissions: new SessionKeyPermissionsBuilder()\\n .setTimeRange({\\n validFrom: Math.round(Date.now() / 1000),\\n // valid for 1 hour\\n validUntil: Math.round(Date.now() / 1000 + 60 * 60),\\n })\\n .encode(),\\n });\\n\",\"title\":\"Exmaple: Updating a session key's permissions\",\"titles\":[\"Supported Permissions\",\"Using the PermissionsBuilder\",\"Gas spending limits\"]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#permissions-builder-full-reference\",\"html\":\"\\n
View the full set of supported permissions here
import { encodeFunctionData, type Address, type Hex } from "viem";\\nimport { SessionKeyPermissionsUpdatesAbi } from "./SessionKeyPermissionsUpdatesAbi.js";\\n \\nexport enum SessionKeyAccessListType {\\n  ALLOWLIST = 0,\\n  DENYLIST = 1,\\n  ALLOW_ALL_ACCESS = 2,\\n}\\n \\nexport type ContractAccessEntry = {\\n  // The contract address to add or remove.\\n  contractAddress: Address;\\n  // Whether the contract address should be on the list.\\n  isOnList: boolean;\\n  // Whether to check selectors for the contract address.\\n  checkSelectors: boolean;\\n};\\n \\nexport type ContractMethodEntry = {\\n  // The contract address to add or remove.\\n  contractAddress: Address;\\n  // The function selector to add or remove.\\n  methodSelector: Hex;\\n  // Whether the function selector should be on the list.\\n  isOnList: boolean;\\n};\\n \\nexport type TimeRange = {\\n  validFrom: number;\\n  validUntil: number;\\n};\\n \\nexport type NativeTokenLimit = {\\n  spendLimit: bigint;\\n  // The time interval over which the spend limit is enforced. If unset, there is no time\\n  /// interval by which the limit is refreshed.\\n  refreshInterval?: number;\\n};\\n \\nexport type Erc20TokenLimit = {\\n  tokenAddress: Address;\\n  spendLimit: bigint;\\n  // The time interval over which the spend limit is enforced. If unset, there is no time\\n  /// interval by which the limit is refreshed.\\n  refreshInterval?: number;\\n};\\n \\n// uint256 spendLimit, uint48 refreshInterval\\nexport type GasSpendLimit = {\\n  // The amount, in wei, of native tokens that a session key can spend on gas.\\n  // Note that this is not the same as the gas limit for a user operation, which is measured in units of gas.\\n  // This tracks gas units * gas price.\\n  spendLimit: bigint;\\n  // The time interval over which the spend limit is enforced. If unset, there is no time\\n  /// interval by which the limit is refreshed.\\n  refreshInterval?: number;\\n};\\n \\n/**\\n * A builder for creating the hex-encoded data for updating session key permissions.\\n */\\nexport class SessionKeyPermissionsBuilder {\\n  private _contractAccessControlType: SessionKeyAccessListType =\\n    SessionKeyAccessListType.ALLOWLIST;\\n  private _contractAddressAccessEntrys: ContractAccessEntry[] = [];\\n  private _contractMethodAccessEntrys: ContractMethodEntry[] = [];\\n  private _timeRange?: TimeRange;\\n  private _nativeTokenSpendLimit?: NativeTokenLimit;\\n  private _erc20TokenSpendLimits: Erc20TokenLimit[] = [];\\n  private _gasSpendLimit?: GasSpendLimit;\\n  private _requiredPaymaster?: Address;\\n \\n  /**\\n   * Sets the access control type for the contract and returns the current instance for method chaining.\\n   *\\n   * @example\\n   * ```ts\\n   * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n   *\\n   * const builder = new SessionKeyPermissionsBuilder();\\n   * builder.setContractAccessControlType(SessionKeyAccessListType.ALLOWLIST);\\n   * ```\\n   *\\n   * @param {SessionKeyAccessListType} aclType The access control type for the session key\\n   * @returns {SessionKeyPermissionsBuilder} The current instance for method chaining\\n   */\\n  public setContractAccessControlType(aclType: SessionKeyAccessListType) {\\n    this._contractAccessControlType = aclType;\\n    return this;\\n  }\\n \\n  /**\\n   * Adds a contract access entry to the internal list of contract address access entries.\\n   *\\n   * @example\\n   * ```ts\\n   * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n   *\\n   * const builder = new SessionKeyPermissionsBuilder();\\n   * builder.addContractAddressAccessEntry({\\n   *  contractAddress: "0x1234",\\n   *  isOnList: true,\\n   *  checkSelectors: true,\\n   * });\\n   * ```\\n   *\\n   * @param {ContractAccessEntry} entry the contract access entry to be added\\n   * @returns {SessionKeyPermissionsBuilder} the instance of the current class for chaining\\n   */\\n  public addContractAddressAccessEntry(entry: ContractAccessEntry) {\\n    this._contractAddressAccessEntrys.push(entry);\\n    return this;\\n  }\\n \\n  /**\\n   * Adds a contract method entry to the `_contractMethodAccessEntrys` array.\\n   *\\n   * @example\\n   * ```ts\\n   * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n   *\\n   * const builder = new SessionKeyPermissionsBuilder();\\n   * builder.addContractAddressAccessEntry({\\n   *  contractAddress: "0x1234",\\n   *  methodSelector: "0x45678",\\n   *  isOnList: true,\\n   * });\\n   * ```\\n   *\\n   * @param {ContractMethodEntry} entry The contract method entry to be added\\n   * @returns {SessionKeyPermissionsBuilder} The instance of the class for method chaining\\n   */\\n  public addContractFunctionAccessEntry(entry: ContractMethodEntry) {\\n    this._contractMethodAccessEntrys.push(entry);\\n    return this;\\n  }\\n \\n  /**\\n   * Sets the time range for an object and returns the object itself for chaining.\\n   *\\n   * @example\\n   * ```ts\\n   * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n   *\\n   * const builder = new SessionKeyPermissionsBuilder();\\n   * builder.setTimeRange({\\n   *  validFrom: Date.now(),\\n   *  validUntil: Date.now() + (15 * 60 * 1000),\\n   * });\\n   * ```\\n   *\\n   * @param {TimeRange} timeRange The time range to be set\\n   * @returns {SessionKeyPermissionsBuilder} The current object for method chaining\\n   */\\n  public setTimeRange(timeRange: TimeRange) {\\n    this._timeRange = timeRange;\\n    return this;\\n  }\\n \\n  /**\\n   * Sets the native token spend limit and returns the instance for chaining.\\n   *\\n   * @example\\n   * ```ts\\n   * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n   *\\n   * const builder = new SessionKeyPermissionsBuilder();\\n   * builder.setNativeTokenSpendLimit({\\n   *  spendLimit: 1000000000000000000n,\\n   *  refreshInterval: 3600,\\n   * });\\n   * ```\\n   *\\n   * @param {NativeTokenLimit} limit The limit to set for native token spending\\n   * @returns {SessionKeyPermissionsBuilder} The instance for chaining\\n   */\\n  public setNativeTokenSpendLimit(limit: NativeTokenLimit) {\\n    this._nativeTokenSpendLimit = limit;\\n    return this;\\n  }\\n \\n  /**\\n   * Adds an ERC20 token spend limit to the list of limits and returns the updated object.\\n   *\\n   * @example\\n   * ```ts\\n   * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n   *\\n   * const builder = new SessionKeyPermissionsBuilder();\\n   * builder.addErc20TokenSpendLimit({\\n   *  tokenAddress: "0x1234",\\n   *  spendLimit: 1000000000000000000n,\\n   *  refreshInterval: 3600,\\n   * });\\n   * ```\\n   *\\n   * @param {Erc20TokenLimit} limit The ERC20 token spend limit to be added\\n   * @returns {object} The updated object with the new ERC20 token spend limit\\n   */\\n  public addErc20TokenSpendLimit(limit: Erc20TokenLimit) {\\n    this._erc20TokenSpendLimits.push(limit);\\n    return this;\\n  }\\n \\n  /**\\n   * Sets the gas spend limit and returns the current instance for method chaining.\\n   *\\n   * @example\\n   * ```ts\\n   * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n   *\\n   * const builder = new SessionKeyPermissionsBuilder();\\n   * builder.setGasSpendLimit({\\n   *  spendLimit: 1000000000000000000n,\\n   *  refreshInterval: 3600,\\n   * });\\n   * ```\\n   *\\n   * @param {GasSpendLimit} limit - The gas spend limit to be set\\n   * @returns {SessionKeyPermissionsBuilder} The current instance for chaining\\n   */ public setGasSpendLimit(limit: GasSpendLimit) {\\n    this._gasSpendLimit = limit;\\n    return this;\\n  }\\n \\n  /**\\n   * Sets the required paymaster address.\\n   *\\n   * @example\\n   * ```ts\\n   * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n   *\\n   * const builder = new SessionKeyPermissionsBuilder();\\n   * builder.setRequiredPaymaster("0x1234");\\n   * ```\\n   *\\n   * @param {Address} paymaster the address of the paymaster to be set\\n   * @returns {SessionKeyPermissionsBuilder} the current instance for method chaining\\n   */\\n  public setRequiredPaymaster(paymaster: Address) {\\n    this._requiredPaymaster = paymaster;\\n    return this;\\n  }\\n \\n  /**\\n   * Encodes various function calls into an array of hexadecimal strings based on the provided permissions and limits.\\n   *\\n   * @example\\n   * ```ts\\n   * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n   *\\n   * const builder = new SessionKeyPermissionsBuilder();\\n   * builder.setRequiredPaymaster("0x1234");\\n   * const encoded = builder.encode();\\n   * ```\\n   *\\n   * @returns {Hex[]} An array of encoded hexadecimal strings representing the function calls for setting access control, permissions, and limits.\\n   */\\n  public encode(): Hex[] {\\n    return [\\n      encodeFunctionData({\\n        abi: SessionKeyPermissionsUpdatesAbi,\\n        functionName: "setAccessListType",\\n        args: [this._contractAccessControlType],\\n      }),\\n      ...this._contractAddressAccessEntrys.map((entry) =>\\n        encodeFunctionData({\\n          abi: SessionKeyPermissionsUpdatesAbi,\\n          functionName: "updateAccessListAddressEntry",\\n          args: [entry.contractAddress, entry.isOnList, entry.checkSelectors],\\n        })\\n      ),\\n      ...this._contractMethodAccessEntrys.map((entry) =>\\n        encodeFunctionData({\\n          abi: SessionKeyPermissionsUpdatesAbi,\\n          functionName: "updateAccessListFunctionEntry",\\n          args: [entry.contractAddress, entry.methodSelector, entry.isOnList],\\n        })\\n      ),\\n      this.encodeIfDefined(\\n        (timeRange) =>\\n          encodeFunctionData({\\n            abi: SessionKeyPermissionsUpdatesAbi,\\n            functionName: "updateTimeRange",\\n            args: [timeRange.validFrom, timeRange.validUntil],\\n          }),\\n        this._timeRange\\n      ),\\n      this.encodeIfDefined(\\n        (nativeSpendLimit) =>\\n          encodeFunctionData({\\n            abi: SessionKeyPermissionsUpdatesAbi,\\n            functionName: "setNativeTokenSpendLimit",\\n            args: [\\n              nativeSpendLimit.spendLimit,\\n              nativeSpendLimit.refreshInterval ?? 0,\\n            ],\\n          }),\\n        this._nativeTokenSpendLimit\\n      ),\\n      ...this._erc20TokenSpendLimits.map((erc20SpendLimit) =>\\n        encodeFunctionData({\\n          abi: SessionKeyPermissionsUpdatesAbi,\\n          functionName: "setERC20SpendLimit",\\n          args: [\\n            erc20SpendLimit.tokenAddress,\\n            erc20SpendLimit.spendLimit,\\n            erc20SpendLimit.refreshInterval ?? 0,\\n          ],\\n        })\\n      ),\\n      this.encodeIfDefined(\\n        (spendLimit) =>\\n          encodeFunctionData({\\n            abi: SessionKeyPermissionsUpdatesAbi,\\n            functionName: "setGasSpendLimit",\\n            args: [spendLimit.spendLimit, spendLimit.refreshInterval ?? 0],\\n          }),\\n        this._gasSpendLimit\\n      ),\\n      this.encodeIfDefined(\\n        (paymaster) =>\\n          encodeFunctionData({\\n            abi: SessionKeyPermissionsUpdatesAbi,\\n            functionName: "setRequiredPaymaster",\\n            args: [paymaster],\\n          }),\\n        this._requiredPaymaster\\n      ),\\n    ].filter((x) => x !== "0x");\\n  }\\n \\n  private encodeIfDefined<T>(encode: (param: T) => Hex, param?: T): Hex {\\n    if (!param) return "0x";\\n \\n    return encode(param);\\n  }\\n}
\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#permissions-builder-full-reference\",\"isPage\":false,\"text\":\"\\nView the full set of supported permissions hereimport { encodeFunctionData, type Address, type Hex } from "viem";\\nimport { SessionKeyPermissionsUpdatesAbi } from "./SessionKeyPermissionsUpdatesAbi.js";\\n \\nexport enum SessionKeyAccessListType {\\n ALLOWLIST = 0,\\n DENYLIST = 1,\\n ALLOW_ALL_ACCESS = 2,\\n}\\n \\nexport type ContractAccessEntry = {\\n // The contract address to add or remove.\\n contractAddress: Address;\\n // Whether the contract address should be on the list.\\n isOnList: boolean;\\n // Whether to check selectors for the contract address.\\n checkSelectors: boolean;\\n};\\n \\nexport type ContractMethodEntry = {\\n // The contract address to add or remove.\\n contractAddress: Address;\\n // The function selector to add or remove.\\n methodSelector: Hex;\\n // Whether the function selector should be on the list.\\n isOnList: boolean;\\n};\\n \\nexport type TimeRange = {\\n validFrom: number;\\n validUntil: number;\\n};\\n \\nexport type NativeTokenLimit = {\\n spendLimit: bigint;\\n // The time interval over which the spend limit is enforced. If unset, there is no time\\n /// interval by which the limit is refreshed.\\n refreshInterval?: number;\\n};\\n \\nexport type Erc20TokenLimit = {\\n tokenAddress: Address;\\n spendLimit: bigint;\\n // The time interval over which the spend limit is enforced. If unset, there is no time\\n /// interval by which the limit is refreshed.\\n refreshInterval?: number;\\n};\\n \\n// uint256 spendLimit, uint48 refreshInterval\\nexport type GasSpendLimit = {\\n // The amount, in wei, of native tokens that a session key can spend on gas.\\n // Note that this is not the same as the gas limit for a user operation, which is measured in units of gas.\\n // This tracks gas units * gas price.\\n spendLimit: bigint;\\n // The time interval over which the spend limit is enforced. If unset, there is no time\\n /// interval by which the limit is refreshed.\\n refreshInterval?: number;\\n};\\n \\n/**\\n * A builder for creating the hex-encoded data for updating session key permissions.\\n */\\nexport class SessionKeyPermissionsBuilder {\\n private _contractAccessControlType: SessionKeyAccessListType =\\n SessionKeyAccessListType.ALLOWLIST;\\n private _contractAddressAccessEntrys: ContractAccessEntry[] = [];\\n private _contractMethodAccessEntrys: ContractMethodEntry[] = [];\\n private _timeRange?: TimeRange;\\n private _nativeTokenSpendLimit?: NativeTokenLimit;\\n private _erc20TokenSpendLimits: Erc20TokenLimit[] = [];\\n private _gasSpendLimit?: GasSpendLimit;\\n private _requiredPaymaster?: Address;\\n \\n /**\\n * Sets the access control type for the contract and returns the current instance for method chaining.\\n *\\n * @example\\n * ```ts\\n * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n *\\n * const builder = new SessionKeyPermissionsBuilder();\\n * builder.setContractAccessControlType(SessionKeyAccessListType.ALLOWLIST);\\n * ```\\n *\\n * @param {SessionKeyAccessListType} aclType The access control type for the session key\\n * @returns {SessionKeyPermissionsBuilder} The current instance for method chaining\\n */\\n public setContractAccessControlType(aclType: SessionKeyAccessListType) {\\n this._contractAccessControlType = aclType;\\n return this;\\n }\\n \\n /**\\n * Adds a contract access entry to the internal list of contract address access entries.\\n *\\n * @example\\n * ```ts\\n * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n *\\n * const builder = new SessionKeyPermissionsBuilder();\\n * builder.addContractAddressAccessEntry({\\n * contractAddress: "0x1234",\\n * isOnList: true,\\n * checkSelectors: true,\\n * });\\n * ```\\n *\\n * @param {ContractAccessEntry} entry the contract access entry to be added\\n * @returns {SessionKeyPermissionsBuilder} the instance of the current class for chaining\\n */\\n public addContractAddressAccessEntry(entry: ContractAccessEntry) {\\n this._contractAddressAccessEntrys.push(entry);\\n return this;\\n }\\n \\n /**\\n * Adds a contract method entry to the `_contractMethodAccessEntrys` array.\\n *\\n * @example\\n * ```ts\\n * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n *\\n * const builder = new SessionKeyPermissionsBuilder();\\n * builder.addContractAddressAccessEntry({\\n * contractAddress: "0x1234",\\n * methodSelector: "0x45678",\\n * isOnList: true,\\n * });\\n * ```\\n *\\n * @param {ContractMethodEntry} entry The contract method entry to be added\\n * @returns {SessionKeyPermissionsBuilder} The instance of the class for method chaining\\n */\\n public addContractFunctionAccessEntry(entry: ContractMethodEntry) {\\n this._contractMethodAccessEntrys.push(entry);\\n return this;\\n }\\n \\n /**\\n * Sets the time range for an object and returns the object itself for chaining.\\n *\\n * @example\\n * ```ts\\n * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n *\\n * const builder = new SessionKeyPermissionsBuilder();\\n * builder.setTimeRange({\\n * validFrom: Date.now(),\\n * validUntil: Date.now() + (15 * 60 * 1000),\\n * });\\n * ```\\n *\\n * @param {TimeRange} timeRange The time range to be set\\n * @returns {SessionKeyPermissionsBuilder} The current object for method chaining\\n */\\n public setTimeRange(timeRange: TimeRange) {\\n this._timeRange = timeRange;\\n return this;\\n }\\n \\n /**\\n * Sets the native token spend limit and returns the instance for chaining.\\n *\\n * @example\\n * ```ts\\n * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n *\\n * const builder = new SessionKeyPermissionsBuilder();\\n * builder.setNativeTokenSpendLimit({\\n * spendLimit: 1000000000000000000n,\\n * refreshInterval: 3600,\\n * });\\n * ```\\n *\\n * @param {NativeTokenLimit} limit The limit to set for native token spending\\n * @returns {SessionKeyPermissionsBuilder} The instance for chaining\\n */\\n public setNativeTokenSpendLimit(limit: NativeTokenLimit) {\\n this._nativeTokenSpendLimit = limit;\\n return this;\\n }\\n \\n /**\\n * Adds an ERC20 token spend limit to the list of limits and returns the updated object.\\n *\\n * @example\\n * ```ts\\n * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n *\\n * const builder = new SessionKeyPermissionsBuilder();\\n * builder.addErc20TokenSpendLimit({\\n * tokenAddress: "0x1234",\\n * spendLimit: 1000000000000000000n,\\n * refreshInterval: 3600,\\n * });\\n * ```\\n *\\n * @param {Erc20TokenLimit} limit The ERC20 token spend limit to be added\\n * @returns {object} The updated object with the new ERC20 token spend limit\\n */\\n public addErc20TokenSpendLimit(limit: Erc20TokenLimit) {\\n this._erc20TokenSpendLimits.push(limit);\\n return this;\\n }\\n \\n /**\\n * Sets the gas spend limit and returns the current instance for method chaining.\\n *\\n * @example\\n * ```ts\\n * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n *\\n * const builder = new SessionKeyPermissionsBuilder();\\n * builder.setGasSpendLimit({\\n * spendLimit: 1000000000000000000n,\\n * refreshInterval: 3600,\\n * });\\n * ```\\n *\\n * @param {GasSpendLimit} limit - The gas spend limit to be set\\n * @returns {SessionKeyPermissionsBuilder} The current instance for chaining\\n */ public setGasSpendLimit(limit: GasSpendLimit) {\\n this._gasSpendLimit = limit;\\n return this;\\n }\\n \\n /**\\n * Sets the required paymaster address.\\n *\\n * @example\\n * ```ts\\n * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n *\\n * const builder = new SessionKeyPermissionsBuilder();\\n * builder.setRequiredPaymaster("0x1234");\\n * ```\\n *\\n * @param {Address} paymaster the address of the paymaster to be set\\n * @returns {SessionKeyPermissionsBuilder} the current instance for method chaining\\n */\\n public setRequiredPaymaster(paymaster: Address) {\\n this._requiredPaymaster = paymaster;\\n return this;\\n }\\n \\n /**\\n * Encodes various function calls into an array of hexadecimal strings based on the provided permissions and limits.\\n *\\n * @example\\n * ```ts\\n * import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n *\\n * const builder = new SessionKeyPermissionsBuilder();\\n * builder.setRequiredPaymaster("0x1234");\\n * const encoded = builder.encode();\\n * ```\\n *\\n * @returns {Hex[]} An array of encoded hexadecimal strings representing the function calls for setting access control, permissions, and limits.\\n */\\n public encode(): Hex[] {\\n return [\\n encodeFunctionData({\\n abi: SessionKeyPermissionsUpdatesAbi,\\n functionName: "setAccessListType",\\n args: [this._contractAccessControlType],\\n }),\\n ...this._contractAddressAccessEntrys.map((entry) =>\\n encodeFunctionData({\\n abi: SessionKeyPermissionsUpdatesAbi,\\n functionName: "updateAccessListAddressEntry",\\n args: [entry.contractAddress, entry.isOnList, entry.checkSelectors],\\n })\\n ),\\n ...this._contractMethodAccessEntrys.map((entry) =>\\n encodeFunctionData({\\n abi: SessionKeyPermissionsUpdatesAbi,\\n functionName: "updateAccessListFunctionEntry",\\n args: [entry.contractAddress, entry.methodSelector, entry.isOnList],\\n })\\n ),\\n this.encodeIfDefined(\\n (timeRange) =>\\n encodeFunctionData({\\n abi: SessionKeyPermissionsUpdatesAbi,\\n functionName: "updateTimeRange",\\n args: [timeRange.validFrom, timeRange.validUntil],\\n }),\\n this._timeRange\\n ),\\n this.encodeIfDefined(\\n (nativeSpendLimit) =>\\n encodeFunctionData({\\n abi: SessionKeyPermissionsUpdatesAbi,\\n functionName: "setNativeTokenSpendLimit",\\n args: [\\n nativeSpendLimit.spendLimit,\\n nativeSpendLimit.refreshInterval ?? 0,\\n ],\\n }),\\n this._nativeTokenSpendLimit\\n ),\\n ...this._erc20TokenSpendLimits.map((erc20SpendLimit) =>\\n encodeFunctionData({\\n abi: SessionKeyPermissionsUpdatesAbi,\\n functionName: "setERC20SpendLimit",\\n args: [\\n erc20SpendLimit.tokenAddress,\\n erc20SpendLimit.spendLimit,\\n erc20SpendLimit.refreshInterval ?? 0,\\n ],\\n })\\n ),\\n this.encodeIfDefined(\\n (spendLimit) =>\\n encodeFunctionData({\\n abi: SessionKeyPermissionsUpdatesAbi,\\n functionName: "setGasSpendLimit",\\n args: [spendLimit.spendLimit, spendLimit.refreshInterval ?? 0],\\n }),\\n this._gasSpendLimit\\n ),\\n this.encodeIfDefined(\\n (paymaster) =>\\n encodeFunctionData({\\n abi: SessionKeyPermissionsUpdatesAbi,\\n functionName: "setRequiredPaymaster",\\n args: [paymaster],\\n }),\\n this._requiredPaymaster\\n ),\\n ].filter((x) => x !== "0x");\\n }\\n \\n private encodeIfDefined<T>(encode: (param: T) => Hex, param?: T): Hex {\\n if (!param) return "0x";\\n \\n return encode(param);\\n }\\n}\\n\",\"title\":\"Permissions Builder full reference\",\"titles\":[\"Supported Permissions\",\"Using the PermissionsBuilder\"]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#reading-permissions\",\"html\":\"\\n

You may wish to view the current permissions of a given session key. This can be done using view functions defined by the Session Key Plugin.

\\n

Here's an example of viewing all permissions in TypeScript:

\\n
const sessionKeyPluginView = SessionKeyPlugin.getContract(client).read;\\nconst accountAddress = client.getAddress();\\nconst sessionKeyAddress = await sessionKeySigner.getAddress();\\n \\nconst exampleTargetAddress = "0x4567456745674567456745674567456745674567";\\nconst exampleTargetSelector = "0x78907890";\\nconst exampleERC20Address = "0xabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd";\\n \\n// Using session key permissions view functions\\n \\n// The key's current access control type. One of:\\n// - SessionKeyAccessListType.ALLOWLIST\\n// - SessionKeyAccessListType.DENYLIST\\n// - SessionKeyAccessListType.ALLOW_ALL_ACCESS\\nconst accessControlType = await sessionKeyPluginView.getAccessControlType([\\n  accountAddress,\\n  sessionKeyAddress,\\n]);\\n \\n// - Whether or not the address is on the access control list (either allowlist or denylist, depending on setting).\\n// - Whether or not the function selectors should be checked for the target address (checked according to the access control type).\\nconst [isTargetAddressOnList, checkSelectors] =\\n  await sessionKeyPluginView.getAccessControlEntry([\\n    accountAddress,\\n    sessionKeyAddress,\\n    exampleTargetAddress,\\n  ]);\\n \\n// Whether or not the selector is on the access control list\\nconst isTargetSelectorOnList =\\n  await sessionKeyPluginView.isSelectorOnAccessControlList([\\n    accountAddress,\\n    sessionKeyAddress,\\n    exampleTargetAddress,\\n    exampleTargetSelector,\\n  ]);\\n \\n// The start and end timestamp of a key.\\n// If either is zero, that means the value is unset.\\nconst [validAfter, validUntil] = await sessionKeyPluginView.getKeyTimeRange([\\n  accountAddress,\\n  sessionKeyAddress,\\n]);\\n \\n// The native token spending limit of a key. Details below\\nconst nativeTokenSpendingLimit =\\n  await sessionKeyPluginView.getNativeTokenSpendLimitInfo([\\n    accountAddress,\\n    sessionKeyAddress,\\n  ]);\\n \\nconst {\\n  hasLimit: hasNativeTokenSpendLimit, // Whether or not a native token spending limit is enforced on the session key\\n  limit: nativeTokenSpendLimit, // The limit's maximum value. If a refresh interval is set, this is the max per interval.\\n  limitUsed: nativeTokenSpendLimitUsed, // How much of the limit is used. If a refresh interval is set, this is the amount used in the current interval.\\n  refreshInterval: nativeTokenRefreshInterval, // How often to reset the limit and start counting again. If zero, never refresh the limit.\\n  lastUsedTime: nativeTokenLastUsedTime, // The start of the latest interval, if using the refresh interval.\\n} = nativeTokenSpendingLimit;\\n \\n// The spending limit for an ERC-20 token.\\nconst erc20SpendingLimit = await sessionKeyPluginView.getERC20SpendLimitInfo([\\n  accountAddress,\\n  sessionKeyAddress,\\n  exampleERC20Address,\\n]);\\n \\nconst {\\n  hasLimit: hasErc20TokenSpendLimit, // Whether or not an ERC-20 token spending limit is enforced on the session key for this token address.\\n  limit: erc20TokenSpendLimit, // The limit's maximum value. If a refresh interval is set, this is the max per interval.\\n  limitUsed: erc20TokenSpendLimitUsed, // How much of the limit is used. If a refresh interval is set, this is the amount used in the current interval.\\n  refreshInterval: erc20TokenRefreshInterval, // How often to reset the limit and start counting again. If zero, never refresh the limit.\\n  lastUsedTime: erc20TokenLastUsedTime, // The start of the latest interval, if using the refresh interval.\\n} = erc20SpendingLimit;\\n \\n// - The spending limit on gas for a given session key, measured in wei.\\n// - Whether or not the spending limit will reset in the next interval, if a refresh interval is set.\\nconst [gasSpendingLimit, shouldReset] =\\n  await sessionKeyPluginView.getGasSpendLimit([\\n    accountAddress,\\n    sessionKeyAddress,\\n  ]);\\n \\nconst {\\n  hasLimit: hasGasSpendLimit, // Whether or not a gas spending limit is enforced on the session key\\n  limit: gasSpendLimit, // The gas limit's maximum spend amount, in wei. If a refresh interval is set, this is the max per interval.\\n  limitUsed: gasSpendLimitUsed, // How much of the limit is used. If a refresh interval is set, this is the amount used in the current interval.\\n  refreshInterval: gasRefreshInterval, // How often to reset the limit and start counting again. If zero, never refresh the limit.\\n  lastUsedTime: gasLastUsedTime, // The start of the latest interval, if using the refresh interval.\\n} = gasSpendingLimit;\\n \\n// The paymaster address required for a given session key.\\n// If there is no required paymaster, this will return the zero address.\\nconst requiredPaymaster = await sessionKeyPluginView.getRequiredPaymaster([\\n  accountAddress,\\n  sessionKeyAddress,\\n]);
\\n\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#reading-permissions\",\"isPage\":false,\"text\":\"\\nYou may wish to view the current permissions of a given session key. This can be done using view functions defined by the Session Key Plugin.\\nHere's an example of viewing all permissions in TypeScript:\\nconst sessionKeyPluginView = SessionKeyPlugin.getContract(client).read;\\nconst accountAddress = client.getAddress();\\nconst sessionKeyAddress = await sessionKeySigner.getAddress();\\n \\nconst exampleTargetAddress = "0x4567456745674567456745674567456745674567";\\nconst exampleTargetSelector = "0x78907890";\\nconst exampleERC20Address = "0xabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd";\\n \\n// Using session key permissions view functions\\n \\n// The key's current access control type. One of:\\n// - SessionKeyAccessListType.ALLOWLIST\\n// - SessionKeyAccessListType.DENYLIST\\n// - SessionKeyAccessListType.ALLOW_ALL_ACCESS\\nconst accessControlType = await sessionKeyPluginView.getAccessControlType([\\n accountAddress,\\n sessionKeyAddress,\\n]);\\n \\n// - Whether or not the address is on the access control list (either allowlist or denylist, depending on setting).\\n// - Whether or not the function selectors should be checked for the target address (checked according to the access control type).\\nconst [isTargetAddressOnList, checkSelectors] =\\n await sessionKeyPluginView.getAccessControlEntry([\\n accountAddress,\\n sessionKeyAddress,\\n exampleTargetAddress,\\n ]);\\n \\n// Whether or not the selector is on the access control list\\nconst isTargetSelectorOnList =\\n await sessionKeyPluginView.isSelectorOnAccessControlList([\\n accountAddress,\\n sessionKeyAddress,\\n exampleTargetAddress,\\n exampleTargetSelector,\\n ]);\\n \\n// The start and end timestamp of a key.\\n// If either is zero, that means the value is unset.\\nconst [validAfter, validUntil] = await sessionKeyPluginView.getKeyTimeRange([\\n accountAddress,\\n sessionKeyAddress,\\n]);\\n \\n// The native token spending limit of a key. Details below\\nconst nativeTokenSpendingLimit =\\n await sessionKeyPluginView.getNativeTokenSpendLimitInfo([\\n accountAddress,\\n sessionKeyAddress,\\n ]);\\n \\nconst {\\n hasLimit: hasNativeTokenSpendLimit, // Whether or not a native token spending limit is enforced on the session key\\n limit: nativeTokenSpendLimit, // The limit's maximum value. If a refresh interval is set, this is the max per interval.\\n limitUsed: nativeTokenSpendLimitUsed, // How much of the limit is used. If a refresh interval is set, this is the amount used in the current interval.\\n refreshInterval: nativeTokenRefreshInterval, // How often to reset the limit and start counting again. If zero, never refresh the limit.\\n lastUsedTime: nativeTokenLastUsedTime, // The start of the latest interval, if using the refresh interval.\\n} = nativeTokenSpendingLimit;\\n \\n// The spending limit for an ERC-20 token.\\nconst erc20SpendingLimit = await sessionKeyPluginView.getERC20SpendLimitInfo([\\n accountAddress,\\n sessionKeyAddress,\\n exampleERC20Address,\\n]);\\n \\nconst {\\n hasLimit: hasErc20TokenSpendLimit, // Whether or not an ERC-20 token spending limit is enforced on the session key for this token address.\\n limit: erc20TokenSpendLimit, // The limit's maximum value. If a refresh interval is set, this is the max per interval.\\n limitUsed: erc20TokenSpendLimitUsed, // How much of the limit is used. If a refresh interval is set, this is the amount used in the current interval.\\n refreshInterval: erc20TokenRefreshInterval, // How often to reset the limit and start counting again. If zero, never refresh the limit.\\n lastUsedTime: erc20TokenLastUsedTime, // The start of the latest interval, if using the refresh interval.\\n} = erc20SpendingLimit;\\n \\n// - The spending limit on gas for a given session key, measured in wei.\\n// - Whether or not the spending limit will reset in the next interval, if a refresh interval is set.\\nconst [gasSpendingLimit, shouldReset] =\\n await sessionKeyPluginView.getGasSpendLimit([\\n accountAddress,\\n sessionKeyAddress,\\n ]);\\n \\nconst {\\n hasLimit: hasGasSpendLimit, // Whether or not a gas spending limit is enforced on the session key\\n limit: gasSpendLimit, // The gas limit's maximum spend amount, in wei. If a refresh interval is set, this is the max per interval.\\n limitUsed: gasSpendLimitUsed, // How much of the limit is used. If a refresh interval is set, this is the amount used in the current interval.\\n refreshInterval: gasRefreshInterval, // How often to reset the limit and start counting again. If zero, never refresh the limit.\\n lastUsedTime: gasLastUsedTime, // The start of the latest interval, if using the refresh interval.\\n} = gasSpendingLimit;\\n \\n// The paymaster address required for a given session key.\\n// If there is no required paymaster, this will return the zero address.\\nconst requiredPaymaster = await sessionKeyPluginView.getRequiredPaymaster([\\n accountAddress,\\n sessionKeyAddress,\\n]);\\n\",\"title\":\"Reading Permissions\",\"titles\":[\"Supported Permissions\"]},{\"href\":\"/smart-contracts/session-keys/supported-permissions#permission-view-functions\",\"html\":\"\\n

The following view functions are declared by the session key plugin and used to read information about permissions. These are the functions used in the example above.

\\n
enum ContractAccessControlType {\\n    ALLOWLIST, // Allowlist is default\\n    DENYLIST,\\n    ALLOW_ALL_ACCESS // Disables contract access control, any address and selector are allowed.\\n}\\n \\n// Struct returned by view functions to provide information about a session key's spend limit.\\n// Used for native token, ERC-20, and gas spend limits.\\nstruct SpendLimitInfo {\\n    bool hasLimit;\\n    uint256 limit;\\n    uint256 limitUsed;\\n    uint48 refreshInterval;\\n    uint48 lastUsedTime;\\n}\\n \\n/// @notice Get the access control type for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return The access control type for the session key on the account.\\nfunction getAccessControlType(address account, address sessionKey)\\n    external\\n    view\\n    returns (ContractAccessControlType);\\n \\n/// @notice Get an access control entry for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @param targetAddress The target address to check.\\n/// @return isOnList Whether the target address is on the list (either allowlist or blocklist depending on the\\n/// access control type).\\n/// @return checkSelectors Whether the target address should be checked for selectors during permissions\\n/// enforcement.\\nfunction getAccessControlEntry(address account, address sessionKey, address targetAddress)\\n    external\\n    view\\n    returns (bool isOnList, bool checkSelectors);\\n \\n/// @notice Get whether a selector is on the access control list for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @param targetAddress The target address to check.\\n/// @param selector The selector to check.\\n/// @return isOnList Whether the selector is on the list (either allowlist or blocklist depending on the\\n/// access control type).\\nfunction isSelectorOnAccessControlList(\\n    address account,\\n    address sessionKey,\\n    address targetAddress,\\n    bytes4 selector\\n) external view returns (bool isOnList);\\n \\n/// @notice Get the active time range for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return validAfter The time after which the session key is valid.\\n/// @return validUntil The time until which the session key is valid.\\nfunction getKeyTimeRange(address account, address sessionKey)\\n    external\\n    view\\n    returns (uint48 validAfter, uint48 validUntil);\\n \\n/// @notice Get the native token spend limit for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return A struct with fields describing the state of native token spending limits on this session key.\\nfunction getNativeTokenSpendLimitInfo(address account, address sessionKey)\\n    external\\n    view\\n    returns (SpendLimitInfo memory);\\n \\n/// @notice Get the gas spend limit for a session key on an account.\\n/// Note that this spend limit is measured in wei, not units of gas.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return info A struct with fields describing the state of gas spending limits on this session key.\\n/// @return shouldReset Whether this session key must be reset by calling `resetSessionKeyGasLimitTimestamp`\\n/// before it can be used.\\nfunction getGasSpendLimit(address account, address sessionKey)\\n    external\\n    view\\n    returns (SpendLimitInfo memory info, bool shouldReset);\\n \\n/// @notice Get the ERC20 spend limit for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @param token The token to check.\\n/// @return A struct with fields describing the state of ERC20 spending limits on this session key.\\nfunction getERC20SpendLimitInfo(address account, address sessionKey, address token)\\n    external\\n    view\\n    returns (SpendLimitInfo memory);\\n \\n/// @notice Get the required paymaster address for a session key on an account, if any.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return The required paymaster address for this session key on this account, or the zero address if the\\n/// rule is disabled.\\nfunction getRequiredPaymaster(address account, address sessionKey) external view returns (address);
\",\"id\":\"pages/smart-contracts/session-keys/supported-permissions.mdx#permission-view-functions\",\"isPage\":false,\"text\":\"\\nThe following view functions are declared by the session key plugin and used to read information about permissions. These are the functions used in the example above.\\nenum ContractAccessControlType {\\n ALLOWLIST, // Allowlist is default\\n DENYLIST,\\n ALLOW_ALL_ACCESS // Disables contract access control, any address and selector are allowed.\\n}\\n \\n// Struct returned by view functions to provide information about a session key's spend limit.\\n// Used for native token, ERC-20, and gas spend limits.\\nstruct SpendLimitInfo {\\n bool hasLimit;\\n uint256 limit;\\n uint256 limitUsed;\\n uint48 refreshInterval;\\n uint48 lastUsedTime;\\n}\\n \\n/// @notice Get the access control type for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return The access control type for the session key on the account.\\nfunction getAccessControlType(address account, address sessionKey)\\n external\\n view\\n returns (ContractAccessControlType);\\n \\n/// @notice Get an access control entry for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @param targetAddress The target address to check.\\n/// @return isOnList Whether the target address is on the list (either allowlist or blocklist depending on the\\n/// access control type).\\n/// @return checkSelectors Whether the target address should be checked for selectors during permissions\\n/// enforcement.\\nfunction getAccessControlEntry(address account, address sessionKey, address targetAddress)\\n external\\n view\\n returns (bool isOnList, bool checkSelectors);\\n \\n/// @notice Get whether a selector is on the access control list for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @param targetAddress The target address to check.\\n/// @param selector The selector to check.\\n/// @return isOnList Whether the selector is on the list (either allowlist or blocklist depending on the\\n/// access control type).\\nfunction isSelectorOnAccessControlList(\\n address account,\\n address sessionKey,\\n address targetAddress,\\n bytes4 selector\\n) external view returns (bool isOnList);\\n \\n/// @notice Get the active time range for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return validAfter The time after which the session key is valid.\\n/// @return validUntil The time until which the session key is valid.\\nfunction getKeyTimeRange(address account, address sessionKey)\\n external\\n view\\n returns (uint48 validAfter, uint48 validUntil);\\n \\n/// @notice Get the native token spend limit for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return A struct with fields describing the state of native token spending limits on this session key.\\nfunction getNativeTokenSpendLimitInfo(address account, address sessionKey)\\n external\\n view\\n returns (SpendLimitInfo memory);\\n \\n/// @notice Get the gas spend limit for a session key on an account.\\n/// Note that this spend limit is measured in wei, not units of gas.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return info A struct with fields describing the state of gas spending limits on this session key.\\n/// @return shouldReset Whether this session key must be reset by calling `resetSessionKeyGasLimitTimestamp`\\n/// before it can be used.\\nfunction getGasSpendLimit(address account, address sessionKey)\\n external\\n view\\n returns (SpendLimitInfo memory info, bool shouldReset);\\n \\n/// @notice Get the ERC20 spend limit for a session key on an account.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @param token The token to check.\\n/// @return A struct with fields describing the state of ERC20 spending limits on this session key.\\nfunction getERC20SpendLimitInfo(address account, address sessionKey, address token)\\n external\\n view\\n returns (SpendLimitInfo memory);\\n \\n/// @notice Get the required paymaster address for a session key on an account, if any.\\n/// @param account The account to check.\\n/// @param sessionKey The session key to check.\\n/// @return The required paymaster address for this session key on this account, or the zero address if the\\n/// rule is disabled.\\nfunction getRequiredPaymaster(address account, address sessionKey) external view returns (address);\",\"title\":\"Permission View Functions\",\"titles\":[\"Supported Permissions\",\"Reading Permissions\"]}]}],[\"index.c01590abb59f6b20683195c3ebb88d2042dfcaa40709178fdf5075668482b17e\",{\"mdx\":\"---\\ntitle: Add Passkey\\ndescription: Learn how to add a passkey to a user account\\n---\\n\\n# Add Passkey\\n\\nIf your user has already authenticated with an email or passkey, you can also add a new passkey to their account. This is\\nuseful in the case that you want to give your users a more convenient method of logging in or if they want to add more devices\\nto their account.\\n\\n## Add a passkey\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { signer } from \\\"./signer\\\";\\n\\n// NOTE: this assumes you have already authenticated the user\\n// you can further customize the Credential Creation Options here\\nawait signer.addPasskey({});\\n```\\n\\n```ts twoslash [signer] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/signer/authentication/add-passkey#add-passkey\",\"html\":\"\\n

If your user has already authenticated with an email or passkey, you can also add a new passkey to their account. This is\\nuseful in the case that you want to give your users a more convenient method of logging in or if they want to add more devices\\nto their account.

\\n\",\"id\":\"pages/signer/authentication/add-passkey.mdx#add-passkey\",\"isPage\":true,\"text\":\"\\nIf your user has already authenticated with an email or passkey, you can also add a new passkey to their account. This is\\nuseful in the case that you want to give your users a more convenient method of logging in or if they want to add more devices\\nto their account.\\n\",\"title\":\"Add Passkey\",\"titles\":[]},{\"href\":\"/signer/authentication/add-passkey#add-a-passkey\",\"html\":\"\\n
// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\n// NOTE: this assumes you have already authenticated the user\\n// you can further customize the Credential Creation Options here\\nawait signer.addPasskey({});
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\",\"id\":\"pages/signer/authentication/add-passkey.mdx#add-a-passkey\",\"isPage\":false,\"text\":\"\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\n// NOTE: this assumes you have already authenticated the user\\n// you can further customize the Credential Creation Options here\\nawait signer.addPasskey({});import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\",\"title\":\"Add a passkey\",\"titles\":[\"Add Passkey\"]}]}],[\"index.4a23288a214a5dfbc2fbdff7b86b7f162a2543b08b1ce7f14569ad1628d0327a\",{\"mdx\":\"---\\ntitle: Smart Contracts Overview\\ndescription: An overview of the Smart Contracts available in Account Kit and how to use them\\n---\\n\\n# Smart Contracts Overview\\n\\nOne of the low level packages available in Account Kit is our Smart Contracts package. This package contains all of the smart contract interfaces and utilities you need to use any of our\\nsecure, audited smart contracts.\\n\\nIn these guides, we'll show you how to pick and choose the right smart contract for you and how to use them in your application.\\n\\n:::tip\\nFor the easiest integration, we recommend using [`@account-kit/react`](/react/overview) or [`@account-kit/core`](/core/overview) which support all of the contracts in this package by default.\\n:::\\n\",\"document\":[{\"href\":\"/smart-contracts/overview#smart-contracts-overview\",\"html\":\"\\n

One of the low level packages available in Account Kit is our Smart Contracts package. This package contains all of the smart contract interfaces and utilities you need to use any of our\\nsecure, audited smart contracts.

\\n

In these guides, we'll show you how to pick and choose the right smart contract for you and how to use them in your application.

\\n\",\"id\":\"pages/smart-contracts/overview.mdx#smart-contracts-overview\",\"isPage\":true,\"text\":\"\\nOne of the low level packages available in Account Kit is our Smart Contracts package. This package contains all of the smart contract interfaces and utilities you need to use any of our\\nsecure, audited smart contracts.\\nIn these guides, we'll show you how to pick and choose the right smart contract for you and how to use them in your application.\\nFor the easiest integration, we recommend using @account-kit/react or @account-kit/core which support all of the contracts in this package by default.\",\"title\":\"Smart Contracts Overview\",\"titles\":[]}]}],[\"index.35b8f6d1383dc26de2d04a39078e9e498f615d9e510a8a1dafc4381ab5c62377\",{\"mdx\":\"---\\ntitle: Getting started with Session Keys\\ndescription: Learn how to use Alchemy's Session Key Plugin.\\n---\\n\\n# Getting started with Session Keys\\n\\n`@account-kit/smart-contracts` exports all of the definitions you need to use session keys with a Modular Account. We provide a simple `SessionKeySigner` class that generates session keys on the client and can be used as the `signer` for the Multi Owner Modular Account.\\nWe also export the necessary decorators which can be used to extend your `modularAccountClient` to make interacting with session keys easy.\\n\\n## Usage\\n\\nLet's take a look at a full example that demonstrates how to use session keys with a Modular Account.\\n\\n```ts twoslash\\n// [!include ~/shared/smart-contracts/session-keys/full-example.ts]\\n```\\n\\n## Breaking it down\\n\\n### Determine where the session key is stored\\n\\nSession keys can be held on the client side or on a backend agent. Client side session keys are useful for skipping confirmations, and agent side keys are useful for automations.\\n\\nIn the above example, we use a client-side key using the `SessionKeySigner` exported from `@account-kit/smart-contracts`.\\n\\n```ts twoslash\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst sessionKeySigner = new SessionKeySigner();\\n```\\n\\nIf you are using backend agent controlled session keys, then the agent should generate the private key and send only the address to the client. This protects the private key by not exposing it to the user.\\n\\n### Extend your client with Modular Account Decorators\\n\\nThe base `modularAccountClient` and `AlchemymodularAccountClient`, only include base functionality for sending user operations. If you are using a `ModularAccount`, then you will want to extend your client with the various decorators exported by `@account-kit/smart-contracts`.\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { modularAccountClient } from \\\"./client\\\";\\nimport { sessionKeyPluginActions } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n```\\n\\n```ts [client.ts] filename=\\\"client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\\n### Check if the Session Key Plugin is installed\\n\\nBefore you can start using session keys, you need to check whether the user’s account has the session key plugin installed. You can perform this check using the account loupe decorator, which lets you inspect the state of installed plugins on a Modular Account.\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { modularAccountClient } from \\\"./client\\\";\\nimport {\\n accountLoupeActions,\\n multiOwnerPluginActions,\\n sessionKeyPluginActions,\\n pluginManagerActions,\\n} from \\\"@account-kit/smart-contracts\\\";\\n\\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n\\n//---cut---\\n\\nimport { SessionKeyPlugin } from \\\"@account-kit/smart-contracts\\\";\\n\\n// 1. check if the plugin is installed\\nconst isPluginInstalled = await modularAccountClient\\n .getInstalledPlugins({})\\n // This checks using the default address for the chain, but you can always pass in your own plugin address here as an override\\n .then((x) => x.includes(SessionKeyPlugin.meta.addresses[chain.id]));\\n```\\n\\n```ts [client.ts] filename=\\\"client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\\n### Install the Session Key Plugin\\n\\nIf the Session Key Plugin is not yet installed, you need to install it before it can be used. To simplify the workflow, it is also possible to batch the plugin installation along with creating session keys and performing other actions, which combines all of these steps into one user operation.\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { modularAccountClient } from \\\"./client\\\";\\nimport {\\n accountLoupeActions,\\n multiOwnerPluginActions,\\n sessionKeyPluginActions,\\n pluginManagerActions,\\n} from \\\"@account-kit/smart-contracts\\\";\\n\\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n\\nimport { SessionKeyPlugin } from \\\"@account-kit/smart-contracts\\\";\\n\\n// 1. check if the plugin is installed\\nconst isPluginInstalled = await extendedClient\\n .getInstalledPlugins({})\\n // This checks using the default address for the chain, but you can always pass in your own plugin address here as an override\\n .then((x) => x.includes(SessionKeyPlugin.meta.addresses[chain.id]));\\n\\n//---cut---\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\n// 2. if the plugin is not installed, then install it and set up the session key\\nif (!isPluginInstalled) {\\n // lets create an initial permission set for the session key giving it an eth spend limit\\n // if we don't set anything here, then the key will have 0 permissions\\n const initialPermissions =\\n new SessionKeyPermissionsBuilder().setNativeTokenSpendLimit({\\n spendLimit: 1000000n,\\n });\\n\\n const { hash } = await extendedClient.installSessionKeyPlugin({\\n // 1st arg is the initial set of session keys\\n // 2nd arg is the tags for the session keys\\n // 3rd arg is the initial set of permissions\\n args: [\\n [await sessionKeySigner.getAddress()],\\n [zeroHash],\\n [initialPermissions.encode()],\\n ],\\n });\\n\\n await extendedClient.waitForUserOperationTransaction({ hash });\\n}\\n```\\n\\n```ts [client.ts] filename=\\\"client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\\n### Construct the initial set of permissions\\n\\nSession keys are powerful because of permissions that limit what actions they can take. When you add a session key, you should also specify the initial permissions that apply over the key.\\n\\nSee the [Supported Permissions](/smart-contracts/session-keys/supported-permissions#using-the-permissionsbuilder) page for more information on how to used the permissions builder.\\n\\nLet's use the permission builder to build a set of permissions that sets a spend limit:\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { modularAccountClient } from \\\"./client\\\";\\nimport {\\n accountLoupeActions,\\n multiOwnerPluginActions,\\n sessionKeyPluginActions,\\n pluginManagerActions,\\n} from \\\"@account-kit/smart-contracts\\\";\\n\\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n\\n//---cut---\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst initialPermissions =\\n new SessionKeyPermissionsBuilder().setNativeTokenSpendLimit({\\n spendLimit: 1000000n,\\n });\\n\\nconst result = await extendedClient.updateKeyPermissions({\\n args: [sessionKeyAddress, initialPermissions.encode()],\\n});\\n```\\n\\n```ts [client.ts] filename=\\\"client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\\n## Managing Session Keys\\n\\nThe Session Key Plugin allows you to:\\n\\n- Add session keys, and set the key's initial permissions.\\n- Remove session keys.\\n- Update key permissions.\\n- Rotate session keys. This action replaces the previous session key with a new session key, while keeping the existing permissions.\\n\\n### Add a Session Key\\n\\nSession keys can be added either during installation, or using the `addSessionKey` function.\\n\\n:::code-group\\n\\n```ts [add-session-key.ts] twoslash\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\nimport { keccak256 } from \\\"viem\\\";\\nimport { client } from \\\"./base-client\\\";\\n\\nconst result = await client.addSessionKey({\\n key: \\\"0xSessionKeyAddress\\\",\\n // tag is an identifier for the emitted SessionKeyAdded event\\n tag: keccak256(new TextEncoder().encode(\\\"session-key-tag\\\")),\\n permissions: new SessionKeyPermissionsBuilder().encode(),\\n});\\n```\\n\\n```ts [base-client.ts] filename=\\\"base-client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/session-keys/base-client.ts]\\n```\\n\\n:::\\n\\n### Remove a Session Key\\n\\nSession keys can be removed using the `removeSessionKey` function.\\n:::code-group\\n\\n```ts [remove-session-key.ts] twoslash\\nimport { client } from \\\"./base-client\\\";\\n\\nconst result = await client.removeSessionKey({\\n key: \\\"0xSessionKeyAddress\\\",\\n});\\n```\\n\\n```ts [base-client.ts] filename=\\\"base-client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/session-keys/base-client.ts]\\n```\\n\\n:::\\n\\n### Update a Key's permissions\\n\\nSession key permissions can be edited after creation using the `updateKeyPermissions` function. Note that you should configure initial permissions when the key is added, and not rely on a second user operation to set the permissions.\\n:::code-group\\n\\n```ts [update-session-key.ts] twoslash\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\nimport { client } from \\\"./base-client\\\";\\n\\nconst result = await client.updateSessionKeyPermissions({\\n key: \\\"0xSessionKeyAddress\\\",\\n // add other permissions to the builder\\n permissions: new SessionKeyPermissionsBuilder()\\n .setTimeRange({\\n validFrom: Math.round(Date.now() / 1000),\\n // valid for 1 hour\\n validUntil: Math.round(Date.now() / 1000 + 60 * 60),\\n })\\n .encode(),\\n});\\n```\\n\\n```ts [base-client.ts] filename=\\\"base-client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/session-keys/base-client.ts]\\n```\\n\\n:::\\n\\n### Rotate a Session Key\\n\\nIf the key is no longer available, but there exists a tag identifying a previous session key configured for your application, you may instead choose to rotate the previous key’s permissions. This can be performed using `rotateKey` .\\n:::code-group\\n\\n```ts [rotate-session-key.ts] twoslash\\nimport { client } from \\\"./base-client.js\\\";\\n\\nconst result = await client.rotateSessionKey({\\n oldKey: \\\"0xOldKey\\\",\\n newKey: \\\"0xNewKey\\\",\\n});\\n```\\n\\n```ts [base-client.ts] filename=\\\"base-client.ts\\\" twoslash\\n// [!include ~/shared/smart-contracts/session-keys/base-client.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/smart-contracts/session-keys/getting-started#getting-started-with-session-keys\",\"html\":\"\\n

@account-kit/smart-contracts exports all of the definitions you need to use session keys with a Modular Account. We provide a simple SessionKeySigner class that generates session keys on the client and can be used as the signer for the Multi Owner Modular Account.\\nWe also export the necessary decorators which can be used to extend your modularAccountClient to make interacting with session keys easy.

\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#getting-started-with-session-keys\",\"isPage\":true,\"text\":\"\\n@account-kit/smart-contracts exports all of the definitions you need to use session keys with a Modular Account. We provide a simple SessionKeySigner class that generates session keys on the client and can be used as the signer for the Multi Owner Modular Account.\\nWe also export the necessary decorators which can be used to extend your modularAccountClient to make interacting with session keys easy.\\n\",\"title\":\"Getting started with Session Keys\",\"titles\":[]},{\"href\":\"/smart-contracts/session-keys/getting-started#usage\",\"html\":\"\\n

Let's take a look at a full example that demonstrates how to use session keys with a Modular Account.

\\n
/* eslint-disable @typescript-eslint/no-unused-vars */\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  SessionKeyAccessListType,\\n  SessionKeyPermissionsBuilder,\\n  SessionKeyPlugin,\\n  SessionKeySigner,\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\nimport { zeroHash } from "viem";\\n \\nconst chain = sepolia;\\n// this is the signer to connect with the account, later we will create a new client using a session key signe\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC");\\nconst sessionKeySigner = new SessionKeySigner();\\nconst client = (\\n  await createModularAccountAlchemyClient({\\n    chain,\\n    apiKey: "ALCHEMY_API_KEY",\\n    signer,\\n  })\\n).extend(sessionKeyPluginActions);\\n \\n// 1. check if the plugin is installed\\nconst isPluginInstalled = await client\\n  .getInstalledPlugins({})\\n  // This checks using the default address for the chain, but you can always pass in your own plugin address here as an override\\n  .then((x) => x.includes(SessionKeyPlugin.meta.addresses[chain.id]));\\n \\n// 2. if the plugin is not installed, then install it and set up the session key\\nif (!isPluginInstalled) {\\n  // lets create an initial permission set for the session key giving it an eth spend limit\\n  const initialPermissions = new SessionKeyPermissionsBuilder()\\n    .setNativeTokenSpendLimit({\\n      spendLimit: 1000000n,\\n    })\\n    // this will allow the session key plugin to interact with all addresses\\n    .setContractAccessControlType(SessionKeyAccessListType.ALLOW_ALL_ACCESS)\\n    .setTimeRange({\\n      validFrom: Math.round(Date.now() / 1000),\\n      // valid for 1 hour\\n      validUntil: Math.round(Date.now() / 1000 + 60 * 60),\\n    });\\n \\n  const { hash } = await client.installSessionKeyPlugin({\\n    // 1st arg is the initial set of session keys\\n    // 2nd arg is the tags for the session keys\\n    // 3rd arg is the initial set of permissions\\n    args: [\\n      [await sessionKeySigner.getAddress()],\\n      [zeroHash],\\n      [initialPermissions.encode()],\\n    ],\\n  });\\n \\n  await client.waitForUserOperationTransaction({ hash });\\n}\\n \\n// 3. set up a client that's using our session key\\nconst sessionKeyClient = (\\n  await createModularAccountAlchemyClient({\\n    chain,\\n    signer: sessionKeySigner,\\n    apiKey: "ALCHEMY_API_KEY",\\n    // this is important because it tells the client to use our previously deployed account\\n    accountAddress: client.getAddress(),\\n  })\\n).extend(sessionKeyPluginActions);\\n \\n// 4. send a user operation using the session key\\nconst result = await sessionKeyClient.executeWithSessionKey({\\n  args: [\\n    [\\n      {\\n        target: "0x1234123412341234123412341234123412341234",\\n        value: 1n,\\n        data: "0x",\\n      },\\n    ],\\n    await sessionKeySigner.getAddress(),\\n  ],\\n});
\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#usage\",\"isPage\":false,\"text\":\"\\nLet's take a look at a full example that demonstrates how to use session keys with a Modular Account.\\n/* eslint-disable @typescript-eslint/no-unused-vars */\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n SessionKeyAccessListType,\\n SessionKeyPermissionsBuilder,\\n SessionKeyPlugin,\\n SessionKeySigner,\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\nimport { zeroHash } from "viem";\\n \\nconst chain = sepolia;\\n// this is the signer to connect with the account, later we will create a new client using a session key signe\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC");\\nconst sessionKeySigner = new SessionKeySigner();\\nconst client = (\\n await createModularAccountAlchemyClient({\\n chain,\\n apiKey: "ALCHEMY_API_KEY",\\n signer,\\n })\\n).extend(sessionKeyPluginActions);\\n \\n// 1. check if the plugin is installed\\nconst isPluginInstalled = await client\\n .getInstalledPlugins({})\\n // This checks using the default address for the chain, but you can always pass in your own plugin address here as an override\\n .then((x) => x.includes(SessionKeyPlugin.meta.addresses[chain.id]));\\n \\n// 2. if the plugin is not installed, then install it and set up the session key\\nif (!isPluginInstalled) {\\n // lets create an initial permission set for the session key giving it an eth spend limit\\n const initialPermissions = new SessionKeyPermissionsBuilder()\\n .setNativeTokenSpendLimit({\\n spendLimit: 1000000n,\\n })\\n // this will allow the session key plugin to interact with all addresses\\n .setContractAccessControlType(SessionKeyAccessListType.ALLOW_ALL_ACCESS)\\n .setTimeRange({\\n validFrom: Math.round(Date.now() / 1000),\\n // valid for 1 hour\\n validUntil: Math.round(Date.now() / 1000 + 60 * 60),\\n });\\n \\n const { hash } = await client.installSessionKeyPlugin({\\n // 1st arg is the initial set of session keys\\n // 2nd arg is the tags for the session keys\\n // 3rd arg is the initial set of permissions\\n args: [\\n [await sessionKeySigner.getAddress()],\\n [zeroHash],\\n [initialPermissions.encode()],\\n ],\\n });\\n \\n await client.waitForUserOperationTransaction({ hash });\\n}\\n \\n// 3. set up a client that's using our session key\\nconst sessionKeyClient = (\\n await createModularAccountAlchemyClient({\\n chain,\\n signer: sessionKeySigner,\\n apiKey: "ALCHEMY_API_KEY",\\n // this is important because it tells the client to use our previously deployed account\\n accountAddress: client.getAddress(),\\n })\\n).extend(sessionKeyPluginActions);\\n \\n// 4. send a user operation using the session key\\nconst result = await sessionKeyClient.executeWithSessionKey({\\n args: [\\n [\\n {\\n target: "0x1234123412341234123412341234123412341234",\\n value: 1n,\\n data: "0x",\\n },\\n ],\\n await sessionKeySigner.getAddress(),\\n ],\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"Getting started with Session Keys\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#breaking-it-down\",\"html\":\"\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#breaking-it-down\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Breaking it down\",\"titles\":[\"Getting started with Session Keys\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#determine-where-the-session-key-is-stored\",\"html\":\"\\n

Session keys can be held on the client side or on a backend agent. Client side session keys are useful for skipping confirmations, and agent side keys are useful for automations.

\\n

In the above example, we use a client-side key using the SessionKeySigner exported from @account-kit/smart-contracts.

\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst sessionKeySigner = new SessionKeySigner();
\\n

If you are using backend agent controlled session keys, then the agent should generate the private key and send only the address to the client. This protects the private key by not exposing it to the user.

\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#determine-where-the-session-key-is-stored\",\"isPage\":false,\"text\":\"\\nSession keys can be held on the client side or on a backend agent. Client side session keys are useful for skipping confirmations, and agent side keys are useful for automations.\\nIn the above example, we use a client-side key using the SessionKeySigner exported from @account-kit/smart-contracts.\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst sessionKeySigner = new SessionKeySigner();\\nIf you are using backend agent controlled session keys, then the agent should generate the private key and send only the address to the client. This protects the private key by not exposing it to the user.\\n\",\"title\":\"Determine where the session key is stored\",\"titles\":[\"Getting started with Session Keys\",\"Breaking it down\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#extend-your-client-with-modular-account-decorators\",\"html\":\"\\n

The base modularAccountClient and AlchemymodularAccountClient, only include base functionality for sending user operations. If you are using a ModularAccount, then you will want to extend your client with the various decorators exported by @account-kit/smart-contracts.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport { sessionKeyPluginActions } from "@account-kit/smart-contracts";\\n \\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#extend-your-client-with-modular-account-decorators\",\"isPage\":false,\"text\":\"\\nThe base modularAccountClient and AlchemymodularAccountClient, only include base functionality for sending user operations. If you are using a ModularAccount, then you will want to extend your client with the various decorators exported by @account-kit/smart-contracts.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport { sessionKeyPluginActions } from "@account-kit/smart-contracts";\\n \\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"Extend your client with Modular Account Decorators\",\"titles\":[\"Getting started with Session Keys\",\"Breaking it down\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#check-if-the-session-key-plugin-is-installed\",\"html\":\"\\n

Before you can start using session keys, you need to check whether the user’s account has the session key plugin installed. You can perform this check using the account loupe decorator, which lets you inspect the state of installed plugins on a Modular Account.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport {\\n  accountLoupeActions,\\n  multiOwnerPluginActions,\\n  sessionKeyPluginActions,\\n  pluginManagerActions,\\n} from "@account-kit/smart-contracts";\\n \\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n \\n//---cut---\\n \\nimport { SessionKeyPlugin } from "@account-kit/smart-contracts";\\n \\n// 1. check if the plugin is installed\\nconst isPluginInstalled = await modularAccountClient\\n  .getInstalledPlugins({})\\n  // This checks using the default address for the chain, but you can always pass in your own plugin address here as an override\\n  .then((x) => x.includes(SessionKeyPlugin.meta.addresses[chain.id]));
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#check-if-the-session-key-plugin-is-installed\",\"isPage\":false,\"text\":\"\\nBefore you can start using session keys, you need to check whether the user’s account has the session key plugin installed. You can perform this check using the account loupe decorator, which lets you inspect the state of installed plugins on a Modular Account.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport {\\n accountLoupeActions,\\n multiOwnerPluginActions,\\n sessionKeyPluginActions,\\n pluginManagerActions,\\n} from "@account-kit/smart-contracts";\\n \\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n \\n//---cut---\\n \\nimport { SessionKeyPlugin } from "@account-kit/smart-contracts";\\n \\n// 1. check if the plugin is installed\\nconst isPluginInstalled = await modularAccountClient\\n .getInstalledPlugins({})\\n // This checks using the default address for the chain, but you can always pass in your own plugin address here as an override\\n .then((x) => x.includes(SessionKeyPlugin.meta.addresses[chain.id]));import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"Check if the Session Key Plugin is installed\",\"titles\":[\"Getting started with Session Keys\",\"Breaking it down\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#install-the-session-key-plugin\",\"html\":\"\\n

If the Session Key Plugin is not yet installed, you need to install it before it can be used. To simplify the workflow, it is also possible to batch the plugin installation along with creating session keys and performing other actions, which combines all of these steps into one user operation.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport {\\n  accountLoupeActions,\\n  multiOwnerPluginActions,\\n  sessionKeyPluginActions,\\n  pluginManagerActions,\\n} from "@account-kit/smart-contracts";\\n \\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n \\nimport { SessionKeyPlugin } from "@account-kit/smart-contracts";\\n \\n// 1. check if the plugin is installed\\nconst isPluginInstalled = await extendedClient\\n  .getInstalledPlugins({})\\n  // This checks using the default address for the chain, but you can always pass in your own plugin address here as an override\\n  .then((x) => x.includes(SessionKeyPlugin.meta.addresses[chain.id]));\\n \\n//---cut---\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\n// 2. if the plugin is not installed, then install it and set up the session key\\nif (!isPluginInstalled) {\\n  // lets create an initial permission set for the session key giving it an eth spend limit\\n  // if we don't set anything here, then the key will have 0 permissions\\n  const initialPermissions =\\n    new SessionKeyPermissionsBuilder().setNativeTokenSpendLimit({\\n      spendLimit: 1000000n,\\n    });\\n \\n  const { hash } = await extendedClient.installSessionKeyPlugin({\\n    // 1st arg is the initial set of session keys\\n    // 2nd arg is the tags for the session keys\\n    // 3rd arg is the initial set of permissions\\n    args: [\\n      [await sessionKeySigner.getAddress()],\\n      [zeroHash],\\n      [initialPermissions.encode()],\\n    ],\\n  });\\n \\n  await extendedClient.waitForUserOperationTransaction({ hash });\\n}
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#install-the-session-key-plugin\",\"isPage\":false,\"text\":\"\\nIf the Session Key Plugin is not yet installed, you need to install it before it can be used. To simplify the workflow, it is also possible to batch the plugin installation along with creating session keys and performing other actions, which combines all of these steps into one user operation.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport {\\n accountLoupeActions,\\n multiOwnerPluginActions,\\n sessionKeyPluginActions,\\n pluginManagerActions,\\n} from "@account-kit/smart-contracts";\\n \\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n \\nimport { SessionKeyPlugin } from "@account-kit/smart-contracts";\\n \\n// 1. check if the plugin is installed\\nconst isPluginInstalled = await extendedClient\\n .getInstalledPlugins({})\\n // This checks using the default address for the chain, but you can always pass in your own plugin address here as an override\\n .then((x) => x.includes(SessionKeyPlugin.meta.addresses[chain.id]));\\n \\n//---cut---\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\n// 2. if the plugin is not installed, then install it and set up the session key\\nif (!isPluginInstalled) {\\n // lets create an initial permission set for the session key giving it an eth spend limit\\n // if we don't set anything here, then the key will have 0 permissions\\n const initialPermissions =\\n new SessionKeyPermissionsBuilder().setNativeTokenSpendLimit({\\n spendLimit: 1000000n,\\n });\\n \\n const { hash } = await extendedClient.installSessionKeyPlugin({\\n // 1st arg is the initial set of session keys\\n // 2nd arg is the tags for the session keys\\n // 3rd arg is the initial set of permissions\\n args: [\\n [await sessionKeySigner.getAddress()],\\n [zeroHash],\\n [initialPermissions.encode()],\\n ],\\n });\\n \\n await extendedClient.waitForUserOperationTransaction({ hash });\\n}import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"Install the Session Key Plugin\",\"titles\":[\"Getting started with Session Keys\",\"Breaking it down\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#construct-the-initial-set-of-permissions\",\"html\":\"\\n

Session keys are powerful because of permissions that limit what actions they can take. When you add a session key, you should also specify the initial permissions that apply over the key.

\\n

See the Supported Permissions page for more information on how to used the permissions builder.

\\n

Let's use the permission builder to build a set of permissions that sets a spend limit:

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport {\\n  accountLoupeActions,\\n  multiOwnerPluginActions,\\n  sessionKeyPluginActions,\\n  pluginManagerActions,\\n} from "@account-kit/smart-contracts";\\n \\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n \\n//---cut---\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst initialPermissions =\\n  new SessionKeyPermissionsBuilder().setNativeTokenSpendLimit({\\n    spendLimit: 1000000n,\\n  });\\n \\nconst result = await extendedClient.updateKeyPermissions({\\n  args: [sessionKeyAddress, initialPermissions.encode()],\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#construct-the-initial-set-of-permissions\",\"isPage\":false,\"text\":\"\\nSession keys are powerful because of permissions that limit what actions they can take. When you add a session key, you should also specify the initial permissions that apply over the key.\\nSee the Supported Permissions page for more information on how to used the permissions builder.\\nLet's use the permission builder to build a set of permissions that sets a spend limit:\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport {\\n accountLoupeActions,\\n multiOwnerPluginActions,\\n sessionKeyPluginActions,\\n pluginManagerActions,\\n} from "@account-kit/smart-contracts";\\n \\nconst extendedClient = modularAccountClient.extend(sessionKeyPluginActions);\\n \\n//---cut---\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst initialPermissions =\\n new SessionKeyPermissionsBuilder().setNativeTokenSpendLimit({\\n spendLimit: 1000000n,\\n });\\n \\nconst result = await extendedClient.updateKeyPermissions({\\n args: [sessionKeyAddress, initialPermissions.encode()],\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"Construct the initial set of permissions\",\"titles\":[\"Getting started with Session Keys\",\"Breaking it down\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#managing-session-keys\",\"html\":\"\\n

The Session Key Plugin allows you to:

\\n
    \\n
  • Add session keys, and set the key's initial permissions.
  • \\n
  • Remove session keys.
  • \\n
  • Update key permissions.
  • \\n
  • Rotate session keys. This action replaces the previous session key with a new session key, while keeping the existing permissions.
  • \\n
\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#managing-session-keys\",\"isPage\":false,\"text\":\"\\nThe Session Key Plugin allows you to:\\n\\nAdd session keys, and set the key's initial permissions.\\nRemove session keys.\\nUpdate key permissions.\\nRotate session keys. This action replaces the previous session key with a new session key, while keeping the existing permissions.\\n\\n\",\"title\":\"Managing Session Keys\",\"titles\":[\"Getting started with Session Keys\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#add-a-session-key\",\"html\":\"\\n

Session keys can be added either during installation, or using the addSessionKey function.

\\n
// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: example.js\\n \\n// ---cut---\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\nimport { keccak256 } from "viem";\\nimport { client } from "./base-client";\\n \\nconst result = await client.addSessionKey({\\n  key: "0xSessionKeyAddress",\\n  // tag is an identifier for the emitted SessionKeyAdded event\\n  tag: keccak256(new TextEncoder().encode("session-key-tag")),\\n  permissions: new SessionKeyPermissionsBuilder().encode(),\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);
\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#add-a-session-key\",\"isPage\":false,\"text\":\"\\nSession keys can be added either during installation, or using the addSessionKey function.\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: example.js\\n \\n// ---cut---\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\nimport { keccak256 } from "viem";\\nimport { client } from "./base-client";\\n \\nconst result = await client.addSessionKey({\\n key: "0xSessionKeyAddress",\\n // tag is an identifier for the emitted SessionKeyAdded event\\n tag: keccak256(new TextEncoder().encode("session-key-tag")),\\n permissions: new SessionKeyPermissionsBuilder().encode(),\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n\",\"title\":\"Add a Session Key\",\"titles\":[\"Getting started with Session Keys\",\"Managing Session Keys\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#remove-a-session-key\",\"html\":\"\\n

Session keys can be removed using the removeSessionKey function.

\\n
// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./base-client";\\n \\nconst result = await client.removeSessionKey({\\n  key: "0xSessionKeyAddress",\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);
\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#remove-a-session-key\",\"isPage\":false,\"text\":\"\\nSession keys can be removed using the removeSessionKey function.\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./base-client";\\n \\nconst result = await client.removeSessionKey({\\n key: "0xSessionKeyAddress",\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n\",\"title\":\"Remove a Session Key\",\"titles\":[\"Getting started with Session Keys\",\"Managing Session Keys\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#update-a-keys-permissions\",\"html\":\"\\n

Session key permissions can be edited after creation using the updateKeyPermissions function. Note that you should configure initial permissions when the key is added, and not rely on a second user operation to set the permissions.

\\n
// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: example.js\\n \\n// ---cut---\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\nimport { client } from "./base-client";\\n \\nconst result = await client.updateSessionKeyPermissions({\\n  key: "0xSessionKeyAddress",\\n  // add other permissions to the builder\\n  permissions: new SessionKeyPermissionsBuilder()\\n    .setTimeRange({\\n      validFrom: Math.round(Date.now() / 1000),\\n      // valid for 1 hour\\n      validUntil: Math.round(Date.now() / 1000 + 60 * 60),\\n    })\\n    .encode(),\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);
\\n\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#update-a-keys-permissions\",\"isPage\":false,\"text\":\"\\nSession key permissions can be edited after creation using the updateKeyPermissions function. Note that you should configure initial permissions when the key is added, and not rely on a second user operation to set the permissions.\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: example.js\\n \\n// ---cut---\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\nimport { client } from "./base-client";\\n \\nconst result = await client.updateSessionKeyPermissions({\\n key: "0xSessionKeyAddress",\\n // add other permissions to the builder\\n permissions: new SessionKeyPermissionsBuilder()\\n .setTimeRange({\\n validFrom: Math.round(Date.now() / 1000),\\n // valid for 1 hour\\n validUntil: Math.round(Date.now() / 1000 + 60 * 60),\\n })\\n .encode(),\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n\",\"title\":\"Update a Key's permissions\",\"titles\":[\"Getting started with Session Keys\",\"Managing Session Keys\"]},{\"href\":\"/smart-contracts/session-keys/getting-started#rotate-a-session-key\",\"html\":\"\\n

If the key is no longer available, but there exists a tag identifying a previous session key configured for your application, you may instead choose to rotate the previous key’s permissions. This can be performed using rotateKey .

\\n
// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./base-client.js";\\n \\nconst result = await client.rotateSessionKey({\\n  oldKey: "0xOldKey",\\n  newKey: "0xNewKey",\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n  createModularAccountAlchemyClient,\\n  sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n  await createModularAccountAlchemyClient({\\n    chain: sepolia,\\n    signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n    apiKey: "ALCHEMY_API_KEY",\\n  })\\n).extend(sessionKeyPluginActions);
\",\"id\":\"pages/smart-contracts/session-keys/getting-started.mdx#rotate-a-session-key\",\"isPage\":false,\"text\":\"\\nIf the key is no longer available, but there exists a tag identifying a previous session key configured for your application, you may instead choose to rotate the previous key’s permissions. This can be performed using rotateKey .\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: base-client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\\n// @filename: example.js\\n \\n// ---cut---\\nimport { client } from "./base-client.js";\\n \\nconst result = await client.rotateSessionKey({\\n oldKey: "0xOldKey",\\n newKey: "0xNewKey",\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport {\\n createModularAccountAlchemyClient,\\n sessionKeyPluginActions,\\n} from "@account-kit/smart-contracts";\\n \\nexport const client = (\\n await createModularAccountAlchemyClient({\\n chain: sepolia,\\n signer: LocalAccountSigner.mnemonicToAccountSigner("MNEMONIC"),\\n apiKey: "ALCHEMY_API_KEY",\\n })\\n).extend(sessionKeyPluginActions);\",\"title\":\"Rotate a Session Key\",\"titles\":[\"Getting started with Session Keys\",\"Managing Session Keys\"]}]}],[\"index.388e97f5b4cbebbd54b2e0ff91c2d599e9daa0441a9714ed55e3e1bd659a0295\",{\"mdx\":\"---\\ntitle: 3rd Party Bundlers\\ndescription: Learn how to use a different RPC provider with Account Kit\\n---\\n\\n# Using a different RPC Provider\\n\\nThe `SmartAccountClient` within `@aa-sdk/core` is unopinionated about which bundler you use, so you can connect to any RPC provider really simply.\\n\\n## Usage\\n\\nIf we look at the example for creating a `SmartAccountClient`:\\n\\n```ts twoslash\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createSmartAccountClient({\\n transport: http(\\\"https://polygon-mumbai.g.alchemy.com/v2/demo\\\"),\\n chain: sepolia,\\n});\\n```\\n\\nYou can see that we set the `transport` to `http(\\\"https://polygon-mumbai.g.alchemy.com/v2/demo\\\")`. You can swap out that the url in the `http` function to\\nany other provider's URL.\\n\\n:::warning\\nDepending on your provider, you may have to pass in custom logic for the `gasEstimator` and `feeEstimator` properties when calling `createSmartAccountClient`. Consult\\nwith your provider on what the correct logic is.\\n:::\\n\\n## Splitting Bundler traffic and Node RPC traffic\\n\\nIt might be the case that you want to use a different RPC provider for your bundler traffic and your node traffic. This is a common use case, and you can do this by leveraging the [`split`](/reference/aa-sdk/core/functions/split) transport and passing it to your `createSmartAccountClient` call. For example:\\n\\n```ts twoslash\\nimport { split } from \\\"@aa-sdk/core\\\";\\nimport { createPublicClient, http } from \\\"viem\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\",\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [\\n {\\n methods: bundlerMethods,\\n transport: http(\\\"BUNDLER_RPC_URL\\\"),\\n },\\n ],\\n fallback: http(\\\"OTHER_RPC_URL\\\"),\\n }),\\n});\\n```\\n\\n## Zora and Fraxtal\\n\\nUsing a split Bundler and Node RPC setup is required for Fraxtal, Fraxtal Testnet, Zora, and Zora Sepolia networks since Alchemy currently only supports Account Abstraction endpoints for those networks. Please refer to documentation from [Frax](https://docs.frax.com/fraxtal/network/network-information) and [Zora](https://docs.zora.co/docs/zora-network/network) about RPC options.\\n\",\"document\":[{\"href\":\"/infra/third-party/bundlers#using-a-different-rpc-provider\",\"html\":\"\\n

The SmartAccountClient within @aa-sdk/core is unopinionated about which bundler you use, so you can connect to any RPC provider really simply.

\\n\",\"id\":\"pages/infra/third-party/bundlers.mdx#using-a-different-rpc-provider\",\"isPage\":true,\"text\":\"\\nThe SmartAccountClient within @aa-sdk/core is unopinionated about which bundler you use, so you can connect to any RPC provider really simply.\\n\",\"title\":\"Using a different RPC Provider\",\"titles\":[]},{\"href\":\"/infra/third-party/bundlers#usage\",\"html\":\"\\n

If we look at the example for creating a SmartAccountClient:

\\n
import { createSmartAccountClient } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst client = createSmartAccountClient({\\n  transport: http("https://polygon-mumbai.g.alchemy.com/v2/demo"),\\n  chain: sepolia,\\n});
\\n

You can see that we set the transport to http("https://polygon-mumbai.g.alchemy.com/v2/demo"). You can swap out that the url in the http function to\\nany other provider's URL.

\\n\\n\",\"id\":\"pages/infra/third-party/bundlers.mdx#usage\",\"isPage\":false,\"text\":\"\\nIf we look at the example for creating a SmartAccountClient:\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst client = createSmartAccountClient({\\n transport: http("https://polygon-mumbai.g.alchemy.com/v2/demo"),\\n chain: sepolia,\\n});\\nYou can see that we set the transport to http("https://polygon-mumbai.g.alchemy.com/v2/demo"). You can swap out that the url in the http function to\\nany other provider's URL.\\nDepending on your provider, you may have to pass in custom logic for the gasEstimator and feeEstimator properties when calling createSmartAccountClient. Consult\\nwith your provider on what the correct logic is.\\n\",\"title\":\"Usage\",\"titles\":[\"Using a different RPC Provider\"]},{\"href\":\"/infra/third-party/bundlers#splitting-bundler-traffic-and-node-rpc-traffic\",\"html\":\"\\n

It might be the case that you want to use a different RPC provider for your bundler traffic and your node traffic. This is a common use case, and you can do this by leveraging the split transport and passing it to your createSmartAccountClient call. For example:

\\n
import { split } from "@aa-sdk/core";\\nimport { createPublicClient, http } from "viem";\\n \\nconst bundlerMethods = [\\n  "eth_sendUserOperation",\\n  "eth_estimateUserOperationGas",\\n  "eth_getUserOperationReceipt",\\n  "eth_getUserOperationByHash",\\n  "eth_supportedEntryPoints",\\n];\\n \\nconst clientWithSplit = createPublicClient({\\n  transport: split({\\n    overrides: [\\n      {\\n        methods: bundlerMethods,\\n        transport: http("BUNDLER_RPC_URL"),\\n      },\\n    ],\\n    fallback: http("OTHER_RPC_URL"),\\n  }),\\n});
\\n\",\"id\":\"pages/infra/third-party/bundlers.mdx#splitting-bundler-traffic-and-node-rpc-traffic\",\"isPage\":false,\"text\":\"\\nIt might be the case that you want to use a different RPC provider for your bundler traffic and your node traffic. This is a common use case, and you can do this by leveraging the split transport and passing it to your createSmartAccountClient call. For example:\\nimport { split } from "@aa-sdk/core";\\nimport { createPublicClient, http } from "viem";\\n \\nconst bundlerMethods = [\\n "eth_sendUserOperation",\\n "eth_estimateUserOperationGas",\\n "eth_getUserOperationReceipt",\\n "eth_getUserOperationByHash",\\n "eth_supportedEntryPoints",\\n];\\n \\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [\\n {\\n methods: bundlerMethods,\\n transport: http("BUNDLER_RPC_URL"),\\n },\\n ],\\n fallback: http("OTHER_RPC_URL"),\\n }),\\n});\\n\",\"title\":\"Splitting Bundler traffic and Node RPC traffic\",\"titles\":[\"Using a different RPC Provider\"]},{\"href\":\"/infra/third-party/bundlers#zora-and-fraxtal\",\"html\":\"\\n

Using a split Bundler and Node RPC setup is required for Fraxtal, Fraxtal Testnet, Zora, and Zora Sepolia networks since Alchemy currently only supports Account Abstraction endpoints for those networks. Please refer to documentation from Frax and Zora about RPC options.

\",\"id\":\"pages/infra/third-party/bundlers.mdx#zora-and-fraxtal\",\"isPage\":false,\"text\":\"\\nUsing a split Bundler and Node RPC setup is required for Fraxtal, Fraxtal Testnet, Zora, and Zora Sepolia networks since Alchemy currently only supports Account Abstraction endpoints for those networks. Please refer to documentation from Frax and Zora about RPC options.\",\"title\":\"Zora and Fraxtal\",\"titles\":[\"Using a different RPC Provider\"]}]}],[\"index.2f597d245fe91588b51b6df377784d0f5c63947b287c5dbd1bab1a60527fd52b\",{\"mdx\":\"---\\ntitle: Introduction to using Session Keys\\ndescription: Learn about Alchemy's ERC-6900 Compatible Session Key Plugin.\\n---\\n\\n# Session Key Plugin overview\\n\\nThe Session Key plugin lets your smart account add additional signers to your Modular Account with specific permissions.\\n\\n## Why Session Keys?\\n\\n### Skip duplicate confirmations\\n\\nSession keys unlock a simplified authentication process by allowing users to interact with apps without needing to confirm each action using their primary key. Instead, users create a session key with permissions specific to the app, then the app can use that key for future actions. This speeds up the user interaction and provides a smoother experience.\\n\\n### Automate actions\\n\\nWith the ability to delegate specific permissions to session keys, users can automate actions within predefined limits. Session keys can be used to streamline processes like recurring payments, contract interactions, or any activity that benefits from automation.\\n\\n### Enhance security with permissions\\n\\nBy using session keys, the exposure of the main private key is minimized. Even if a session key is compromised, the attacker would not gain access to the user's main account and funds. This layered approach to security helps in mitigating risks associated with key management.\\n\\n## Supported permissions\\n\\nThe session key plugin supports the following types of permissions for each key:\\n\\n### Time range\\n\\nSupports a start time and an end time for each key.\\n\\n### Access control lists\\n\\nSupports either an allowlist or a denylist for addresses. Optionally, access control lists may also specify specific functions on contracts to allow or deny.\\n\\n### ERC-20 spending Limits\\n\\nSupports limiting how much of a specific ERC-20 token a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 100 USDC per week).\\n\\n### Native token spending limits\\n\\nSupports limiting how much of the native token, e.g. ETH or MATIC, a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).\\n\\n### Gas spending limits\\n\\nSupports limiting how much of the native token (e.g. ETH or MATIC) a session key can spend on gas. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).\\n\\nAlternatively, you can also require that a session key uses a specific paymaster address, instead of spending the account’s native token for gas.\\n\\nNote that the gas limit is tracked in terms of native token units (wei), not in units of gas. The gas usage of a user operation is considered to be the maximum gas a user operation can spend, i.e. `total gas limit * maxFeePerGas`. This can overestimate when compared to the actual gas cost of each user operation.\\n\",\"document\":[{\"href\":\"/smart-contracts/session-keys#session-key-plugin-overview\",\"html\":\"\\n

The Session Key plugin lets your smart account add additional signers to your Modular Account with specific permissions.

\\n\",\"id\":\"pages/smart-contracts/session-keys/#session-key-plugin-overview\",\"isPage\":true,\"text\":\"\\nThe Session Key plugin lets your smart account add additional signers to your Modular Account with specific permissions.\\n\",\"title\":\"Session Key Plugin overview\",\"titles\":[]},{\"href\":\"/smart-contracts/session-keys#why-session-keys\",\"html\":\"\\n\",\"id\":\"pages/smart-contracts/session-keys/#why-session-keys\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Why Session Keys?\",\"titles\":[\"Session Key Plugin overview\"]},{\"href\":\"/smart-contracts/session-keys#skip-duplicate-confirmations\",\"html\":\"\\n

Session keys unlock a simplified authentication process by allowing users to interact with apps without needing to confirm each action using their primary key. Instead, users create a session key with permissions specific to the app, then the app can use that key for future actions. This speeds up the user interaction and provides a smoother experience.

\\n\",\"id\":\"pages/smart-contracts/session-keys/#skip-duplicate-confirmations\",\"isPage\":false,\"text\":\"\\nSession keys unlock a simplified authentication process by allowing users to interact with apps without needing to confirm each action using their primary key. Instead, users create a session key with permissions specific to the app, then the app can use that key for future actions. This speeds up the user interaction and provides a smoother experience.\\n\",\"title\":\"Skip duplicate confirmations\",\"titles\":[\"Session Key Plugin overview\",\"Why Session Keys?\"]},{\"href\":\"/smart-contracts/session-keys#automate-actions\",\"html\":\"\\n

With the ability to delegate specific permissions to session keys, users can automate actions within predefined limits. Session keys can be used to streamline processes like recurring payments, contract interactions, or any activity that benefits from automation.

\\n\",\"id\":\"pages/smart-contracts/session-keys/#automate-actions\",\"isPage\":false,\"text\":\"\\nWith the ability to delegate specific permissions to session keys, users can automate actions within predefined limits. Session keys can be used to streamline processes like recurring payments, contract interactions, or any activity that benefits from automation.\\n\",\"title\":\"Automate actions\",\"titles\":[\"Session Key Plugin overview\",\"Why Session Keys?\"]},{\"href\":\"/smart-contracts/session-keys#enhance-security-with-permissions\",\"html\":\"\\n

By using session keys, the exposure of the main private key is minimized. Even if a session key is compromised, the attacker would not gain access to the user's main account and funds. This layered approach to security helps in mitigating risks associated with key management.

\\n\",\"id\":\"pages/smart-contracts/session-keys/#enhance-security-with-permissions\",\"isPage\":false,\"text\":\"\\nBy using session keys, the exposure of the main private key is minimized. Even if a session key is compromised, the attacker would not gain access to the user's main account and funds. This layered approach to security helps in mitigating risks associated with key management.\\n\",\"title\":\"Enhance security with permissions\",\"titles\":[\"Session Key Plugin overview\",\"Why Session Keys?\"]},{\"href\":\"/smart-contracts/session-keys#supported-permissions\",\"html\":\"\\n

The session key plugin supports the following types of permissions for each key:

\\n\",\"id\":\"pages/smart-contracts/session-keys/#supported-permissions\",\"isPage\":false,\"text\":\"\\nThe session key plugin supports the following types of permissions for each key:\\n\",\"title\":\"Supported permissions\",\"titles\":[\"Session Key Plugin overview\"]},{\"href\":\"/smart-contracts/session-keys#time-range\",\"html\":\"\\n

Supports a start time and an end time for each key.

\\n\",\"id\":\"pages/smart-contracts/session-keys/#time-range\",\"isPage\":false,\"text\":\"\\nSupports a start time and an end time for each key.\\n\",\"title\":\"Time range\",\"titles\":[\"Session Key Plugin overview\",\"Supported permissions\"]},{\"href\":\"/smart-contracts/session-keys#access-control-lists\",\"html\":\"\\n

Supports either an allowlist or a denylist for addresses. Optionally, access control lists may also specify specific functions on contracts to allow or deny.

\\n\",\"id\":\"pages/smart-contracts/session-keys/#access-control-lists\",\"isPage\":false,\"text\":\"\\nSupports either an allowlist or a denylist for addresses. Optionally, access control lists may also specify specific functions on contracts to allow or deny.\\n\",\"title\":\"Access control lists\",\"titles\":[\"Session Key Plugin overview\",\"Supported permissions\"]},{\"href\":\"/smart-contracts/session-keys#erc-20-spending-limits\",\"html\":\"\\n

Supports limiting how much of a specific ERC-20 token a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 100 USDC per week).

\\n\",\"id\":\"pages/smart-contracts/session-keys/#erc-20-spending-limits\",\"isPage\":false,\"text\":\"\\nSupports limiting how much of a specific ERC-20 token a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 100 USDC per week).\\n\",\"title\":\"ERC-20 spending Limits\",\"titles\":[\"Session Key Plugin overview\",\"Supported permissions\"]},{\"href\":\"/smart-contracts/session-keys#native-token-spending-limits\",\"html\":\"\\n

Supports limiting how much of the native token, e.g. ETH or MATIC, a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).

\\n\",\"id\":\"pages/smart-contracts/session-keys/#native-token-spending-limits\",\"isPage\":false,\"text\":\"\\nSupports limiting how much of the native token, e.g. ETH or MATIC, a key may spend. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).\\n\",\"title\":\"Native token spending limits\",\"titles\":[\"Session Key Plugin overview\",\"Supported permissions\"]},{\"href\":\"/smart-contracts/session-keys#gas-spending-limits\",\"html\":\"\\n

Supports limiting how much of the native token (e.g. ETH or MATIC) a session key can spend on gas. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).

\\n

Alternatively, you can also require that a session key uses a specific paymaster address, instead of spending the account’s native token for gas.

\\n

Note that the gas limit is tracked in terms of native token units (wei), not in units of gas. The gas usage of a user operation is considered to be the maximum gas a user operation can spend, i.e. total gas limit * maxFeePerGas. This can overestimate when compared to the actual gas cost of each user operation.

\",\"id\":\"pages/smart-contracts/session-keys/#gas-spending-limits\",\"isPage\":false,\"text\":\"\\nSupports limiting how much of the native token (e.g. ETH or MATIC) a session key can spend on gas. This may be a total for the key, or refreshing on an interval (e.g. 1 ETH per week).\\nAlternatively, you can also require that a session key uses a specific paymaster address, instead of spending the account’s native token for gas.\\nNote that the gas limit is tracked in terms of native token units (wei), not in units of gas. The gas usage of a user operation is considered to be the maximum gas a user operation can spend, i.e. total gas limit * maxFeePerGas. This can overestimate when compared to the actual gas cost of each user operation.\",\"title\":\"Gas spending limits\",\"titles\":[\"Session Key Plugin overview\",\"Supported permissions\"]}]}],[\"index.c8ce0aef5100df791e2e7330529a862cddff48cc701ab9d7ddf4d742e5afa33b\",{\"mdx\":\"---\\ntitle: Light Account • Getting started\\ndescription: Getting started with Light Account in Account Kit\\n---\\n\\n# Getting started with Light Account\\n\\nIt is easy to get started with Light Account! We will show you how to create and send user operations for both `LightAccount` and `MultiOwnerLightAccount` using `@alchemy/aa-alchemy`.\\n\\n### Install packages\\n\\n:::code-group\\n\\n```bash [npm]\\nnpm i @account-kit/smart-contracts\\n```\\n\\n```bash [yarn]\\nyarn add@account-kit/smart-contracts\\n```\\n\\n:::\\n\\n### Create a client and send a user operation\\n\\nThe code snippets below demonstrate how to use `LightAccount` and `MultiOwnerLightAccount` with Account Kit. They create the account and send a `UserOperation` from it.\\n\\n:::code-group\\n\\n```ts [light-account.ts]\\nimport { createLightAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n```ts [multi-owner-light-account.ts]\\nimport { createMultiOwnerLightAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst lightAccountClient = await createMultiOwnerLightAccountAlchemyClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n:::\\n\\n:::tip[Address calculation]\\nFor `LightAccount`, the address of the smart account will be calculated as a combination of the version, [the owner, and the salt](https://github.com/alchemyplatform/light-account/blob/v2.0.0/src/LightAccountFactory.sol#L24-L33). You will get the same smart account address each time you supply the same `version` and `owner`. Alternatively, you can supply `salt` if you want a different address for the same `version` and `owner` params (the default salt is `0n`). For `MultiOwnerLightAccount`, the same pattern follows, except that it takes an array of owner addresses instead of a single owner address.\\n\\nIf you want to use a signer to connect to an account whose address does not map to the contract-generated address, you can supply the `accountAddress` to connect with the account of interest. In that case, the `signer` address is not used for address calculation, but only used for signing the operation.\\n\\nReference: https://eips.ethereum.org/EIPS/eip-4337#first-time-account-creation\\n:::\\n\",\"document\":[{\"href\":\"/smart-contracts/light-account/getting-started#getting-started-with-light-account\",\"html\":\"\\n

It is easy to get started with Light Account! We will show you how to create and send user operations for both LightAccount and MultiOwnerLightAccount using @alchemy/aa-alchemy.

\\n\",\"id\":\"pages/smart-contracts/light-account/getting-started.mdx#getting-started-with-light-account\",\"isPage\":true,\"text\":\"\\nIt is easy to get started with Light Account! We will show you how to create and send user operations for both LightAccount and MultiOwnerLightAccount using @alchemy/aa-alchemy.\\n\",\"title\":\"Getting started with Light Account\",\"titles\":[]},{\"href\":\"/smart-contracts/light-account/getting-started#install-packages\",\"html\":\"\\n
npm i @account-kit/smart-contracts
yarn add@account-kit/smart-contracts
\\n\",\"id\":\"pages/smart-contracts/light-account/getting-started.mdx#install-packages\",\"isPage\":false,\"text\":\"\\nnpm i @account-kit/smart-contractsyarn add@account-kit/smart-contracts\\n\",\"title\":\"Install packages\",\"titles\":[\"Getting started with Light Account\",null]},{\"href\":\"/smart-contracts/light-account/getting-started#create-a-client-and-send-a-user-operation\",\"html\":\"\\n

The code snippets below demonstrate how to use LightAccount and MultiOwnerLightAccount with Account Kit. They create the account and send a UserOperation from it.

\\n
import { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "your-api-key",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
import { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst lightAccountClient = await createMultiOwnerLightAccountAlchemyClient({\\n  apiKey: "your-api-key",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/smart-contracts/light-account/getting-started.mdx#create-a-client-and-send-a-user-operation\",\"isPage\":false,\"text\":\"\\nThe code snippets below demonstrate how to use LightAccount and MultiOwnerLightAccount with Account Kit. They create the account and send a UserOperation from it.\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "your-api-key",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});import { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst lightAccountClient = await createMultiOwnerLightAccountAlchemyClient({\\n apiKey: "your-api-key",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\nAddress calculationFor LightAccount, the address of the smart account will be calculated as a combination of the version, the owner, and the salt. You will get the same smart account address each time you supply the same version and owner. Alternatively, you can supply salt if you want a different address for the same version and owner params (the default salt is 0n). For MultiOwnerLightAccount, the same pattern follows, except that it takes an array of owner addresses instead of a single owner address.If you want to use a signer to connect to an account whose address does not map to the contract-generated address, you can supply the accountAddress to connect with the account of interest. In that case, the signer address is not used for address calculation, but only used for signing the operation.Reference: https://eips.ethereum.org/EIPS/eip-4337#first-time-account-creation\",\"title\":\"Create a client and send a user operation\",\"titles\":[\"Getting started with Light Account\",null]}]}],[\"index.1d61759de33ae1972f05ca125b7d341f888724c939e8dfc59315835c15331db7\",{\"mdx\":\"---\\ntitle: Passkey Signup\\ndescription: Authenticate a new user using a passkey\\n---\\n\\n# Passkey Signup\\n\\nIt is possible to create wallets for users using just a passkey. This is useful for creating wallets for users if you don't want to go through the magic link flow.\\n\\n:::warning\\nIf you create a passkey without an email associated with the user, you risk your users losing access to their wallets if they lose their device.\\n:::\\n\\n## Authenticate a user with email and passkey\\n\\nIf you want to allow sign-up and login with a passkey, you can ask the user for an email to associate with their passkey. This way, they can log in with their email or passkey in the future. Under the hood, the email is also used to check if an account exists already so you can have a unified sign-up and login flow.\\n\\n:::danger\\nIt's important that you validate this email before creating an account for the user. This is to prevent users from losing access to their wallets if they lose their device.\\n:::\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n email: \\\"user@mail.com\\\",\\n});\\n```\\n\\n```ts twoslash [signer] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\\n## Authenticate a user\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n createNew: true,\\n username: \\\"SOME_USER_NAME_OR_PASSKEY_IDENTIFIER\\\",\\n});\\n```\\n\\n```ts twoslash [signer] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/signer/authentication/passkey-signup#passkey-signup\",\"html\":\"\\n

It is possible to create wallets for users using just a passkey. This is useful for creating wallets for users if you don't want to go through the magic link flow.

\\n\\n\",\"id\":\"pages/signer/authentication/passkey-signup.mdx#passkey-signup\",\"isPage\":true,\"text\":\"\\nIt is possible to create wallets for users using just a passkey. This is useful for creating wallets for users if you don't want to go through the magic link flow.\\nIf you create a passkey without an email associated with the user, you risk your users losing access to their wallets if they lose their device.\\n\",\"title\":\"Passkey Signup\",\"titles\":[]},{\"href\":\"/signer/authentication/passkey-signup#authenticate-a-user-with-email-and-passkey\",\"html\":\"\\n

If you want to allow sign-up and login with a passkey, you can ask the user for an email to associate with their passkey. This way, they can log in with their email or passkey in the future. Under the hood, the email is also used to check if an account exists already so you can have a unified sign-up and login flow.

\\n\\n
// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\nconst result = await signer.authenticate({\\n  type: "passkey",\\n  email: "user@mail.com",\\n});
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\\n\",\"id\":\"pages/signer/authentication/passkey-signup.mdx#authenticate-a-user-with-email-and-passkey\",\"isPage\":false,\"text\":\"\\nIf you want to allow sign-up and login with a passkey, you can ask the user for an email to associate with their passkey. This way, they can log in with their email or passkey in the future. Under the hood, the email is also used to check if an account exists already so you can have a unified sign-up and login flow.\\nIt's important that you validate this email before creating an account for the user. This is to prevent users from losing access to their wallets if they lose their device.\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\nconst result = await signer.authenticate({\\n type: "passkey",\\n email: "user@mail.com",\\n});import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n\",\"title\":\"Authenticate a user with email and passkey\",\"titles\":[\"Passkey Signup\"]},{\"href\":\"/signer/authentication/passkey-signup#authenticate-a-user\",\"html\":\"\\n
// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\nconst result = await signer.authenticate({\\n  type: "passkey",\\n  createNew: true,\\n  username: "SOME_USER_NAME_OR_PASSKEY_IDENTIFIER",\\n});
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\",\"id\":\"pages/signer/authentication/passkey-signup.mdx#authenticate-a-user\",\"isPage\":false,\"text\":\"\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\nconst result = await signer.authenticate({\\n type: "passkey",\\n createNew: true,\\n username: "SOME_USER_NAME_OR_PASSKEY_IDENTIFIER",\\n});import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\",\"title\":\"Authenticate a user\",\"titles\":[\"Passkey Signup\"]}]}],[\"index.5185016d796ca4e60678f50de9ca7fde4dcbb21495eaea8e1ec4fec6cacfadbd\",{\"mdx\":\"---\\ntitle: What is a Signer?\\ndescription: Learn about Signers in the context of smart accounts and the various shapes they take.\\n---\\n\\n# What is a Signer?\\n\\nA **Signer** is a service (e.g. Magic or Turnkey) or application (e.g. MetaMask) that manages the private key and signs operations. Most web3 users today use an [Externally Owned Account (EOA)](https://ethereum.org/en/developers/docs/accounts/#externally-owned-accounts-and-key-pairs) with a self-custodial Signer such as MetaMask to manage the private key.\\n\\nWith Account Kit, you will deploy a **smart account** for each user instead of an EOA wallet. This smart account stores the user’s assets (e.g. tokens or NFTs).\\n\\nThe signer connected to the `SmartAccountClient` is used to sign messages, data including user operations and transactions. The signatures for the user operation will be only valid and execute if the signer is the owner or one of the owners of the account.\\n\\nYou can choose any Signer service or application to manage the Owner private key for the user. Using services like Magic, Turnkey, or Web3auth, you can secure the user’s account with an email, social login, or passkeys. You can also use a self-custodial wallet like MetaMask as the Signer.\\n\\nThis doc provides a basic introduction to signers and the criteria you should consider when choosing which Signer to use with Account Kit in your application.\\n\\n## Role of a Signer\\n\\nThe Signer plays a crucial role in your app because it controls the user’s smart account. The Signer is responsible for:\\n\\n- Securely storing the user’s private key which controls the user’s assets\\n- Authenticating the user\\n- Protecting the user’s account from phishing attacks\\n- Signing user operations requested by the user, if and only if the user has authenticated\\n- Optionally offering account recovery methods\\n\\n## Supported Signers\\n\\nAccount Kit is compatible with any EIP-1193 provider. Many of the most popular signers can be configured in minutes through our integration signer guides.\\n\\nIf you want to use another Signer, you can integrate any other Signer by wrapping it in an [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) provider or using [`SmartAccountSigner`](/signer/custom-signer#implementing-smartaccountsigner) to adapt non-standard Signer.\\n\\n## Criteria to consider\\n\\nHere are some important criteria to consider when choosing a Signer.\\n\\n- **Custody model:** Who has access to the private key?\\n - Self-Custodial: the end user controls the private key and manually approves signature requests\\n - Non-Custodial: a third-party service manages the private key or a subset of the key shares, but cannot sign transactions without the user’s involvement\\n - Custodial: a third-party service manages the private key and can sign transactions without the user’s involvement\\n- **Security model**: Assess the security model of the provider. Where is the private key stored? (on a device? in the cloud? on what cloud provider?) Is the private key encrypted? What encryption algorithm is used? Who has access to the decryption keys? This is a non-exhaustive list and we recommend doing further research.\\n- **Authentication methods:** What authentication method delivers the right balance of security, self-sovereignty, and ease-of-use for your target users?\\n - Email + Password: sign up for a smart account with an email and password.\\n - Social logins: sign up for a smart account with Google, Facebook, or other social logins.\\n - Passkeys: sign up for a smart account secured by a passkey (e.g. fingerprint or Face ID) stored on-device.\\n - Self custodial Wallet: sign up for a smart account using a self-custodial wallet such as MetaMask or Ledger.\\n- **Availability:** If the Signer service provider goes down, will users be able to sign transactions?\\n- **Key export:** Does the Signer allow the end user to export their private key? Can the user initiate an export even if the service provider has gone down? This is an important factor to ensure the user retains control of their assets no matter what happens to the service provider.\\n- **Key recovery**: If the user forgets their password or loses their passkey, what recovery methods does the Signer provide? If the provider stores a backup copy of the private key or MPC key shares, where are those backups stored and who has access to them?\\n\\n## Types of Signers\\n\\n### Non-custodial wallets\\n\\nNon-custodial wallet providers store private keys such that they cannot access the private key without the user’s involvement. For example, the user must provide a password or passkey that only they know in order to decrypt the private key stored by the provider. Users benefit from heightened security, while remaining in control of their private keys at all times. This is similar to a safety deposit box vault: the provider secures the bank vault but only the user has access to the individual safety deposit boxes (e.g. wallets).\\n\\n**Example**: Turnkey, Magic\\n\\n### MPC wallets (non-custodial)\\n\\nMulti-Party Computation (MPC) Signers split the Owner Account private key into key shares that are then distributed to a number of share holders. Share holders only know the value of their key share and transaction holders can sign transactions without revealing their key shares to other holders.\\n\\nValid signatures do not always require all shares to sign a transaction. MPC Signers can set a threshold, requiring a certain number of shares for a signature to be valid. Common configurations are 2 of 2 shares or 2 of 3 shares. By requiring multiple shares, MPC models mitigate the risks associated with a single key being compromised.\\n\\nSome MPC signers provide recovery services in which key share(s) are backed up in the service provider’s cloud, on the end user’s device, or in the end user’s cloud (e.g. iCloud or Google Drive). When evaluating an MPC provider, it’s important to under where each key share is stored.\\n\\n**Example**: Privy, Fireblocks MPC, Portal, Capsule, WalletKit\\n\\n:::details[TSS vs SSSS]\\n\\nThere are two common approaches to MPC.\\n\\nTraditionally, MPC services leveraged SSSS (Shamir’s Secret Shard Sharing). This approach generates a private key in one location and then the shares are distributed to the parties involved. When a user wants to sign, they need to retrieve N of M shares and reconstruct the key locally.\\n\\nAn improvement on SSSS is Threshold Signature Scheme (TSS). In this model, the key is never recreated during signing. Instead, each party is given the message to sign and then signs the payload locally before broadcasting the signature to the rest of the group. This allows for the key material to remain private and deconstructed.\\n\\nTSS is safer than SSSS because is possible to create the initial shares without ever constructing the original key on any one device. However, the tradeoff is that signing requires a Peer-to-Peer exchange which introduces latency.\\n\\nYou can read more about the difference between TSS and SSSS [here](https://www.dynamic.xyz/blog/the-evolution-of-multi-signature-and-multi-party-computation).\\nYou can read more about the difference between TSS and SSSS [here](https://www.dynamic.xyz/blog/the-evolution-of-multi-signature-and-multi-party-computation).\\n:::\\n\\n### Decentralized MPC network (non-custodial)\\n\\nA decentralized MPC network is an extension on the MPC approach outlined above. Instead of relying on a single, centralized service to store a key share and initiate signature requests, an MPC network distributes this responsibility across many nodes in a network. The user’s private key is split into many key shares with each share store by a different node. The user may request signatures from the network and a valid signature will be produced if and only if a threshold number of nodes agree to sign the request.\\n\\nExamples: Lit Protocol, Web3Auth (Torus Network)\\n\\n### Self-custodial wallet\\n\\nSelf-custodial wallets store the private key locally where only the end user can access it. For example, the user may store their seed phrase in a browser extension, in a mobile app using their phone’s secure enclave, or in a hardware wallet. When using a self-custodial wallet, the user is the only one with the power to sign transactions.\\n\\nSelf-custodial wallets require the user to maintain good security hygiene at all times. They also rely on the user to backup a copy of their private key in the event the wallet is lost or destroyed. If the user loses access to the device on which their private key is stored, they will have no way to recover the account unless they backed up the private key in another device or location.\\n\\n**Example**: MetaMask, Ledger\\n\\n### Custodial wallet\\n\\nCustodial wallet providers have full control over the user’s private key and sign transactions on behalf of the user. These services typically implement security measures to ensure that only the authorized user(s) can request a signature. These providers are also typically regulated entities (e.g., qualified custodians). The user must trust this service provider to securely store the private key and sign transactions if and only if the user wishes.\\n\\n**Example**: Coinbase Custody, Bitgo\\n\\n---\\n\\n_Disclaimer: This page refers to third-party services, products software, technology, and content (collectively, “Third-Party Services”) that may be integrated or interact with Alchemy’s software and services. Alchemy is not responsible for any Third-Party Service, or for any compatibility issues, errors, or bugs caused in whole or in part by the Third-Party Service or any update or upgrade thereto. Your use of any Third-Party Service is at your own risk. You are responsible for obtaining any associated licenses and consents to the extent necessary for you to use the Third-Party Services. Your use of the Third-Party Services may be subject to separate terms and conditions set forth by the provider (including disclaimers or warnings), separate fees or charges, or a separate privacy notice. You are responsible for understanding and complying with any such terms or privacy notice._\\n\",\"document\":[{\"href\":\"/signer/what-is-a-signer#what-is-a-signer\",\"html\":\"\\n

A Signer is a service (e.g. Magic or Turnkey) or application (e.g. MetaMask) that manages the private key and signs operations. Most web3 users today use an Externally Owned Account (EOA) with a self-custodial Signer such as MetaMask to manage the private key.

\\n

With Account Kit, you will deploy a smart account for each user instead of an EOA wallet. This smart account stores the user’s assets (e.g. tokens or NFTs).

\\n

The signer connected to the SmartAccountClient is used to sign messages, data including user operations and transactions. The signatures for the user operation will be only valid and execute if the signer is the owner or one of the owners of the account.

\\n

You can choose any Signer service or application to manage the Owner private key for the user. Using services like Magic, Turnkey, or Web3auth, you can secure the user’s account with an email, social login, or passkeys. You can also use a self-custodial wallet like MetaMask as the Signer.

\\n

This doc provides a basic introduction to signers and the criteria you should consider when choosing which Signer to use with Account Kit in your application.

\\n\",\"id\":\"pages/signer/what-is-a-signer.mdx#what-is-a-signer\",\"isPage\":true,\"text\":\"\\nA Signer is a service (e.g. Magic or Turnkey) or application (e.g. MetaMask) that manages the private key and signs operations. Most web3 users today use an Externally Owned Account (EOA) with a self-custodial Signer such as MetaMask to manage the private key.\\nWith Account Kit, you will deploy a smart account for each user instead of an EOA wallet. This smart account stores the user’s assets (e.g. tokens or NFTs).\\nThe signer connected to the SmartAccountClient is used to sign messages, data including user operations and transactions. The signatures for the user operation will be only valid and execute if the signer is the owner or one of the owners of the account.\\nYou can choose any Signer service or application to manage the Owner private key for the user. Using services like Magic, Turnkey, or Web3auth, you can secure the user’s account with an email, social login, or passkeys. You can also use a self-custodial wallet like MetaMask as the Signer.\\nThis doc provides a basic introduction to signers and the criteria you should consider when choosing which Signer to use with Account Kit in your application.\\n\",\"title\":\"What is a Signer?\",\"titles\":[]},{\"href\":\"/signer/what-is-a-signer#role-of-a-signer\",\"html\":\"\\n

The Signer plays a crucial role in your app because it controls the user’s smart account. The Signer is responsible for:

\\n
    \\n
  • Securely storing the user’s private key which controls the user’s assets
  • \\n
  • Authenticating the user
  • \\n
  • Protecting the user’s account from phishing attacks
  • \\n
  • Signing user operations requested by the user, if and only if the user has authenticated
  • \\n
  • Optionally offering account recovery methods
  • \\n
\\n\",\"id\":\"pages/signer/what-is-a-signer.mdx#role-of-a-signer\",\"isPage\":false,\"text\":\"\\nThe Signer plays a crucial role in your app because it controls the user’s smart account. The Signer is responsible for:\\n\\nSecurely storing the user’s private key which controls the user’s assets\\nAuthenticating the user\\nProtecting the user’s account from phishing attacks\\nSigning user operations requested by the user, if and only if the user has authenticated\\nOptionally offering account recovery methods\\n\\n\",\"title\":\"Role of a Signer\",\"titles\":[\"What is a Signer?\"]},{\"href\":\"/signer/what-is-a-signer#supported-signers\",\"html\":\"\\n

Account Kit is compatible with any EIP-1193 provider. Many of the most popular signers can be configured in minutes through our integration signer guides.

\\n

If you want to use another Signer, you can integrate any other Signer by wrapping it in an EIP-1193 provider or using SmartAccountSigner to adapt non-standard Signer.

\\n\",\"id\":\"pages/signer/what-is-a-signer.mdx#supported-signers\",\"isPage\":false,\"text\":\"\\nAccount Kit is compatible with any EIP-1193 provider. Many of the most popular signers can be configured in minutes through our integration signer guides.\\nIf you want to use another Signer, you can integrate any other Signer by wrapping it in an EIP-1193 provider or using SmartAccountSigner to adapt non-standard Signer.\\n\",\"title\":\"Supported Signers\",\"titles\":[\"What is a Signer?\"]},{\"href\":\"/signer/what-is-a-signer#criteria-to-consider\",\"html\":\"\\n

Here are some important criteria to consider when choosing a Signer.

\\n
    \\n
  • Custody model: Who has access to the private key?\\n
      \\n
    • Self-Custodial: the end user controls the private key and manually approves signature requests
    • \\n
    • Non-Custodial: a third-party service manages the private key or a subset of the key shares, but cannot sign transactions without the user’s involvement
    • \\n
    • Custodial: a third-party service manages the private key and can sign transactions without the user’s involvement
    • \\n
    \\n
  • \\n
  • Security model: Assess the security model of the provider. Where is the private key stored? (on a device? in the cloud? on what cloud provider?) Is the private key encrypted? What encryption algorithm is used? Who has access to the decryption keys? This is a non-exhaustive list and we recommend doing further research.
  • \\n
  • Authentication methods: What authentication method delivers the right balance of security, self-sovereignty, and ease-of-use for your target users?\\n
      \\n
    • Email + Password: sign up for a smart account with an email and password.
    • \\n
    • Social logins: sign up for a smart account with Google, Facebook, or other social logins.
    • \\n
    • Passkeys: sign up for a smart account secured by a passkey (e.g. fingerprint or Face ID) stored on-device.
    • \\n
    • Self custodial Wallet: sign up for a smart account using a self-custodial wallet such as MetaMask or Ledger.
    • \\n
    \\n
  • \\n
  • Availability: If the Signer service provider goes down, will users be able to sign transactions?
  • \\n
  • Key export: Does the Signer allow the end user to export their private key? Can the user initiate an export even if the service provider has gone down? This is an important factor to ensure the user retains control of their assets no matter what happens to the service provider.
  • \\n
  • Key recovery: If the user forgets their password or loses their passkey, what recovery methods does the Signer provide? If the provider stores a backup copy of the private key or MPC key shares, where are those backups stored and who has access to them?
  • \\n
\\n\",\"id\":\"pages/signer/what-is-a-signer.mdx#criteria-to-consider\",\"isPage\":false,\"text\":\"\\nHere are some important criteria to consider when choosing a Signer.\\n\\nCustody model: Who has access to the private key?\\n\\nSelf-Custodial: the end user controls the private key and manually approves signature requests\\nNon-Custodial: a third-party service manages the private key or a subset of the key shares, but cannot sign transactions without the user’s involvement\\nCustodial: a third-party service manages the private key and can sign transactions without the user’s involvement\\n\\n\\nSecurity model: Assess the security model of the provider. Where is the private key stored? (on a device? in the cloud? on what cloud provider?) Is the private key encrypted? What encryption algorithm is used? Who has access to the decryption keys? This is a non-exhaustive list and we recommend doing further research.\\nAuthentication methods: What authentication method delivers the right balance of security, self-sovereignty, and ease-of-use for your target users?\\n\\nEmail + Password: sign up for a smart account with an email and password.\\nSocial logins: sign up for a smart account with Google, Facebook, or other social logins.\\nPasskeys: sign up for a smart account secured by a passkey (e.g. fingerprint or Face ID) stored on-device.\\nSelf custodial Wallet: sign up for a smart account using a self-custodial wallet such as MetaMask or Ledger.\\n\\n\\nAvailability: If the Signer service provider goes down, will users be able to sign transactions?\\nKey export: Does the Signer allow the end user to export their private key? Can the user initiate an export even if the service provider has gone down? This is an important factor to ensure the user retains control of their assets no matter what happens to the service provider.\\nKey recovery: If the user forgets their password or loses their passkey, what recovery methods does the Signer provide? If the provider stores a backup copy of the private key or MPC key shares, where are those backups stored and who has access to them?\\n\\n\",\"title\":\"Criteria to consider\",\"titles\":[\"What is a Signer?\"]},{\"href\":\"/signer/what-is-a-signer#types-of-signers\",\"html\":\"\\n\",\"id\":\"pages/signer/what-is-a-signer.mdx#types-of-signers\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Types of Signers\",\"titles\":[\"What is a Signer?\"]},{\"href\":\"/signer/what-is-a-signer#non-custodial-wallets\",\"html\":\"\\n

Non-custodial wallet providers store private keys such that they cannot access the private key without the user’s involvement. For example, the user must provide a password or passkey that only they know in order to decrypt the private key stored by the provider. Users benefit from heightened security, while remaining in control of their private keys at all times. This is similar to a safety deposit box vault: the provider secures the bank vault but only the user has access to the individual safety deposit boxes (e.g. wallets).

\\n

Example: Turnkey, Magic

\\n\",\"id\":\"pages/signer/what-is-a-signer.mdx#non-custodial-wallets\",\"isPage\":false,\"text\":\"\\nNon-custodial wallet providers store private keys such that they cannot access the private key without the user’s involvement. For example, the user must provide a password or passkey that only they know in order to decrypt the private key stored by the provider. Users benefit from heightened security, while remaining in control of their private keys at all times. This is similar to a safety deposit box vault: the provider secures the bank vault but only the user has access to the individual safety deposit boxes (e.g. wallets).\\nExample: Turnkey, Magic\\n\",\"title\":\"Non-custodial wallets\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]},{\"href\":\"/signer/what-is-a-signer#mpc-wallets-non-custodial\",\"html\":\"\\n

Multi-Party Computation (MPC) Signers split the Owner Account private key into key shares that are then distributed to a number of share holders. Share holders only know the value of their key share and transaction holders can sign transactions without revealing their key shares to other holders.

\\n

Valid signatures do not always require all shares to sign a transaction. MPC Signers can set a threshold, requiring a certain number of shares for a signature to be valid. Common configurations are 2 of 2 shares or 2 of 3 shares. By requiring multiple shares, MPC models mitigate the risks associated with a single key being compromised.

\\n

Some MPC signers provide recovery services in which key share(s) are backed up in the service provider’s cloud, on the end user’s device, or in the end user’s cloud (e.g. iCloud or Google Drive). When evaluating an MPC provider, it’s important to under where each key share is stored.

\\n

Example: Privy, Fireblocks MPC, Portal, Capsule, WalletKit

\\n
TSS vs SSSS

There are two common approaches to MPC.

Traditionally, MPC services leveraged SSSS (Shamir’s Secret Shard Sharing). This approach generates a private key in one location and then the shares are distributed to the parties involved. When a user wants to sign, they need to retrieve N of M shares and reconstruct the key locally.

An improvement on SSSS is Threshold Signature Scheme (TSS). In this model, the key is never recreated during signing. Instead, each party is given the message to sign and then signs the payload locally before broadcasting the signature to the rest of the group. This allows for the key material to remain private and deconstructed.

TSS is safer than SSSS because is possible to create the initial shares without ever constructing the original key on any one device. However, the tradeoff is that signing requires a Peer-to-Peer exchange which introduces latency.

You can read more about the difference between TSS and SSSS here.\\nYou can read more about the difference between TSS and SSSS here.

\\n\",\"id\":\"pages/signer/what-is-a-signer.mdx#mpc-wallets-non-custodial\",\"isPage\":false,\"text\":\"\\nMulti-Party Computation (MPC) Signers split the Owner Account private key into key shares that are then distributed to a number of share holders. Share holders only know the value of their key share and transaction holders can sign transactions without revealing their key shares to other holders.\\nValid signatures do not always require all shares to sign a transaction. MPC Signers can set a threshold, requiring a certain number of shares for a signature to be valid. Common configurations are 2 of 2 shares or 2 of 3 shares. By requiring multiple shares, MPC models mitigate the risks associated with a single key being compromised.\\nSome MPC signers provide recovery services in which key share(s) are backed up in the service provider’s cloud, on the end user’s device, or in the end user’s cloud (e.g. iCloud or Google Drive). When evaluating an MPC provider, it’s important to under where each key share is stored.\\nExample: Privy, Fireblocks MPC, Portal, Capsule, WalletKit\\nTSS vs SSSSThere are two common approaches to MPC.Traditionally, MPC services leveraged SSSS (Shamir’s Secret Shard Sharing). This approach generates a private key in one location and then the shares are distributed to the parties involved. When a user wants to sign, they need to retrieve N of M shares and reconstruct the key locally.An improvement on SSSS is Threshold Signature Scheme (TSS). In this model, the key is never recreated during signing. Instead, each party is given the message to sign and then signs the payload locally before broadcasting the signature to the rest of the group. This allows for the key material to remain private and deconstructed.TSS is safer than SSSS because is possible to create the initial shares without ever constructing the original key on any one device. However, the tradeoff is that signing requires a Peer-to-Peer exchange which introduces latency.You can read more about the difference between TSS and SSSS here.\\nYou can read more about the difference between TSS and SSSS here.\\n\",\"title\":\"MPC wallets (non-custodial)\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]},{\"href\":\"/signer/what-is-a-signer#decentralized-mpc-network-non-custodial\",\"html\":\"\\n

A decentralized MPC network is an extension on the MPC approach outlined above. Instead of relying on a single, centralized service to store a key share and initiate signature requests, an MPC network distributes this responsibility across many nodes in a network. The user’s private key is split into many key shares with each share store by a different node. The user may request signatures from the network and a valid signature will be produced if and only if a threshold number of nodes agree to sign the request.

\\n

Examples: Lit Protocol, Web3Auth (Torus Network)

\\n\",\"id\":\"pages/signer/what-is-a-signer.mdx#decentralized-mpc-network-non-custodial\",\"isPage\":false,\"text\":\"\\nA decentralized MPC network is an extension on the MPC approach outlined above. Instead of relying on a single, centralized service to store a key share and initiate signature requests, an MPC network distributes this responsibility across many nodes in a network. The user’s private key is split into many key shares with each share store by a different node. The user may request signatures from the network and a valid signature will be produced if and only if a threshold number of nodes agree to sign the request.\\nExamples: Lit Protocol, Web3Auth (Torus Network)\\n\",\"title\":\"Decentralized MPC network (non-custodial)\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]},{\"href\":\"/signer/what-is-a-signer#self-custodial-wallet\",\"html\":\"\\n

Self-custodial wallets store the private key locally where only the end user can access it. For example, the user may store their seed phrase in a browser extension, in a mobile app using their phone’s secure enclave, or in a hardware wallet. When using a self-custodial wallet, the user is the only one with the power to sign transactions.

\\n

Self-custodial wallets require the user to maintain good security hygiene at all times. They also rely on the user to backup a copy of their private key in the event the wallet is lost or destroyed. If the user loses access to the device on which their private key is stored, they will have no way to recover the account unless they backed up the private key in another device or location.

\\n

Example: MetaMask, Ledger

\\n\",\"id\":\"pages/signer/what-is-a-signer.mdx#self-custodial-wallet\",\"isPage\":false,\"text\":\"\\nSelf-custodial wallets store the private key locally where only the end user can access it. For example, the user may store their seed phrase in a browser extension, in a mobile app using their phone’s secure enclave, or in a hardware wallet. When using a self-custodial wallet, the user is the only one with the power to sign transactions.\\nSelf-custodial wallets require the user to maintain good security hygiene at all times. They also rely on the user to backup a copy of their private key in the event the wallet is lost or destroyed. If the user loses access to the device on which their private key is stored, they will have no way to recover the account unless they backed up the private key in another device or location.\\nExample: MetaMask, Ledger\\n\",\"title\":\"Self-custodial wallet\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]},{\"href\":\"/signer/what-is-a-signer#custodial-wallet\",\"html\":\"\\n

Custodial wallet providers have full control over the user’s private key and sign transactions on behalf of the user. These services typically implement security measures to ensure that only the authorized user(s) can request a signature. These providers are also typically regulated entities (e.g., qualified custodians). The user must trust this service provider to securely store the private key and sign transactions if and only if the user wishes.

\\n

Example: Coinbase Custody, Bitgo

\\n
\\n

Disclaimer: This page refers to third-party services, products software, technology, and content (collectively, “Third-Party Services”) that may be integrated or interact with Alchemy’s software and services. Alchemy is not responsible for any Third-Party Service, or for any compatibility issues, errors, or bugs caused in whole or in part by the Third-Party Service or any update or upgrade thereto. Your use of any Third-Party Service is at your own risk. You are responsible for obtaining any associated licenses and consents to the extent necessary for you to use the Third-Party Services. Your use of the Third-Party Services may be subject to separate terms and conditions set forth by the provider (including disclaimers or warnings), separate fees or charges, or a separate privacy notice. You are responsible for understanding and complying with any such terms or privacy notice.

\",\"id\":\"pages/signer/what-is-a-signer.mdx#custodial-wallet\",\"isPage\":false,\"text\":\"\\nCustodial wallet providers have full control over the user’s private key and sign transactions on behalf of the user. These services typically implement security measures to ensure that only the authorized user(s) can request a signature. These providers are also typically regulated entities (e.g., qualified custodians). The user must trust this service provider to securely store the private key and sign transactions if and only if the user wishes.\\nExample: Coinbase Custody, Bitgo\\n\\nDisclaimer: This page refers to third-party services, products software, technology, and content (collectively, “Third-Party Services”) that may be integrated or interact with Alchemy’s software and services. Alchemy is not responsible for any Third-Party Service, or for any compatibility issues, errors, or bugs caused in whole or in part by the Third-Party Service or any update or upgrade thereto. Your use of any Third-Party Service is at your own risk. You are responsible for obtaining any associated licenses and consents to the extent necessary for you to use the Third-Party Services. Your use of the Third-Party Services may be subject to separate terms and conditions set forth by the provider (including disclaimers or warnings), separate fees or charges, or a separate privacy notice. You are responsible for understanding and complying with any such terms or privacy notice.\",\"title\":\"Custodial wallet\",\"titles\":[\"What is a Signer?\",\"Types of Signers\"]}]}],[\"index.18d25d21beda261f0017b6dbd2c0079ed8d1b34a364603c29e6dacff65179014\",{\"mdx\":\"---\\ntitle: Modular Account • Deployments\\ndescription: Deployment addresses\\n---\\n\\n# Deployments\\n\\nThe following tables list the deployed factory and account implementation contract addresses for `ModularAccount` and some compatible plugins on different chains. Deployments for prior versions can be found in the [modular-account](https://github.com/alchemyplatform/modular-account/tree/develop/deployments) repo.\\n\\n## Account\\n\\n| Chain | Factory Address | Account Implementation |\\n| ---------------- | -------------------------------------------- | -------------------------------------------- |\\n| Eth Mainnet | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Eth Sepolia | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Polygon Mainnet | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Polygon Mumbai | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Polygon Amoy | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Optimism | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Optimism Sepolia | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Arbitrum | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Arbitrum Sepolia | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Base | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Base Sepolia | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Zora Mainnet | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Zora Sepolia | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Fraxtal Mainnet | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n| Fraxtal Sepolia | `0x000000e92D78D90000007F0082006FDA09BD5f11` | `0x0046000000000151008789797b54fdb500E2a61e` |\\n\\n## MultiOwnerPlugin\\n\\n| Chain | Plugin Address |\\n| ---------------- | -------------------------------------------- |\\n| Eth Mainnet | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Eth Sepolia | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Polygon Mainnet | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Polygon Mumbai | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Polygon Amoy | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Optimism | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Optimism Sepolia | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Arbitrum | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Arbitrum Sepolia | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Base | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Base Sepolia | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Zora Mainnet | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Zora Sepolia | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Fraxtal Mainnet | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n| Fraxtal Sepolia | `0xcE0000007B008F50d762D155002600004cD6c647` |\\n\\n## SessionKeyPlugin\\n\\n| Chain | Plugin Address |\\n| ---------------- | -------------------------------------------- |\\n| Eth Mainnet | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Eth Sepolia | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Polygon Mainnet | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Polygon Mumbai | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Polygon Amoy | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Optimism | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Optimism Sepolia | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Arbitrum | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Arbitrum Sepolia | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Base | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Base Sepolia | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Zora Mainnet | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Zora Sepolia | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Fraxtal Mainnet | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n| Fraxtal Sepolia | `0x0000003E0000a96de4058e1E02a62FaaeCf23d8d` |\\n\",\"document\":[{\"href\":\"/smart-contracts/modular-account/deployments#deployments\",\"html\":\"\\n

The following tables list the deployed factory and account implementation contract addresses for ModularAccount and some compatible plugins on different chains. Deployments for prior versions can be found in the modular-account repo.

\\n\",\"id\":\"pages/smart-contracts/modular-account/deployments.mdx#deployments\",\"isPage\":true,\"text\":\"\\nThe following tables list the deployed factory and account implementation contract addresses for ModularAccount and some compatible plugins on different chains. Deployments for prior versions can be found in the modular-account repo.\\n\",\"title\":\"Deployments\",\"titles\":[]},{\"href\":\"/smart-contracts/modular-account/deployments#account\",\"html\":\"\\n
ChainFactory AddressAccount Implementation
Eth Mainnet0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Eth Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Polygon Mainnet0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Polygon Mumbai0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Polygon Amoy0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Optimism0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Optimism Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Arbitrum0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Arbitrum Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Base0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Base Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Zora Mainnet0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Zora Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Fraxtal Mainnet0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
Fraxtal Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e
\\n\",\"id\":\"pages/smart-contracts/modular-account/deployments.mdx#account\",\"isPage\":false,\"text\":\"\\nChainFactory AddressAccount ImplementationEth Mainnet0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eEth Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61ePolygon Mainnet0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61ePolygon Mumbai0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61ePolygon Amoy0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eOptimism0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eOptimism Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eArbitrum0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eArbitrum Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eBase0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eBase Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eZora Mainnet0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eZora Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eFraxtal Mainnet0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61eFraxtal Sepolia0x000000e92D78D90000007F0082006FDA09BD5f110x0046000000000151008789797b54fdb500E2a61e\\n\",\"title\":\"Account\",\"titles\":[\"Deployments\"]},{\"href\":\"/smart-contracts/modular-account/deployments#multiownerplugin\",\"html\":\"\\n
ChainPlugin Address
Eth Mainnet0xcE0000007B008F50d762D155002600004cD6c647
Eth Sepolia0xcE0000007B008F50d762D155002600004cD6c647
Polygon Mainnet0xcE0000007B008F50d762D155002600004cD6c647
Polygon Mumbai0xcE0000007B008F50d762D155002600004cD6c647
Polygon Amoy0xcE0000007B008F50d762D155002600004cD6c647
Optimism0xcE0000007B008F50d762D155002600004cD6c647
Optimism Sepolia0xcE0000007B008F50d762D155002600004cD6c647
Arbitrum0xcE0000007B008F50d762D155002600004cD6c647
Arbitrum Sepolia0xcE0000007B008F50d762D155002600004cD6c647
Base0xcE0000007B008F50d762D155002600004cD6c647
Base Sepolia0xcE0000007B008F50d762D155002600004cD6c647
Zora Mainnet0xcE0000007B008F50d762D155002600004cD6c647
Zora Sepolia0xcE0000007B008F50d762D155002600004cD6c647
Fraxtal Mainnet0xcE0000007B008F50d762D155002600004cD6c647
Fraxtal Sepolia0xcE0000007B008F50d762D155002600004cD6c647
\\n\",\"id\":\"pages/smart-contracts/modular-account/deployments.mdx#multiownerplugin\",\"isPage\":false,\"text\":\"\\nChainPlugin AddressEth Mainnet0xcE0000007B008F50d762D155002600004cD6c647Eth Sepolia0xcE0000007B008F50d762D155002600004cD6c647Polygon Mainnet0xcE0000007B008F50d762D155002600004cD6c647Polygon Mumbai0xcE0000007B008F50d762D155002600004cD6c647Polygon Amoy0xcE0000007B008F50d762D155002600004cD6c647Optimism0xcE0000007B008F50d762D155002600004cD6c647Optimism Sepolia0xcE0000007B008F50d762D155002600004cD6c647Arbitrum0xcE0000007B008F50d762D155002600004cD6c647Arbitrum Sepolia0xcE0000007B008F50d762D155002600004cD6c647Base0xcE0000007B008F50d762D155002600004cD6c647Base Sepolia0xcE0000007B008F50d762D155002600004cD6c647Zora Mainnet0xcE0000007B008F50d762D155002600004cD6c647Zora Sepolia0xcE0000007B008F50d762D155002600004cD6c647Fraxtal Mainnet0xcE0000007B008F50d762D155002600004cD6c647Fraxtal Sepolia0xcE0000007B008F50d762D155002600004cD6c647\\n\",\"title\":\"MultiOwnerPlugin\",\"titles\":[\"Deployments\"]},{\"href\":\"/smart-contracts/modular-account/deployments#sessionkeyplugin\",\"html\":\"\\n
ChainPlugin Address
Eth Mainnet0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Eth Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Polygon Mainnet0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Polygon Mumbai0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Polygon Amoy0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Optimism0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Optimism Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Arbitrum0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Arbitrum Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Base0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Base Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Zora Mainnet0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Zora Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Fraxtal Mainnet0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
Fraxtal Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8d
\",\"id\":\"pages/smart-contracts/modular-account/deployments.mdx#sessionkeyplugin\",\"isPage\":false,\"text\":\"\\nChainPlugin AddressEth Mainnet0x0000003E0000a96de4058e1E02a62FaaeCf23d8dEth Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8dPolygon Mainnet0x0000003E0000a96de4058e1E02a62FaaeCf23d8dPolygon Mumbai0x0000003E0000a96de4058e1E02a62FaaeCf23d8dPolygon Amoy0x0000003E0000a96de4058e1E02a62FaaeCf23d8dOptimism0x0000003E0000a96de4058e1E02a62FaaeCf23d8dOptimism Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8dArbitrum0x0000003E0000a96de4058e1E02a62FaaeCf23d8dArbitrum Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8dBase0x0000003E0000a96de4058e1E02a62FaaeCf23d8dBase Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8dZora Mainnet0x0000003E0000a96de4058e1E02a62FaaeCf23d8dZora Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8dFraxtal Mainnet0x0000003E0000a96de4058e1E02a62FaaeCf23d8dFraxtal Sepolia0x0000003E0000a96de4058e1E02a62FaaeCf23d8d\",\"title\":\"SessionKeyPlugin\",\"titles\":[\"Deployments\"]}]}],[\"index.4ff43294ff99b46ca6f282d7cb3fe643e33e339b5d73f0b1d8867c48b866d107\",{\"mdx\":\"---\\ntitle: Extending Smart Accounts • Get installed plugins of a Modular Account\\ndescription: Follow this guide to get installed plugins of a Modular Account\\n with Account Kit, a vertically integrated stack for building apps that support\\n ERC-4337 and ERC-6900.\\n---\\n\\n# How to get the installed plugins of a Modular Account\\n\\n[ERC-6900](https://eips.ethereum.org/EIPS/eip-6900) Modular Accounts implements Plugin inspection interface [`IAccountLoupe.sol`](https://eips.ethereum.org/EIPS/eip-6900#iaccountloupesol) to support visibility in plugin configuration on-chain. This contract interface defines the method `getInstalledPlugins()` that clients can use to fetch the currently installed plugins on a Modular Account.\\n\\n```solidity\\n/// @notice Get an array of all installed plugins.\\n/// @return The addresses of all installed plugins.\\nfunction getInstalledPlugins() external view returns (address[] memory);\\n```\\n\\nAccount Kit provides a streamlined experience of interacting with Modular Account AccoutLoupe interface easily by providing `accountLoupeActions` defined in `@account-kit/smart-contracts` package. When you connect your Modular Account to `SmartAccountClient` you can extend the client with `accountLoupeActions`, which exposes a set of methods available to call the account `AccountLoupe` with the client connected to the account.\\n\\n## Get installed plugins of a Modular Account\\n\\nYou should first extend the `SmartAcountClient` connected to a Modular Account, which has `AccountLoupe` implemented, with `accountLoupeActions` for the client to include the `AccountLoupe` actions.\\n\\nThen, you can use the `getInstalledPlugins` method of the `accountLoupeActions` extended smart account client to get the list of installed plugin addresses for the connected Modular Account.\\n\\n:::tip[Note]\\nWhen using `createModularAccountAlchemyClient` in `@account-kit/smart-contracts`, the `SmartAccountClient` comes automatically extended with `multiOwnerPluginActions`, `pluginManagerActions`, and `accountLoupeActions` decorators as defaults available for use.\\n:::\\n\\n:::code-group\\n\\n```ts [example.ts] twoslash\\nimport { modularAccountClient } from \\\"./client\\\";\\nimport { IPluginAbi } from \\\"@account-kit/smart-contracts\\\";\\n\\n// returns addresses of all installed plugins\\nconst installedPlugins = await modularAccountClient.getInstalledPlugins({});\\n\\nif (installedPlugins.length === 0) {\\n console.log(\\\"account has no plugins installed.\\\");\\n return;\\n}\\n\\nconst pluginAddress = installedPlugins[0];\\n// read plugin metadata of a plugin\\nconst metadata = await modularAccountClient.readContract({\\n address: pluginAddress,\\n abi: IPluginAbi,\\n functionName: \\\"pluginMetadata\\\",\\n});\\n\\nconsole.log(JSON.stringify(metadata, null, 2));\\n// {\\n// name: 'MultiOwnerPlugin',\\n// version: '1.0.0',\\n// }\\n```\\n\\n```ts [client.ts] twoslash filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/modular-account-client.ts]\\n```\\n\\n:::\\n\\nBy checking if a certain plugin address exists in the list of installed plugin addresses of a Modular Account, you can check whether a particular plugin is installed or not on a Modular Account.\\n\",\"document\":[{\"href\":\"/smart-contracts/get-installed-plugins#how-to-get-the-installed-plugins-of-a-modular-account\",\"html\":\"\\n

ERC-6900 Modular Accounts implements Plugin inspection interface IAccountLoupe.sol to support visibility in plugin configuration on-chain. This contract interface defines the method getInstalledPlugins() that clients can use to fetch the currently installed plugins on a Modular Account.

\\n
/// @notice Get an array of all installed plugins.\\n/// @return The addresses of all installed plugins.\\nfunction getInstalledPlugins() external view returns (address[] memory);
\\n

Account Kit provides a streamlined experience of interacting with Modular Account AccoutLoupe interface easily by providing accountLoupeActions defined in @account-kit/smart-contracts package. When you connect your Modular Account to SmartAccountClient you can extend the client with accountLoupeActions, which exposes a set of methods available to call the account AccountLoupe with the client connected to the account.

\\n\",\"id\":\"pages/smart-contracts/get-installed-plugins.mdx#how-to-get-the-installed-plugins-of-a-modular-account\",\"isPage\":true,\"text\":\"\\nERC-6900 Modular Accounts implements Plugin inspection interface IAccountLoupe.sol to support visibility in plugin configuration on-chain. This contract interface defines the method getInstalledPlugins() that clients can use to fetch the currently installed plugins on a Modular Account.\\n/// @notice Get an array of all installed plugins.\\n/// @return The addresses of all installed plugins.\\nfunction getInstalledPlugins() external view returns (address[] memory);\\nAccount Kit provides a streamlined experience of interacting with Modular Account AccoutLoupe interface easily by providing accountLoupeActions defined in @account-kit/smart-contracts package. When you connect your Modular Account to SmartAccountClient you can extend the client with accountLoupeActions, which exposes a set of methods available to call the account AccountLoupe with the client connected to the account.\\n\",\"title\":\"How to get the installed plugins of a Modular Account\",\"titles\":[]},{\"href\":\"/smart-contracts/get-installed-plugins#get-installed-plugins-of-a-modular-account\",\"html\":\"\\n

You should first extend the SmartAcountClient connected to a Modular Account, which has AccountLoupe implemented, with accountLoupeActions for the client to include the AccountLoupe actions.

\\n

Then, you can use the getInstalledPlugins method of the accountLoupeActions extended smart account client to get the list of installed plugin addresses for the connected Modular Account.

\\n\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport { IPluginAbi } from "@account-kit/smart-contracts";\\n \\n// returns addresses of all installed plugins\\nconst installedPlugins = await modularAccountClient.getInstalledPlugins({});\\n \\nif (installedPlugins.length === 0) {\\n  console.log("account has no plugins installed.");\\n  return;\\n}\\n \\nconst pluginAddress = installedPlugins[0];\\n// read plugin metadata of a plugin\\nconst metadata = await modularAccountClient.readContract({\\n  address: pluginAddress,\\n  abi: IPluginAbi,\\n  functionName: "pluginMetadata",\\n});\\n \\nconsole.log(JSON.stringify(metadata, null, 2));\\n// {\\n//   name: 'MultiOwnerPlugin',\\n//   version: '1.0.0',\\n// }
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  chain,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n

By checking if a certain plugin address exists in the list of installed plugin addresses of a Modular Account, you can check whether a particular plugin is installed or not on a Modular Account.

\",\"id\":\"pages/smart-contracts/get-installed-plugins.mdx#get-installed-plugins-of-a-modular-account\",\"isPage\":false,\"text\":\"\\nYou should first extend the SmartAcountClient connected to a Modular Account, which has AccountLoupe implemented, with accountLoupeActions for the client to include the AccountLoupe actions.\\nThen, you can use the getInstalledPlugins method of the accountLoupeActions extended smart account client to get the list of installed plugin addresses for the connected Modular Account.\\nNoteWhen using createModularAccountAlchemyClient in @account-kit/smart-contracts, the SmartAccountClient comes automatically extended with multiOwnerPluginActions, pluginManagerActions, and accountLoupeActions decorators as defaults available for use.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { modularAccountClient } from "./client";\\nimport { IPluginAbi } from "@account-kit/smart-contracts";\\n \\n// returns addresses of all installed plugins\\nconst installedPlugins = await modularAccountClient.getInstalledPlugins({});\\n \\nif (installedPlugins.length === 0) {\\n console.log("account has no plugins installed.");\\n return;\\n}\\n \\nconst pluginAddress = installedPlugins[0];\\n// read plugin metadata of a plugin\\nconst metadata = await modularAccountClient.readContract({\\n address: pluginAddress,\\n abi: IPluginAbi,\\n functionName: "pluginMetadata",\\n});\\n \\nconsole.log(JSON.stringify(metadata, null, 2));\\n// {\\n// name: 'MultiOwnerPlugin',\\n// version: '1.0.0',\\n// }import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nexport const chain = sepolia;\\n \\nexport const modularAccountClient = await createModularAccountAlchemyClient({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain,\\n apiKey: "YOUR_API_KEY",\\n});\\nBy checking if a certain plugin address exists in the list of installed plugin addresses of a Modular Account, you can check whether a particular plugin is installed or not on a Modular Account.\",\"title\":\"Get installed plugins of a Modular Account\",\"titles\":[\"How to get the installed plugins of a Modular Account\"]}]}],[\"index.03f9ad9a09e3f3c345aa0107c4bedd24d1490d959193725c297deaa68ad28487\",{\"mdx\":\"---\\ntitle: Email Magic Link Authentication\\ndescription: Authenticate a user using an email magic link\\n---\\n\\n# Email Magic Link Authentication\\n\\nEmail magic link authentication allows you to login and signup users using an email address. Your users will receive a link in their inbox which will redirect them to your site (configured in the dashboard) to complete login.\\n\\n:::tip\\nFor setting up an account config, see the [Signer Quickstart](/signer/quickstart).\\n:::\\n\\n## Authenticate a user\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { signer } from \\\"./signer\\\";\\n\\n// send the email\\nawait signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"user@mail.com\\\",\\n});\\n\\n// later once the user has clicked the link\\nconst url = new URL(window.location.href);\\nconst bundle = url.searchParams.get(\\\"bundle\\\");\\nif (!bundle) {\\n throw new Error(\\\"No bundle found in URL\\\");\\n}\\n\\nawait signer.authenticate({\\n type: \\\"email\\\",\\n bundle,\\n});\\n```\\n\\n```ts twoslash [signer] filename=\\\"signer.ts\\\"\\n// [!include ~/shared/signer/signer.ts]\\n```\\n\\n:::\\n\",\"document\":[{\"href\":\"/signer/authentication/email-magic-link#email-magic-link-authentication\",\"html\":\"\\n

Email magic link authentication allows you to login and signup users using an email address. Your users will receive a link in their inbox which will redirect them to your site (configured in the dashboard) to complete login.

\\n\\n\",\"id\":\"pages/signer/authentication/email-magic-link.mdx#email-magic-link-authentication\",\"isPage\":true,\"text\":\"\\nEmail magic link authentication allows you to login and signup users using an email address. Your users will receive a link in their inbox which will redirect them to your site (configured in the dashboard) to complete login.\\nFor setting up an account config, see the Signer Quickstart.\\n\",\"title\":\"Email Magic Link Authentication\",\"titles\":[]},{\"href\":\"/signer/authentication/email-magic-link#authenticate-a-user\",\"html\":\"\\n
// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\n// send the email\\nawait signer.authenticate({\\n  type: "email",\\n  email: "user@mail.com",\\n});\\n \\n// later once the user has clicked the link\\nconst url = new URL(window.location.href);\\nconst bundle = url.searchParams.get("bundle");\\nif (!bundle) {\\n  throw new Error("No bundle found in URL");\\n}\\n \\nawait signer.authenticate({\\n  type: "email",\\n  bundle,\\n});
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      apiKey: "API_KEY",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\",\"id\":\"pages/signer/authentication/email-magic-link.mdx#authenticate-a-user\",\"isPage\":false,\"text\":\"\\n// @filename: signer.ts\\n \\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { signer } from "./signer";\\n \\n// send the email\\nawait signer.authenticate({\\n type: "email",\\n email: "user@mail.com",\\n});\\n \\n// later once the user has clicked the link\\nconst url = new URL(window.location.href);\\nconst bundle = url.searchParams.get("bundle");\\nif (!bundle) {\\n throw new Error("No bundle found in URL");\\n}\\n \\nawait signer.authenticate({\\n type: "email",\\n bundle,\\n});import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: "API_KEY",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\",\"title\":\"Authenticate a user\",\"titles\":[\"Email Magic Link Authentication\"]}]}],[\"index.93c9ce14b307fe8ab0dbad50a18a7468648e32fa97b3d1d177bde258895f4388\",{\"mdx\":\"---\\ntitle: Signer overview\\ndescription: Overview of the Alchemy Signer\\n---\\n\\n# Signer overview\\n\\nThe Alchemy Signer is a `SmartAccountSigner` that is powered by Alchemy's Signer Infrastructure. Using the Alchemy Signer, you can get started building embedded accounts with just an Alchemy API key!\\n\\nWhen using Account Kit with React via `@account-kit/react` or `@account-kit/core`, the assumption is that you're using the Alchemy Signer with our smart contract implementations and our Bundler and Gas Manager infrastructure.\\nHowever, you can also use the Alchemy Signer as a standalone signer with your own smart contracts or 3rd party infrastructure. In these guides, you'll learn more about how to choose a signer and how to use our signer directly via\\nthe `@account-kit/signer` package to log users in with email auth, and create a embedded account with our signer to enable email, passkeys (i.e. biometrics), and soon social auth flows!\\n\\n:::tip\\nThe Alchemy Signer requires the use of an `iframe`, so must be used in the context of an application. You'll need to build your own custom frontend.\\n\\nSee an example of a full Alchemy Embedded Account [here](https://github.com/alchemyplatform/embedded-accounts-demo.git)!\\n:::\\n\",\"document\":[{\"href\":\"/signer/overview#signer-overview\",\"html\":\"\\n

The Alchemy Signer is a SmartAccountSigner that is powered by Alchemy's Signer Infrastructure. Using the Alchemy Signer, you can get started building embedded accounts with just an Alchemy API key!

\\n

When using Account Kit with React via @account-kit/react or @account-kit/core, the assumption is that you're using the Alchemy Signer with our smart contract implementations and our Bundler and Gas Manager infrastructure.\\nHowever, you can also use the Alchemy Signer as a standalone signer with your own smart contracts or 3rd party infrastructure. In these guides, you'll learn more about how to choose a signer and how to use our signer directly via\\nthe @account-kit/signer package to log users in with email auth, and create a embedded account with our signer to enable email, passkeys (i.e. biometrics), and soon social auth flows!

\\n\",\"id\":\"pages/signer/overview.mdx#signer-overview\",\"isPage\":true,\"text\":\"\\nThe Alchemy Signer is a SmartAccountSigner that is powered by Alchemy's Signer Infrastructure. Using the Alchemy Signer, you can get started building embedded accounts with just an Alchemy API key!\\nWhen using Account Kit with React via @account-kit/react or @account-kit/core, the assumption is that you're using the Alchemy Signer with our smart contract implementations and our Bundler and Gas Manager infrastructure.\\nHowever, you can also use the Alchemy Signer as a standalone signer with your own smart contracts or 3rd party infrastructure. In these guides, you'll learn more about how to choose a signer and how to use our signer directly via\\nthe @account-kit/signer package to log users in with email auth, and create a embedded account with our signer to enable email, passkeys (i.e. biometrics), and soon social auth flows!\\nThe Alchemy Signer requires the use of an iframe, so must be used in the context of an application. You'll need to build your own custom frontend.See an example of a full Alchemy Embedded Account here!\",\"title\":\"Signer overview\",\"titles\":[]}]}],[\"index.07410f8fd9ca651d979f4aee5d60242cd895329c9ec8892d637a43c1ceac81e5\",{\"mdx\":\"---\\ntitle: TODO\\ndescription: TODO\\n---\\n\\nTODO: this should also be autogenerated and just inherit from the README for the given package.\\n\",\"document\":[]}],[\"index.7accff9c4465d3ab78c043de97a531a6d6001337945b4d35737fecc38416f8a1\",{\"mdx\":\"---\\ntitle: TODO\\ndescription: TODO\\n---\\n\\nTODO: this should also be autogenerated and just inherit from the README for the given package.\\n\",\"document\":[]}],[\"index.e31e81b402eca213f2a30abea7a56a68e5fc33a970b8bf738e2341b343d5773d\",{\"mdx\":\"---\\ntitle: TODO\\ndescription: TODO\\n---\\n\\nTODO: this should also be autogenerated and just inherit from the README for the given package.\\n\",\"document\":[]}],[\"index.c0ae5ddda2cd2d0476c30d242f26b7f5a870c16ae9b1e38ea2d560837cc12480\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: createBundlerClientFromExisting\\ndescription: Overview of the createBundlerClientFromExisting method\\n---\\n\\n# createBundlerClientFromExisting\\n\\nCreates a bundler client from an existing public client with the provided transport and chain.\\n\\n## Import\\n\\n```ts\\nimport { createBundlerClientFromExisting } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createPublicClient } from \\\"viem\\\";\\nimport { createBundlerClientFromExisting } from \\\"@aa-sdk/core\\\";\\n\\nconst publicClient = createPublicClient(...);\\nconst bundlerClient = createBundlerClientFromExisting(publicClient);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`PublicClient`\\nThe existing public client to be extended with bundler actions\\n\\n## Returns\\n\\n`BundlerClient`\\nA bundler client that extends the functionality of the provided public client\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClientFromExisting#createbundlerclientfromexisting\",\"html\":\"\\n

Creates a bundler client from an existing public client with the provided transport and chain.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClientFromExisting.mdx#createbundlerclientfromexisting\",\"isPage\":true,\"text\":\"\\nCreates a bundler client from an existing public client with the provided transport and chain.\\n\",\"title\":\"createBundlerClientFromExisting\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClientFromExisting#import\",\"html\":\"\\n
import { createBundlerClientFromExisting } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClientFromExisting.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createBundlerClientFromExisting } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"createBundlerClientFromExisting\"]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClientFromExisting#usage\",\"html\":\"\\n
import { createPublicClient } from "viem";\\nimport { createBundlerClientFromExisting } from "@aa-sdk/core";\\n \\nconst publicClient = createPublicClient(...);\\nconst bundlerClient = createBundlerClientFromExisting(publicClient);
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClientFromExisting.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createPublicClient } from "viem";\\nimport { createBundlerClientFromExisting } from "@aa-sdk/core";\\n \\nconst publicClient = createPublicClient(...);\\nconst bundlerClient = createBundlerClientFromExisting(publicClient);\\n\",\"title\":\"Usage\",\"titles\":[\"createBundlerClientFromExisting\"]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClientFromExisting#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClientFromExisting.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createBundlerClientFromExisting\"]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClientFromExisting#client\",\"html\":\"\\n

PublicClient<T, Chain>\\nThe existing public client to be extended with bundler actions

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClientFromExisting.mdx#client\",\"isPage\":false,\"text\":\"\\nPublicClient<T, Chain>\\nThe existing public client to be extended with bundler actions\\n\",\"title\":\"client\",\"titles\":[\"createBundlerClientFromExisting\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClientFromExisting#returns\",\"html\":\"\\n

BundlerClient<T>\\nA bundler client that extends the functionality of the provided public client

\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClientFromExisting.mdx#returns\",\"isPage\":false,\"text\":\"\\nBundlerClient<T>\\nA bundler client that extends the functionality of the provided public client\",\"title\":\"Returns\",\"titles\":[\"createBundlerClientFromExisting\"]}]}],[\"index.cd48161e6f5714515444ec854ad60afaf5c088e60265577521d9b6e4c40627f1\",{\"mdx\":\"---\\ntitle: Multisig Plugin Smart Contract\\ndescription: Follow this guide to use the Multisig Plugin on Modular Account\\n with Account Kit, a vertically integrated stack for building apps that support\\n ERC-4337 and ERC-6900.\\n---\\n\\n# Multisig Plugin\\n\\n## Overview\\n\\nThe Multisig plugin adds `k of n` threshold signature scheme to your Modular Account, similar to [Gnosis Safe](https://safe.global/) accounts. This is a powerful security layer that is recommended for accounts that require additional security and redundancy beyond a single signer.\\n\\nThe `n` signers can be any combination of ECDSA or SCA signers. A threshold of `k` signatures will be required to execute any user operation on the smart account.\\n\\n## Secure, audited, open source\\n\\nThe Multisig Plugin has been audited by Quantstamp. You can find the audit reports [here](https://github.com/alchemyplatform/multisig-plugin/blob/develop/audits).\\n\\nIt is also fully open source so you can validate the [source code](https://github.com/alchemyplatform/multisig-plugin).\\n\\nNow, let's [get started](getting-started) with the multisig plugin!\\n\\nimport Bbp from \\\"../../../resources/bbp.mdx\\\";\\n\\n\\n\",\"document\":[]}],[\"index.47690d98ec6404d194858454cfb5c2a30d4774a57661cda2643f98abe29c9508\",{\"mdx\":\"---\\ntitle: TODO\\ndescription: TODO\\n---\\n\\nTODO: this should also be autogenerated and just inherit from the README for the given package.\\n\",\"document\":[]}],[\"index.73b670778ce68e576a4d4165e4351242c96cd0edce7b5cdd9e381959e11ec4e8\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: buildUserOperation\\ndescription: Overview of the buildUserOperation method\\n---\\n\\n# buildUserOperation\\n\\nBuilds a user operation using the provided client and operation parameters. Ensures that the account exists and the client is compatible.\\n\\n## Import\\n\\n```ts\\nimport { buildUserOperation } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\n// smart account client is already extended with buildUserOperation\\nconst client = createSmartAccountClient(...);\\nconst result = await client.buildUserOperation({\\nuo: {\\ntarget: \\\"0x...\\\",\\ndata: \\\"0x...\\\", // or \\\"0x\\\",\\nvalue: 0n, // optional\\n},\\naccount, // only required if the client above is not connected to an account\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nthe client instance used to build the user operation\\n\\n### args\\n\\n`BuildUserOperationParameters`\\nthe parameters required to build the user operation, including account, overrides, and context\\n\\n## Returns\\n\\n`Promise>`\\na promise that resolves to a `UserOperationStruct` object containing the built user operation details\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperation#builduseroperation\",\"html\":\"\\n

Builds a user operation using the provided client and operation parameters. Ensures that the account exists and the client is compatible.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperation.mdx#builduseroperation\",\"isPage\":true,\"text\":\"\\nBuilds a user operation using the provided client and operation parameters. Ensures that the account exists and the client is compatible.\\n\",\"title\":\"buildUserOperation\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperation#import\",\"html\":\"\\n
import { buildUserOperation } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperation.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { buildUserOperation } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"buildUserOperation\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperation#usage\",\"html\":\"\\n
import { createSmartAccountClient } from "@aa-sdk/core";\\n \\n// smart account client is already extended with buildUserOperation\\nconst client = createSmartAccountClient(...);\\nconst result = await client.buildUserOperation({\\nuo: {\\ntarget: "0x...",\\ndata: "0x...", // or "0x",\\nvalue: 0n, // optional\\n},\\naccount, // only required if the client above is not connected to an account\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperation.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\n// smart account client is already extended with buildUserOperation\\nconst client = createSmartAccountClient(...);\\nconst result = await client.buildUserOperation({\\nuo: {\\ntarget: "0x...",\\ndata: "0x...", // or "0x",\\nvalue: 0n, // optional\\n},\\naccount, // only required if the client above is not connected to an account\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"buildUserOperation\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperation#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperation.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"buildUserOperation\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperation#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nthe client instance used to build the user operation

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperation.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nthe client instance used to build the user operation\\n\",\"title\":\"client\",\"titles\":[\"buildUserOperation\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperation#args\",\"html\":\"\\n

BuildUserOperationParameters<TAccount, TContext, TEntryPointVersion>\\nthe parameters required to build the user operation, including account, overrides, and context

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperation.mdx#args\",\"isPage\":false,\"text\":\"\\nBuildUserOperationParameters<TAccount, TContext, TEntryPointVersion>\\nthe parameters required to build the user operation, including account, overrides, and context\\n\",\"title\":\"args\",\"titles\":[\"buildUserOperation\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperation#returns\",\"html\":\"\\n

Promise<UserOperationStruct<TEntryPointVersion>>\\na promise that resolves to a UserOperationStruct object containing the built user operation details

\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperation.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<UserOperationStruct<TEntryPointVersion>>\\na promise that resolves to a UserOperationStruct object containing the built user operation details\",\"title\":\"Returns\",\"titles\":[\"buildUserOperation\"]}]}],[\"index.69fe2ea3a4e3f147a07406f3af0773e3816bece193fb0deec08aec8b47030e8a\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createBundlerClient\\ndescription: Overview of the createBundlerClient method\\n---\\n\\n# createBundlerClient\\n\\nCreates a Bundler Client using the provided configuration parameters, including chain and optional type.\\n\\n## Import\\n\\n```ts\\nimport { createBundlerClient } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createBundlerClient } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createBundlerClient({\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n});\\n```\\n\\n## Parameters\\n\\n### args\\n\\n`PublicClientConfig & { type?: string }`\\nConfiguration for creating the Bundler Client, including parameters for the chain, transport, and optional type\\n\\n## Returns\\n\\n`BundlerClient`\\nThe created Bundler Client with extended public and bundler actions\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClient#createbundlerclient\",\"html\":\"\\n

Creates a Bundler Client using the provided configuration parameters, including chain and optional type.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClient.mdx#createbundlerclient\",\"isPage\":true,\"text\":\"\\nCreates a Bundler Client using the provided configuration parameters, including chain and optional type.\\n\",\"title\":\"createBundlerClient\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClient#import\",\"html\":\"\\n
import { createBundlerClient } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createBundlerClient } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"createBundlerClient\"]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClient#usage\",\"html\":\"\\n
import { createBundlerClient } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst client = createBundlerClient({\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createBundlerClient } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst client = createBundlerClient({\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createBundlerClient\"]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createBundlerClient\"]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClient#args\",\"html\":\"\\n

PublicClientConfig & { type?: string }\\nConfiguration for creating the Bundler Client, including parameters for the chain, transport, and optional type

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClient.mdx#args\",\"isPage\":false,\"text\":\"\\nPublicClientConfig & { type?: string }\\nConfiguration for creating the Bundler Client, including parameters for the chain, transport, and optional type\\n\",\"title\":\"args\",\"titles\":[\"createBundlerClient\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/createBundlerClient#returns\",\"html\":\"\\n

BundlerClient\\nThe created Bundler Client with extended public and bundler actions

\",\"id\":\"pages/reference/aa-sdk/core/functions/createBundlerClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nBundlerClient\\nThe created Bundler Client with extended public and bundler actions\",\"title\":\"Returns\",\"titles\":[\"createBundlerClient\"]}]}],[\"index.bd00d140ae5e515aad9c1ca47b01550166b4de943e34f33eccdc23642269a8b2\",{\"mdx\":\"---\\ntitle: TODO\\ndescription: TODO\\n---\\n\\nTODO: this should also be autogenerated and just inherit from the README for the given package.\\n\",\"document\":[]}],[\"index.4a342a6853e4fbfb7ed35252317318bb1d3e6a3167dcceb2a7ed91f0f7b987cc\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: checkGasSponsorshipEligibility\\ndescription: Overview of the checkGasSponsorshipEligibility method\\n---\\n\\n# checkGasSponsorshipEligibility\\n\\nThis function verifies the eligibility of the connected account for gas sponsorship concerning the upcoming `UserOperation` (UO) that is intended to be sent.\\nInternally, this method invokes `buildUserOperation`, which navigates through the middleware pipeline, including the `PaymasterMiddleware`. Its purpose is to construct the UO struct meant for transmission to the bundler. Following the construction of the UO struct, this function verifies if the resulting structure contains a non-empty `paymasterAndData` field.\\nYou can utilize this method before sending the user operation to confirm its eligibility for gas sponsorship. Depending on the outcome, it allows you to tailor the user experience accordingly, based on eligibility.\\n\\n## Import\\n\\n```ts\\nimport { checkGasSponsorshipEligibility } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { smartAccountClient } from \\\"./smartAccountClient\\\";\\n// [!code focus:99]\\nconst eligible = await smartAccountClient.checkGasSponsorshipEligibility({\\n uo: {\\n data: \\\"0xCalldata\\\",\\n target: \\\"0xTarget\\\",\\n value: 0n,\\n },\\n});\\n\\nconsole.log(\\n `User Operation is ${\\n eligible ? \\\"eligible\\\" : \\\"ineligible\\\"\\n } for gas sponsorship.`\\n);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nthe smart account client to use for making RPC calls\\n\\n### args\\n\\n`SendUserOperationParameters`\\ncontaining the user operation, account, context, and overrides\\n\\n## Returns\\n\\n`Promise`\\na Promise containing a boolean indicating if the account is elgibile for sponsorship\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility#checkgassponsorshipeligibility\",\"html\":\"\\n

This function verifies the eligibility of the connected account for gas sponsorship concerning the upcoming UserOperation (UO) that is intended to be sent.\\nInternally, this method invokes buildUserOperation, which navigates through the middleware pipeline, including the PaymasterMiddleware. Its purpose is to construct the UO struct meant for transmission to the bundler. Following the construction of the UO struct, this function verifies if the resulting structure contains a non-empty paymasterAndData field.\\nYou can utilize this method before sending the user operation to confirm its eligibility for gas sponsorship. Depending on the outcome, it allows you to tailor the user experience accordingly, based on eligibility.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility.mdx#checkgassponsorshipeligibility\",\"isPage\":true,\"text\":\"\\nThis function verifies the eligibility of the connected account for gas sponsorship concerning the upcoming UserOperation (UO) that is intended to be sent.\\nInternally, this method invokes buildUserOperation, which navigates through the middleware pipeline, including the PaymasterMiddleware. Its purpose is to construct the UO struct meant for transmission to the bundler. Following the construction of the UO struct, this function verifies if the resulting structure contains a non-empty paymasterAndData field.\\nYou can utilize this method before sending the user operation to confirm its eligibility for gas sponsorship. Depending on the outcome, it allows you to tailor the user experience accordingly, based on eligibility.\\n\",\"title\":\"checkGasSponsorshipEligibility\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility#import\",\"html\":\"\\n
import { checkGasSponsorshipEligibility } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { checkGasSponsorshipEligibility } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"checkGasSponsorshipEligibility\"]},{\"href\":\"/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility#usage\",\"html\":\"\\n
import { smartAccountClient } from "./smartAccountClient";\\n\\nconst eligible = await smartAccountClient.checkGasSponsorshipEligibility({\\n  uo: {\\n    data: "0xCalldata",\\n    target: "0xTarget",\\n    value: 0n,\\n  },\\n});\\n \\nconsole.log(\\n  `User Operation is ${\\n    eligible ? "eligible" : "ineligible"\\n  } for gas sponsorship.`\\n);
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { smartAccountClient } from "./smartAccountClient";\\n\\nconst eligible = await smartAccountClient.checkGasSponsorshipEligibility({\\n uo: {\\n data: "0xCalldata",\\n target: "0xTarget",\\n value: 0n,\\n },\\n});\\n \\nconsole.log(\\n `User Operation is ${\\n eligible ? "eligible" : "ineligible"\\n } for gas sponsorship.`\\n);\\n\",\"title\":\"Usage\",\"titles\":[\"checkGasSponsorshipEligibility\"]},{\"href\":\"/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"checkGasSponsorshipEligibility\"]},{\"href\":\"/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nthe smart account client to use for making RPC calls

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nthe smart account client to use for making RPC calls\\n\",\"title\":\"client\",\"titles\":[\"checkGasSponsorshipEligibility\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility#args\",\"html\":\"\\n

SendUserOperationParameters\\ncontaining the user operation, account, context, and overrides

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility.mdx#args\",\"isPage\":false,\"text\":\"\\nSendUserOperationParameters\\ncontaining the user operation, account, context, and overrides\\n\",\"title\":\"args\",\"titles\":[\"checkGasSponsorshipEligibility\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility#returns\",\"html\":\"\\n

Promise<boolean>\\na Promise containing a boolean indicating if the account is elgibile for sponsorship

\",\"id\":\"pages/reference/aa-sdk/core/functions/checkGasSponsorshipEligibility.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<boolean>\\na Promise containing a boolean indicating if the account is elgibile for sponsorship\",\"title\":\"Returns\",\"titles\":[\"checkGasSponsorshipEligibility\"]}]}],[\"index.a1490fd07bb3fbbc5c582f44853919c816e0becf1dd98bbb8fec3d5c64717ce8\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: bundlerActions\\ndescription: Overview of the bundlerActions method\\n---\\n\\n# bundlerActions\\n\\nA viem client decorator that provides Bundler specific actions.\\nThese actions include estimating gas for user operations, sending raw user operations, retrieving user operations by hash, getting supported entry points, and getting user operation receipts.\\n\\nNOTE: this is already added to the client returned from `createBundlerClient`\\n\\n## Import\\n\\n```ts\\nimport { bundlerActions } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`TClient`\\nThe client instance that will be used to perform bundler actions\\n\\n## Returns\\n\\n`BundlerActions`\\nAn object containing various bundler-related actions that can be executed using the provided client\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/bundlerActions#bundleractions\",\"html\":\"\\n

A viem client decorator that provides Bundler specific actions.\\nThese actions include estimating gas for user operations, sending raw user operations, retrieving user operations by hash, getting supported entry points, and getting user operation receipts.

\\n

NOTE: this is already added to the client returned from createBundlerClient

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/bundlerActions.mdx#bundleractions\",\"isPage\":true,\"text\":\"\\nA viem client decorator that provides Bundler specific actions.\\nThese actions include estimating gas for user operations, sending raw user operations, retrieving user operations by hash, getting supported entry points, and getting user operation receipts.\\nNOTE: this is already added to the client returned from createBundlerClient\\n\",\"title\":\"bundlerActions\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/bundlerActions#import\",\"html\":\"\\n
import { bundlerActions } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/bundlerActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { bundlerActions } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"bundlerActions\"]},{\"href\":\"/reference/aa-sdk/core/functions/bundlerActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/bundlerActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"bundlerActions\"]},{\"href\":\"/reference/aa-sdk/core/functions/bundlerActions#client\",\"html\":\"\\n

TClient\\nThe client instance that will be used to perform bundler actions

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/bundlerActions.mdx#client\",\"isPage\":false,\"text\":\"\\nTClient\\nThe client instance that will be used to perform bundler actions\\n\",\"title\":\"client\",\"titles\":[\"bundlerActions\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/bundlerActions#returns\",\"html\":\"\\n

BundlerActions\\nAn object containing various bundler-related actions that can be executed using the provided client

\",\"id\":\"pages/reference/aa-sdk/core/functions/bundlerActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nBundlerActions\\nAn object containing various bundler-related actions that can be executed using the provided client\",\"title\":\"Returns\",\"titles\":[\"bundlerActions\"]}]}],[\"index.2c1c896e0fe38e15c8f913383ce925507291a57906506eace0e04d973c23aa6c\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: convertCoinTypeToChain\\ndescription: Overview of the convertCoinTypeToChain method\\n---\\n\\n# convertCoinTypeToChain\\n\\nConverts a coin type to its corresponding blockchain chain based on a predefined mapping.\\n\\n## Import\\n\\n```ts\\nimport { convertCoinTypeToChain } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { convertChainIdToCoinType, convertCoinTypeToChain } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst coinType = convertChainIdToCoinType(sepolia.id);\\nconst chain = convertCoinTypeToChain(coinType);\\n```\\n\\n## Parameters\\n\\n### coinType\\n\\n`number`\\nThe numerical identifier for the coin type\\n\\n## Returns\\n\\n`Chain`\\nThe corresponding blockchain chain\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChain#convertcointypetochain\",\"html\":\"\\n

Converts a coin type to its corresponding blockchain chain based on a predefined mapping.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChain.mdx#convertcointypetochain\",\"isPage\":true,\"text\":\"\\nConverts a coin type to its corresponding blockchain chain based on a predefined mapping.\\n\",\"title\":\"convertCoinTypeToChain\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChain#import\",\"html\":\"\\n
import { convertCoinTypeToChain } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChain.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { convertCoinTypeToChain } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"convertCoinTypeToChain\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChain#usage\",\"html\":\"\\n
import { convertChainIdToCoinType, convertCoinTypeToChain } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst coinType = convertChainIdToCoinType(sepolia.id);\\nconst chain = convertCoinTypeToChain(coinType);
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChain.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { convertChainIdToCoinType, convertCoinTypeToChain } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst coinType = convertChainIdToCoinType(sepolia.id);\\nconst chain = convertCoinTypeToChain(coinType);\\n\",\"title\":\"Usage\",\"titles\":[\"convertCoinTypeToChain\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChain#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChain.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"convertCoinTypeToChain\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChain#cointype\",\"html\":\"\\n

number\\nThe numerical identifier for the coin type

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChain.mdx#cointype\",\"isPage\":false,\"text\":\"\\nnumber\\nThe numerical identifier for the coin type\\n\",\"title\":\"coinType\",\"titles\":[\"convertCoinTypeToChain\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChain#returns\",\"html\":\"\\n

Chain\\nThe corresponding blockchain chain

\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChain.mdx#returns\",\"isPage\":false,\"text\":\"\\nChain\\nThe corresponding blockchain chain\",\"title\":\"Returns\",\"titles\":[\"convertCoinTypeToChain\"]}]}],[\"index.5f5c56ea9d01cbd04b0cad172a9eaec23db0f2f4a3c456bdb835927cf0bbdc5c\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: convertChainIdToCoinType\\ndescription: Overview of the convertChainIdToCoinType method\\n---\\n\\n# convertChainIdToCoinType\\n\\nConverts a given chain ID to a coin type, following specific standards for mainnet and non-mainnet chains.\\n\\n## Import\\n\\n```ts\\nimport { convertChainIdToCoinType } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { convertChainIdToCoinType } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst coinType = convertChainIdToCoinType(sepolia.id);\\n```\\n\\n## Parameters\\n\\n### chainId\\n\\n`number`\\nthe blockchain chain ID that you want to convert to a coin type\\n\\n## Returns\\n\\n`number`\\nthe corresponding coin type for the given chain ID\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/convertChainIdToCoinType#convertchainidtocointype\",\"html\":\"\\n

Converts a given chain ID to a coin type, following specific standards for mainnet and non-mainnet chains.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertChainIdToCoinType.mdx#convertchainidtocointype\",\"isPage\":true,\"text\":\"\\nConverts a given chain ID to a coin type, following specific standards for mainnet and non-mainnet chains.\\n\",\"title\":\"convertChainIdToCoinType\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/convertChainIdToCoinType#import\",\"html\":\"\\n
import { convertChainIdToCoinType } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertChainIdToCoinType.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { convertChainIdToCoinType } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"convertChainIdToCoinType\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertChainIdToCoinType#usage\",\"html\":\"\\n
import { convertChainIdToCoinType } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst coinType = convertChainIdToCoinType(sepolia.id);
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertChainIdToCoinType.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { convertChainIdToCoinType } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst coinType = convertChainIdToCoinType(sepolia.id);\\n\",\"title\":\"Usage\",\"titles\":[\"convertChainIdToCoinType\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertChainIdToCoinType#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertChainIdToCoinType.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"convertChainIdToCoinType\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertChainIdToCoinType#chainid\",\"html\":\"\\n

number\\nthe blockchain chain ID that you want to convert to a coin type

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertChainIdToCoinType.mdx#chainid\",\"isPage\":false,\"text\":\"\\nnumber\\nthe blockchain chain ID that you want to convert to a coin type\\n\",\"title\":\"chainId\",\"titles\":[\"convertChainIdToCoinType\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertChainIdToCoinType#returns\",\"html\":\"\\n

number\\nthe corresponding coin type for the given chain ID

\",\"id\":\"pages/reference/aa-sdk/core/functions/convertChainIdToCoinType.mdx#returns\",\"isPage\":false,\"text\":\"\\nnumber\\nthe corresponding coin type for the given chain ID\",\"title\":\"Returns\",\"titles\":[\"convertChainIdToCoinType\"]}]}],[\"index.5664cc7dde989bac1459877be8cb2971737621826b5c815ea31f749f872c69e9\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: deepHexlify\\ndescription: Overview of the deepHexlify method\\n---\\n\\n# deepHexlify\\n\\nRecursively converts all values in an object to hex strings\\n\\n## Import\\n\\n```ts\\nimport { deepHexlify } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### obj\\n\\n`any`\\n\\n- obj to deep hexlify\\n\\n## Returns\\n\\n`any`\\nobject with all of its values hexlified\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/deepHexlify#deephexlify\",\"html\":\"\\n

Recursively converts all values in an object to hex strings

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/deepHexlify.mdx#deephexlify\",\"isPage\":true,\"text\":\"\\nRecursively converts all values in an object to hex strings\\n\",\"title\":\"deepHexlify\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/deepHexlify#import\",\"html\":\"\\n
import { deepHexlify } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/deepHexlify.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { deepHexlify } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"deepHexlify\"]},{\"href\":\"/reference/aa-sdk/core/functions/deepHexlify#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/deepHexlify.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"deepHexlify\"]},{\"href\":\"/reference/aa-sdk/core/functions/deepHexlify#obj\",\"html\":\"\\n

any

\\n
    \\n
  • obj to deep hexlify
  • \\n
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/deepHexlify.mdx#obj\",\"isPage\":false,\"text\":\"\\nany\\n\\nobj to deep hexlify\\n\\n\",\"title\":\"obj\",\"titles\":[\"deepHexlify\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/deepHexlify#returns\",\"html\":\"\\n

any\\nobject with all of its values hexlified

\",\"id\":\"pages/reference/aa-sdk/core/functions/deepHexlify.mdx#returns\",\"isPage\":false,\"text\":\"\\nany\\nobject with all of its values hexlified\",\"title\":\"Returns\",\"titles\":[\"deepHexlify\"]}]}],[\"index.c821b434af8e722d7b395359b792f4722ca067b104d791a96d9a22f4cdfcf56a\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: buildUserOperationFromTx\\ndescription: Overview of the buildUserOperationFromTx method\\n---\\n\\n# buildUserOperationFromTx\\n\\nPerforms `buildUserOperationFromTx` in batch and builds into a single, yet to be signed `UserOperation` (UO) struct. The output user operation struct will be filled with all gas fields (and paymaster data if a paymaster is used) based on the transactions data (`to`, `data`, `value`, `maxFeePerGas`, `maxPriorityFeePerGas`) computed using the configured `ClientMiddlewares` on the `SmartAccountClient`\\n\\n## Import\\n\\n```ts\\nimport { buildUserOperationFromTx } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport type { RpcTransactionRequest } from \\\"viem\\\";\\nimport { smartAccountClient } from \\\"./smartAccountClient\\\";\\n// [!code focus:99]\\n// buildUserOperationFromTx converts a traditional Ethereum transaction and returns\\n// the unsigned user operation struct after constructing the user operation struct\\n// through the middleware pipeline\\nconst tx: RpcTransactionRequest = {\\nfrom, // ignored\\nto,\\ndata: encodeFunctionData({\\nabi: ContractABI.abi,\\nfunctionName: \\\"func\\\",\\nargs: [arg1, arg2, ...],\\n}),\\n};\\nconst uoStruct = await smartAccountClient.buildUserOperationFromTx(tx);\\n\\n// signUserOperation signs the above unsigned user operation struct built\\n// using the account connected to the smart account client\\nconst request = await smartAccountClient.signUserOperation({ uoStruct });\\n\\n// You can use the BundlerAction `sendRawUserOperation` (packages/core/src/actions/bundler/sendRawUserOperation.ts)\\n// to send the signed user operation request to the bundler, requesting the bundler to send the signed uo to the\\n// EntryPoint contract pointed at by the entryPoint address parameter\\nconst entryPointAddress = client.account.getEntryPoint().address;\\nconst uoHash = await smartAccountClient.sendRawUserOperation({ request, entryPoint: entryPointAddress });\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nthe smart account client to use for RPC requests\\n\\n### args\\n\\n`SendTransactionParameters`\\nthe send tx parameters\\n\\n### overrides\\n\\n`UserOperationOverrides`\\noptional overrides to use for any of the fields\\n\\n### context\\n\\n`TContext`\\nif the smart account client requires additinoal context for building UOs\\n\\n## Returns\\n\\n`Promise>`\\na Promise containing the built user operation\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTx#builduseroperationfromtx\",\"html\":\"\\n

Performs buildUserOperationFromTx in batch and builds into a single, yet to be signed UserOperation (UO) struct. The output user operation struct will be filled with all gas fields (and paymaster data if a paymaster is used) based on the transactions data (to, data, value, maxFeePerGas, maxPriorityFeePerGas) computed using the configured ClientMiddlewares on the SmartAccountClient

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTx.mdx#builduseroperationfromtx\",\"isPage\":true,\"text\":\"\\nPerforms buildUserOperationFromTx in batch and builds into a single, yet to be signed UserOperation (UO) struct. The output user operation struct will be filled with all gas fields (and paymaster data if a paymaster is used) based on the transactions data (to, data, value, maxFeePerGas, maxPriorityFeePerGas) computed using the configured ClientMiddlewares on the SmartAccountClient\\n\",\"title\":\"buildUserOperationFromTx\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTx#import\",\"html\":\"\\n
import { buildUserOperationFromTx } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTx.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { buildUserOperationFromTx } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"buildUserOperationFromTx\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTx#usage\",\"html\":\"\\n
import type { RpcTransactionRequest } from "viem";\\nimport { smartAccountClient } from "./smartAccountClient";\\n\\n// buildUserOperationFromTx converts a traditional Ethereum transaction and returns\\n// the unsigned user operation struct after constructing the user operation struct\\n// through the middleware pipeline\\nconst tx: RpcTransactionRequest = {\\nfrom, // ignored\\nto,\\ndata: encodeFunctionData({\\nabi: ContractABI.abi,\\nfunctionName: "func",\\nargs: [arg1, arg2, ...],\\n}),\\n};\\nconst uoStruct = await smartAccountClient.buildUserOperationFromTx(tx);\\n \\n// signUserOperation signs the above unsigned user operation struct built\\n// using the account connected to the smart account client\\nconst request = await smartAccountClient.signUserOperation({ uoStruct });\\n \\n// You can use the BundlerAction `sendRawUserOperation` (packages/core/src/actions/bundler/sendRawUserOperation.ts)\\n// to send the signed user operation request to the bundler, requesting the bundler to send the signed uo to the\\n// EntryPoint contract pointed at by the entryPoint address parameter\\nconst entryPointAddress = client.account.getEntryPoint().address;\\nconst uoHash = await smartAccountClient.sendRawUserOperation({ request, entryPoint: entryPointAddress });
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTx.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport type { RpcTransactionRequest } from "viem";\\nimport { smartAccountClient } from "./smartAccountClient";\\n\\n// buildUserOperationFromTx converts a traditional Ethereum transaction and returns\\n// the unsigned user operation struct after constructing the user operation struct\\n// through the middleware pipeline\\nconst tx: RpcTransactionRequest = {\\nfrom, // ignored\\nto,\\ndata: encodeFunctionData({\\nabi: ContractABI.abi,\\nfunctionName: "func",\\nargs: [arg1, arg2, ...],\\n}),\\n};\\nconst uoStruct = await smartAccountClient.buildUserOperationFromTx(tx);\\n \\n// signUserOperation signs the above unsigned user operation struct built\\n// using the account connected to the smart account client\\nconst request = await smartAccountClient.signUserOperation({ uoStruct });\\n \\n// You can use the BundlerAction `sendRawUserOperation` (packages/core/src/actions/bundler/sendRawUserOperation.ts)\\n// to send the signed user operation request to the bundler, requesting the bundler to send the signed uo to the\\n// EntryPoint contract pointed at by the entryPoint address parameter\\nconst entryPointAddress = client.account.getEntryPoint().address;\\nconst uoHash = await smartAccountClient.sendRawUserOperation({ request, entryPoint: entryPointAddress });\\n\",\"title\":\"Usage\",\"titles\":[\"buildUserOperationFromTx\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTx#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTx.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"buildUserOperationFromTx\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTx#client\",\"html\":\"\\n

Client<Transport, TChain, TAccount>\\nthe smart account client to use for RPC requests

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTx.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<Transport, TChain, TAccount>\\nthe smart account client to use for RPC requests\\n\",\"title\":\"client\",\"titles\":[\"buildUserOperationFromTx\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTx#args\",\"html\":\"\\n

SendTransactionParameters\\nthe send tx parameters

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTx.mdx#args\",\"isPage\":false,\"text\":\"\\nSendTransactionParameters\\nthe send tx parameters\\n\",\"title\":\"args\",\"titles\":[\"buildUserOperationFromTx\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTx#overrides\",\"html\":\"\\n

UserOperationOverrides\\noptional overrides to use for any of the fields

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTx.mdx#overrides\",\"isPage\":false,\"text\":\"\\nUserOperationOverrides\\noptional overrides to use for any of the fields\\n\",\"title\":\"overrides\",\"titles\":[\"buildUserOperationFromTx\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTx#context\",\"html\":\"\\n

TContext\\nif the smart account client requires additinoal context for building UOs

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTx.mdx#context\",\"isPage\":false,\"text\":\"\\nTContext\\nif the smart account client requires additinoal context for building UOs\\n\",\"title\":\"context\",\"titles\":[\"buildUserOperationFromTx\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTx#returns\",\"html\":\"\\n

Promise<UserOperationStruct<TEntryPointVersion>>\\na Promise containing the built user operation

\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTx.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<UserOperationStruct<TEntryPointVersion>>\\na Promise containing the built user operation\",\"title\":\"Returns\",\"titles\":[\"buildUserOperationFromTx\"]}]}],[\"index.449c8ce8f04324f2374a95f69e2ef4944d576f259006ad2c8a1e77cf06ef1f6c\",{\"mdx\":\"---\\ntitle: Multisig Plugin Smart Contract Technical Details\\ndescription: What are the technical details for the Multisig Plugin?\\n---\\n\\n# Multisig Plugin Technical Details\\n\\n## Storing Signatures\\n\\nIn the usage guide, for a threshold of `k` signatures, we obtain the first signature with `proposeUserOperation` and the next `k-2` signatures with `signMultisigUserOperation`. In practice, since signers would likely use different clients and sign at different times, the client or dapp will need to store the first `k-1` signatures. This would be loaded and combined with the final signature to be used with `sendUserOperation`.\\n\\n## Gas Estimation\\n\\nGas estimations must be performed for user operations before the first signature is obtained. This is done in aa-sdk with built in gas and fee estimation middlewares.\\n\\nWe perform gas estimation assuming that the `k` signatures to be obtained are EOAs, and not other smart accounts. In the case that smart accounts own a modular account, the validation step could require more gas. If used with default gas estimation, it would cause the user operation to fail with an insufficient gas error.\\n\\nIn these cases, clients are expected to implement their own gas estimations for the signature validation step, and use gas overrides when first calling `proposeUserOperation`.\\n\\n## Variable Gas Feature\\n\\nFor normal User Operations, gas prices and values have to be decided before the first signer's signature (and the paymaster's signature, if used). However, since it might take time to gather the `k` signatures, it is likely that when the `k`th signature is collected, the network gas values would have changed significantly. In this case, the account would be overpaying on gas, or the User Operation would be underpriced, and the `k` signatures have to be collected again on a new User Operation.\\n\\nThis multisig plugin includes a variable gas feature to address this problem. The fee values selected and signed over by the first `k-1` signers are treated as a \\\"maximum fee\\\" and the `k`th signer is able to choose final fee values to use based on the current network conditions. With this feature, there is no longer a risk of overpaying, or having to re-collect the `k` signatures.\\n\\nHowever, note that the use of this feature would likely not work with regular paymaster services, including Alchemy's Gas Manager product.\\n\",\"document\":[{\"href\":\"/smart-contracts/modular-account/multisig-plugin/details#multisig-plugin-technical-details\",\"html\":\"\\n\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/details.mdx#multisig-plugin-technical-details\",\"isPage\":true,\"text\":\"\\n\",\"title\":\"Multisig Plugin Technical Details\",\"titles\":[]},{\"href\":\"/smart-contracts/modular-account/multisig-plugin/details#storing-signatures\",\"html\":\"\\n

In the usage guide, for a threshold of k signatures, we obtain the first signature with proposeUserOperation and the next k-2 signatures with signMultisigUserOperation. In practice, since signers would likely use different clients and sign at different times, the client or dapp will need to store the first k-1 signatures. This would be loaded and combined with the final signature to be used with sendUserOperation.

\\n\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/details.mdx#storing-signatures\",\"isPage\":false,\"text\":\"\\nIn the usage guide, for a threshold of k signatures, we obtain the first signature with proposeUserOperation and the next k-2 signatures with signMultisigUserOperation. In practice, since signers would likely use different clients and sign at different times, the client or dapp will need to store the first k-1 signatures. This would be loaded and combined with the final signature to be used with sendUserOperation.\\n\",\"title\":\"Storing Signatures\",\"titles\":[\"Multisig Plugin Technical Details\"]},{\"href\":\"/smart-contracts/modular-account/multisig-plugin/details#gas-estimation\",\"html\":\"\\n

Gas estimations must be performed for user operations before the first signature is obtained. This is done in aa-sdk with built in gas and fee estimation middlewares.

\\n

We perform gas estimation assuming that the k signatures to be obtained are EOAs, and not other smart accounts. In the case that smart accounts own a modular account, the validation step could require more gas. If used with default gas estimation, it would cause the user operation to fail with an insufficient gas error.

\\n

In these cases, clients are expected to implement their own gas estimations for the signature validation step, and use gas overrides when first calling proposeUserOperation.

\\n\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/details.mdx#gas-estimation\",\"isPage\":false,\"text\":\"\\nGas estimations must be performed for user operations before the first signature is obtained. This is done in aa-sdk with built in gas and fee estimation middlewares.\\nWe perform gas estimation assuming that the k signatures to be obtained are EOAs, and not other smart accounts. In the case that smart accounts own a modular account, the validation step could require more gas. If used with default gas estimation, it would cause the user operation to fail with an insufficient gas error.\\nIn these cases, clients are expected to implement their own gas estimations for the signature validation step, and use gas overrides when first calling proposeUserOperation.\\n\",\"title\":\"Gas Estimation\",\"titles\":[\"Multisig Plugin Technical Details\"]},{\"href\":\"/smart-contracts/modular-account/multisig-plugin/details#variable-gas-feature\",\"html\":\"\\n

For normal User Operations, gas prices and values have to be decided before the first signer's signature (and the paymaster's signature, if used). However, since it might take time to gather the k signatures, it is likely that when the kth signature is collected, the network gas values would have changed significantly. In this case, the account would be overpaying on gas, or the User Operation would be underpriced, and the k signatures have to be collected again on a new User Operation.

\\n

This multisig plugin includes a variable gas feature to address this problem. The fee values selected and signed over by the first k-1 signers are treated as a "maximum fee" and the kth signer is able to choose final fee values to use based on the current network conditions. With this feature, there is no longer a risk of overpaying, or having to re-collect the k signatures.

\\n

However, note that the use of this feature would likely not work with regular paymaster services, including Alchemy's Gas Manager product.

\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/details.mdx#variable-gas-feature\",\"isPage\":false,\"text\":\"\\nFor normal User Operations, gas prices and values have to be decided before the first signer's signature (and the paymaster's signature, if used). However, since it might take time to gather the k signatures, it is likely that when the kth signature is collected, the network gas values would have changed significantly. In this case, the account would be overpaying on gas, or the User Operation would be underpriced, and the k signatures have to be collected again on a new User Operation.\\nThis multisig plugin includes a variable gas feature to address this problem. The fee values selected and signed over by the first k-1 signers are treated as a "maximum fee" and the kth signer is able to choose final fee values to use based on the current network conditions. With this feature, there is no longer a risk of overpaying, or having to re-collect the k signatures.\\nHowever, note that the use of this feature would likely not work with regular paymaster services, including Alchemy's Gas Manager product.\",\"title\":\"Variable Gas Feature\",\"titles\":[\"Multisig Plugin Technical Details\"]}]}],[\"index.167c9755beb47826efa85f00f525870faa942c4ad5aa3a20ca4df888c6220d7a\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: allEqual\\ndescription: Overview of the allEqual method\\n---\\n\\n# allEqual\\n\\nUtility method for checking if the passed in values are all equal (strictly)\\n\\n## Import\\n\\n```ts\\nimport { allEqual } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`...any[]`\\n\\n- values to check\\n\\n## Returns\\n\\n`boolean`\\na boolean indicating if all values are the same\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/allEqual#allequal\",\"html\":\"\\n

Utility method for checking if the passed in values are all equal (strictly)

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/allEqual.mdx#allequal\",\"isPage\":true,\"text\":\"\\nUtility method for checking if the passed in values are all equal (strictly)\\n\",\"title\":\"allEqual\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/allEqual#import\",\"html\":\"\\n
import { allEqual } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/allEqual.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { allEqual } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"allEqual\"]},{\"href\":\"/reference/aa-sdk/core/functions/allEqual#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/allEqual.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"allEqual\"]},{\"href\":\"/reference/aa-sdk/core/functions/allEqual#params\",\"html\":\"\\n

...any[]

\\n
    \\n
  • values to check
  • \\n
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/allEqual.mdx#params\",\"isPage\":false,\"text\":\"\\n...any[]\\n\\nvalues to check\\n\\n\",\"title\":\"params\",\"titles\":[\"allEqual\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/allEqual#returns\",\"html\":\"\\n

boolean\\na boolean indicating if all values are the same

\",\"id\":\"pages/reference/aa-sdk/core/functions/allEqual.mdx#returns\",\"isPage\":false,\"text\":\"\\nboolean\\na boolean indicating if all values are the same\",\"title\":\"Returns\",\"titles\":[\"allEqual\"]}]}],[\"index.a3de89642a623c6b564b7309a0dc3b0245f09d46507a57fd2d77754940458e1f\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: convertCoinTypeToChainId\\ndescription: Overview of the convertCoinTypeToChainId method\\n---\\n\\n# convertCoinTypeToChainId\\n\\nConverts a coin type to a chain ID based on predefined mappings. This function follows ENSIP-9 for coin type 60 and ENSIP-11 for other coin types.\\n\\n## Import\\n\\n```ts\\nimport { convertCoinTypeToChainId } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport {\\n convertChainIdToCoinType,\\n convertCoinTypeToChainId,\\n} from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst coinType = convertChainIdToCoinType(sepolia.id);\\nconst chainId = convertCoinTypeToChainId(coinType);\\n```\\n\\n## Parameters\\n\\n### coinType\\n\\n`number`\\nthe coin type to be converted to a chain ID\\n\\n## Returns\\n\\n`number`\\nthe corresponding chain ID\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChainId#convertcointypetochainid\",\"html\":\"\\n

Converts a coin type to a chain ID based on predefined mappings. This function follows ENSIP-9 for coin type 60 and ENSIP-11 for other coin types.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChainId.mdx#convertcointypetochainid\",\"isPage\":true,\"text\":\"\\nConverts a coin type to a chain ID based on predefined mappings. This function follows ENSIP-9 for coin type 60 and ENSIP-11 for other coin types.\\n\",\"title\":\"convertCoinTypeToChainId\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChainId#import\",\"html\":\"\\n
import { convertCoinTypeToChainId } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChainId.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { convertCoinTypeToChainId } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"convertCoinTypeToChainId\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChainId#usage\",\"html\":\"\\n
import {\\n  convertChainIdToCoinType,\\n  convertCoinTypeToChainId,\\n} from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst coinType = convertChainIdToCoinType(sepolia.id);\\nconst chainId = convertCoinTypeToChainId(coinType);
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChainId.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport {\\n convertChainIdToCoinType,\\n convertCoinTypeToChainId,\\n} from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst coinType = convertChainIdToCoinType(sepolia.id);\\nconst chainId = convertCoinTypeToChainId(coinType);\\n\",\"title\":\"Usage\",\"titles\":[\"convertCoinTypeToChainId\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChainId#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChainId.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"convertCoinTypeToChainId\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChainId#cointype\",\"html\":\"\\n

number\\nthe coin type to be converted to a chain ID

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChainId.mdx#cointype\",\"isPage\":false,\"text\":\"\\nnumber\\nthe coin type to be converted to a chain ID\\n\",\"title\":\"coinType\",\"titles\":[\"convertCoinTypeToChainId\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/convertCoinTypeToChainId#returns\",\"html\":\"\\n

number\\nthe corresponding chain ID

\",\"id\":\"pages/reference/aa-sdk/core/functions/convertCoinTypeToChainId.mdx#returns\",\"isPage\":false,\"text\":\"\\nnumber\\nthe corresponding chain ID\",\"title\":\"Returns\",\"titles\":[\"convertCoinTypeToChainId\"]}]}],[\"index.c466a47f7c72c9d580b4c8e5ba54959a0b3933083616b4b474e7c7f0ccab700e\",{\"mdx\":\"---\\ntitle: Modular Account with Multisig Plugin • Getting started\\ndescription: Getting started with the Modular Account with Multisig Plugin in Account Kit\\n---\\n\\n# Getting started with the Multisig Plugin\\n\\n## 1. Create a Multisig Account Client\\n\\nInitialize a Multisig Modular Account client and set the `n` accounts as signers.\\n\\n:::warning\\nIt is recommended to use the `createMultisigAccountAlchemyClient` directly to create new accounts with multi-sig ownership, rather than extending the Modular Account client.\\n\\nIf you have an existing Modular Account (which has multi-owner plugin by default), please see details [here](#TODO/smart-contracts/extending-smart-accounts/install-plugins#extend-modular-account-with-multisig) for installing the plugin before proceeding.\\n:::\\n\\n```ts twoslash\\n// [!include ~/shared/smart-contracts/multisig-client.ts]\\n```\\n\\n## 3. Propose a User Operation\\n\\nTo propose a new user operation for review by the multisig signers, you will use the `proposeUserOperation` method. This estimates gas, constructs the user operation struct, and if `gasManagerConfig` is used then it attempts to use a paymaster. Lastly, a signature is generated with the pre-provided signer.\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { multisigAccountClient } from \\\"./client\\\";\\nimport { createMultisigAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst {\\n request,\\n aggregatedSignature,\\n signatureObj: firstSig,\\n} = await multisigAccountClient.proposeUserOperation({\\n uo: {\\n target: targetAddress,\\n data: \\\"0x\\\",\\n },\\n});\\n```\\n\\n```ts twoslash [client.ts] filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/multisig-client.ts]\\n```\\n\\n:::\\n\\n## 4. Get the threshold signatures\\n\\nNext, you have to collect the next k-2 signatures, excluding the first signature which you already provided and the last signature which we'll deal with in step 5 when we send the user operation. Each member of the multisig can sign with the `signMultisigUserOperation` method.\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { createMultisigAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { signers, owners, threshold } from \\\"./client\\\";\\n\\nconst multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain,\\n signer: signers[1], // using the second signer\\n owners,\\n threshold,\\n apiKey: \\\"YOUR_API_KEY\\\",\\n});\\n\\nconst { aggregatedSignature, signatureObj: secondSig } =\\n await multisigAccountClient.signMultisigUserOperation({\\n account: multisigAccountClient.account,\\n // output from step 1, and from this step if k-2 > 1\\n signatures: [previousAggregatedSignature],\\n userOperationRequest: request,\\n });\\n```\\n\\n```ts twoslash [client.ts] filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/multisig-client.ts]\\n```\\n\\n:::\\n\\n## 5. Send the User Operation\\n\\nAfter collecting k-1 signatures, you're ready to collect the last signature and send the user operation. This is done with the `sendUserOperation` method. `sendUserOperation` also formats this aggregated signature, sorting its parts in ascending order by owner address as expected by the Multisig Plugin smart contract.\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { createMultisigAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { signers, owners, threshold } from \\\"./client\\\";\\n\\nconst multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain,\\n // using the last signer\\n signer: signers[2],\\n owners,\\n threshold,\\n apiKey: \\\"YOUR_API_KEY\\\",\\n});\\n\\nconst result = await multisigAccountClient.sendUserOperation({\\n uo: request.callData,\\n context: {\\n aggregatedSignature,\\n signatures: [firstSig, secondSig],\\n userOpSignatureType: \\\"ACTUAL\\\",\\n },\\n});\\n```\\n\\n```ts twoslash [client.ts] filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/multisig-client.ts]\\n```\\n\\n:::\\n\\nBy default, we use the variable gas feature in the Multisig Plugin smart contract. For this, we need `userOpSignatureType` to be set to \\\"ACTUAL\\\". If you do not wish to use this feature, gas overrides should be passed in `sendUserOperation`, and `userOpSignatureType` should be set to \\\"UPPERLIMIT\\\".\\n\\n:::code-group\\n\\n```ts twoslash [example.ts]\\nimport { multisigAccountClient } from \\\"./client\\\";\\n\\nconst result = await multisigAccountClient.sendUserOperation({\\n uo: request.callData,\\n overrides: {\\n callGasLimit: request.callGasLimit,\\n verificationGasLimit: request.verificationGasLimit,\\n preVerificationGas: request.preVerificationGas,\\n maxFeePerGas: request.maxFeePerGas,\\n maxPriorityFeePerGas: request.maxPriorityFeePerGas,\\n },\\n context: {\\n aggregatedSignature,\\n signatures: [firstSig, secondSig],\\n userOpSignatureType: \\\"UPPERLIMIT\\\",\\n },\\n});\\n```\\n\\n```ts twoslash [client.ts] filename=\\\"client.ts\\\"\\n// [!include ~/shared/smart-contracts/multisig-client.ts]\\n```\\n\\n:::\\n\\n## Conclusion\\n\\nThat's it! You've initialized a modular account with three multisig members, proposed a user operation, collected the necessary signatures, and sent the user operation to the bundler.\\n\\nFor more info, check out the [technical details](/smart-contracts/modular-account/multisig-plugin/details) of the multisig plugin.\\n\",\"document\":[{\"href\":\"/smart-contracts/modular-account/multisig-plugin/getting-started#getting-started-with-the-multisig-plugin\",\"html\":\"\\n\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/getting-started.mdx#getting-started-with-the-multisig-plugin\",\"isPage\":true,\"text\":\"\\n\",\"title\":\"Getting started with the Multisig Plugin\",\"titles\":[]},{\"href\":\"/smart-contracts/modular-account/multisig-plugin/getting-started#1-create-a-multisig-account-client\",\"html\":\"\\n

Initialize a Multisig Modular Account client and set the n accounts as signers.

\\n\\n
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/getting-started.mdx#1-create-a-multisig-account-client\",\"isPage\":false,\"text\":\"\\nInitialize a Multisig Modular Account client and set the n accounts as signers.\\nIt is recommended to use the createMultisigAccountAlchemyClient directly to create new accounts with multi-sig ownership, rather than extending the Modular Account client.If you have an existing Modular Account (which has multi-owner plugin by default), please see details here for installing the plugin before proceeding.\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"1. Create a Multisig Account Client\",\"titles\":[\"Getting started with the Multisig Plugin\"]},{\"href\":\"/smart-contracts/modular-account/multisig-plugin/getting-started#3-propose-a-user-operation\",\"html\":\"\\n

To propose a new user operation for review by the multisig signers, you will use the proposeUserOperation method. This estimates gas, constructs the user operation struct, and if gasManagerConfig is used then it attempts to use a paymaster. Lastly, a signature is generated with the pre-provided signer.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { multisigAccountClient } from "./client";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst {\\n  request,\\n  aggregatedSignature,\\n  signatureObj: firstSig,\\n} = await multisigAccountClient.proposeUserOperation({\\n  uo: {\\n    target: targetAddress,\\n    data: "0x",\\n  },\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/getting-started.mdx#3-propose-a-user-operation\",\"isPage\":false,\"text\":\"\\nTo propose a new user operation for review by the multisig signers, you will use the proposeUserOperation method. This estimates gas, constructs the user operation struct, and if gasManagerConfig is used then it attempts to use a paymaster. Lastly, a signature is generated with the pre-provided signer.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { multisigAccountClient } from "./client";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst {\\n request,\\n aggregatedSignature,\\n signatureObj: firstSig,\\n} = await multisigAccountClient.proposeUserOperation({\\n uo: {\\n target: targetAddress,\\n data: "0x",\\n },\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"3. Propose a User Operation\",\"titles\":[\"Getting started with the Multisig Plugin\"]},{\"href\":\"/smart-contracts/modular-account/multisig-plugin/getting-started#4-get-the-threshold-signatures\",\"html\":\"\\n

Next, you have to collect the next k-2 signatures, excluding the first signature which you already provided and the last signature which we'll deal with in step 5 when we send the user operation. Each member of the multisig can sign with the signMultisigUserOperation method.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { signers, owners, threshold } from "./client";\\n \\nconst multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain,\\n  signer: signers[1], // using the second signer\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n \\nconst { aggregatedSignature, signatureObj: secondSig } =\\n  await multisigAccountClient.signMultisigUserOperation({\\n    account: multisigAccountClient.account,\\n    // output from step 1, and from this step if k-2 > 1\\n    signatures: [previousAggregatedSignature],\\n    userOperationRequest: request,\\n  });
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/getting-started.mdx#4-get-the-threshold-signatures\",\"isPage\":false,\"text\":\"\\nNext, you have to collect the next k-2 signatures, excluding the first signature which you already provided and the last signature which we'll deal with in step 5 when we send the user operation. Each member of the multisig can sign with the signMultisigUserOperation method.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { signers, owners, threshold } from "./client";\\n \\nconst multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain,\\n signer: signers[1], // using the second signer\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n \\nconst { aggregatedSignature, signatureObj: secondSig } =\\n await multisigAccountClient.signMultisigUserOperation({\\n account: multisigAccountClient.account,\\n // output from step 1, and from this step if k-2 > 1\\n signatures: [previousAggregatedSignature],\\n userOperationRequest: request,\\n });import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"4. Get the threshold signatures\",\"titles\":[\"Getting started with the Multisig Plugin\"]},{\"href\":\"/smart-contracts/modular-account/multisig-plugin/getting-started#5-send-the-user-operation\",\"html\":\"\\n

After collecting k-1 signatures, you're ready to collect the last signature and send the user operation. This is done with the sendUserOperation method. sendUserOperation also formats this aggregated signature, sorting its parts in ascending order by owner address as expected by the Multisig Plugin smart contract.

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { signers, owners, threshold } from "./client";\\n \\nconst multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain,\\n  // using the last signer\\n  signer: signers[2],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n \\nconst result = await multisigAccountClient.sendUserOperation({\\n  uo: request.callData,\\n  context: {\\n    aggregatedSignature,\\n    signatures: [firstSig, secondSig],\\n    userOpSignatureType: "ACTUAL",\\n  },\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n

By default, we use the variable gas feature in the Multisig Plugin smart contract. For this, we need userOpSignatureType to be set to "ACTUAL". If you do not wish to use this feature, gas overrides should be passed in sendUserOperation, and userOpSignatureType should be set to "UPPERLIMIT".

\\n
// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { multisigAccountClient } from "./client";\\n \\nconst result = await multisigAccountClient.sendUserOperation({\\n  uo: request.callData,\\n  overrides: {\\n    callGasLimit: request.callGasLimit,\\n    verificationGasLimit: request.verificationGasLimit,\\n    preVerificationGas: request.preVerificationGas,\\n    maxFeePerGas: request.maxFeePerGas,\\n    maxPriorityFeePerGas: request.maxPriorityFeePerGas,\\n  },\\n  context: {\\n    aggregatedSignature,\\n    signatures: [firstSig, secondSig],\\n    userOpSignatureType: "UPPERLIMIT",\\n  },\\n});
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 0 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 1 }\\n  ),\\n  LocalAccountSigner.mnemonicToAccountSigner(\\n    MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n    { accountIndex: 2 }\\n  ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n  chain: sepolia,\\n  signer: signers[0],\\n  owners,\\n  threshold,\\n  apiKey: "YOUR_API_KEY",\\n});
\\n\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/getting-started.mdx#5-send-the-user-operation\",\"isPage\":false,\"text\":\"\\nAfter collecting k-1 signatures, you're ready to collect the last signature and send the user operation. This is done with the sendUserOperation method. sendUserOperation also formats this aggregated signature, sorting its parts in ascending order by owner address as expected by the Multisig Plugin smart contract.\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { signers, owners, threshold } from "./client";\\n \\nconst multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain,\\n // using the last signer\\n signer: signers[2],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n \\nconst result = await multisigAccountClient.sendUserOperation({\\n uo: request.callData,\\n context: {\\n aggregatedSignature,\\n signatures: [firstSig, secondSig],\\n userOpSignatureType: "ACTUAL",\\n },\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\nBy default, we use the variable gas feature in the Multisig Plugin smart contract. For this, we need userOpSignatureType to be set to "ACTUAL". If you do not wish to use this feature, gas overrides should be passed in sendUserOperation, and userOpSignatureType should be set to "UPPERLIMIT".\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: client.ts\\n \\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n// @filename: example.js\\n \\n// ---cut---\\nimport { multisigAccountClient } from "./client";\\n \\nconst result = await multisigAccountClient.sendUserOperation({\\n uo: request.callData,\\n overrides: {\\n callGasLimit: request.callGasLimit,\\n verificationGasLimit: request.verificationGasLimit,\\n preVerificationGas: request.preVerificationGas,\\n maxFeePerGas: request.maxFeePerGas,\\n maxPriorityFeePerGas: request.maxPriorityFeePerGas,\\n },\\n context: {\\n aggregatedSignature,\\n signatures: [firstSig, secondSig],\\n userOpSignatureType: "UPPERLIMIT",\\n },\\n});import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC = "YOUR MNEMONIC";\\n \\n// Creating a 3/3 multisig account\\nexport const signers = [\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 0 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 1 }\\n ),\\n LocalAccountSigner.mnemonicToAccountSigner(\\n MODULAR_MULTISIG_ACCOUNT_OWNER_MNEMONIC,\\n { accountIndex: 2 }\\n ),\\n];\\n \\nexport const threshold = 3n;\\n \\nexport const owners = await Promise.all(signers.map((s) => s.getAddress()));\\n \\nexport const multisigAccountClient = await createMultisigAccountAlchemyClient({\\n chain: sepolia,\\n signer: signers[0],\\n owners,\\n threshold,\\n apiKey: "YOUR_API_KEY",\\n});\\n\",\"title\":\"5. Send the User Operation\",\"titles\":[\"Getting started with the Multisig Plugin\"]},{\"href\":\"/smart-contracts/modular-account/multisig-plugin/getting-started#conclusion\",\"html\":\"\\n

That's it! You've initialized a modular account with three multisig members, proposed a user operation, collected the necessary signatures, and sent the user operation to the bundler.

\\n

For more info, check out the technical details of the multisig plugin.

\",\"id\":\"pages/smart-contracts/modular-account/multisig-plugin/getting-started.mdx#conclusion\",\"isPage\":false,\"text\":\"\\nThat's it! You've initialized a modular account with three multisig members, proposed a user operation, collected the necessary signatures, and sent the user operation to the bundler.\\nFor more info, check out the technical details of the multisig plugin.\",\"title\":\"Conclusion\",\"titles\":[\"Getting started with the Multisig Plugin\"]}]}],[\"index.ddcd7910de3f0c24f73be6c3b1cc05803b1dd01ab18862a5bd68e6b2563ee25f\",{\"mdx\":\"---\\ntitle: TODO\\ndescription: TODO\\n---\\n\\nTODO: this should also be autogenerated and just inherit from the README for the given package.\\n\",\"document\":[]}],[\"index.7a0ee5f536f76e43aa5b9e3ac228a84c96b07c0abeeaa471ab482b2d6a68c305\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: asyncPipe\\ndescription: Overview of the asyncPipe method\\n---\\n\\n# asyncPipe\\n\\nUtility function that allows for piping a series of async functions together\\n\\n## Import\\n\\n```ts\\nimport { asyncPipe } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### fns\\n\\n`((s: S, o?: O, f?: F) => Promise)[]`\\n\\n- functions to pipe\\n\\n## Returns\\n\\n`S`\\nresult of the pipe\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/asyncPipe#asyncpipe\",\"html\":\"\\n

Utility function that allows for piping a series of async functions together

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/asyncPipe.mdx#asyncpipe\",\"isPage\":true,\"text\":\"\\nUtility function that allows for piping a series of async functions together\\n\",\"title\":\"asyncPipe\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/asyncPipe#import\",\"html\":\"\\n
import { asyncPipe } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/asyncPipe.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { asyncPipe } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"asyncPipe\"]},{\"href\":\"/reference/aa-sdk/core/functions/asyncPipe#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/asyncPipe.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"asyncPipe\"]},{\"href\":\"/reference/aa-sdk/core/functions/asyncPipe#fns\",\"html\":\"\\n

((s: S, o?: O, f?: F) => Promise<S>)[]

\\n
    \\n
  • functions to pipe
  • \\n
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/asyncPipe.mdx#fns\",\"isPage\":false,\"text\":\"\\n((s: S, o?: O, f?: F) => Promise<S>)[]\\n\\nfunctions to pipe\\n\\n\",\"title\":\"fns\",\"titles\":[\"asyncPipe\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/asyncPipe#returns\",\"html\":\"\\n

S\\nresult of the pipe

\",\"id\":\"pages/reference/aa-sdk/core/functions/asyncPipe.mdx#returns\",\"isPage\":false,\"text\":\"\\nS\\nresult of the pipe\",\"title\":\"Returns\",\"titles\":[\"asyncPipe\"]}]}],[\"index.50e540397a06f4ee7c81011cf4c3bd5e1a6daed8a75ff1ca9f3484ec499fec30\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: buildUserOperationFromTxs\\ndescription: Overview of the buildUserOperationFromTxs method\\n---\\n\\n# buildUserOperationFromTxs\\n\\nPerforms `buildUserOperationFromTx` in batch and builds into a single,\\nyet to be signed `UserOperation` (UO) struct. The output user operation struct\\nwill be filled with all gas fields (and paymaster data if a paymaster is used)\\nbased on the transactions data (`to`, `data`, `value`, `maxFeePerGas`,\\n`maxPriorityFeePerGas`) computed using the configured ClientMiddlewares on the SmartAccountClient.\\n\\n## Import\\n\\n```ts\\nimport { buildUserOperationFromTxs } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport type { RpcTransactionRequest } from \\\"viem\\\";\\nimport { smartAccountClient } from \\\"./smartAccountClient\\\";\\n\\nconst requests: RpcTransactionRequest[] = [\\n{\\nfrom, // ignored\\nto,\\ndata: encodeFunctionData({\\n abi: ContractABI.abi,\\n functionName: \\\"func\\\",\\n args: [arg1, arg2, ...],\\n}),\\n},\\n{\\nfrom, // ignored\\nto,\\ndata: encodeFunctionData({\\n abi: ContractABI.abi,\\n functionName: \\\"func\\\",\\n args: [arg1, arg2, ...],\\n}),\\n},\\n];\\nconst uoStruct = await smartAccountClient.buildUserOperationFromTxs({\\nrequests,\\n});\\n\\n// signUserOperation signs the above unsigned user operation struct built\\n// using the account connected to the smart account client\\nconst request = await smartAccountClient.signUserOperation({ uoStruct });\\n\\n// You can use the BundlerAction `sendRawUserOperation` (packages/core/src/actions/bundler/sendRawUserOperation.ts)\\n// to send the signed user operation request to the bundler, requesting the bundler to send the signed uo to the\\n// EntryPoint contract pointed at by the entryPoint address parameter\\nconst entryPointAddress = client.account.getEntryPoint().address;\\nconst uoHash = await smartAccountClient.sendRawUserOperation({\\nrequest,\\nentryPoint: entryPointAddress,\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nthe smart account client to use to make RPC calls\\n\\n### args\\n\\n`BuildTransactionParameters`\\nan object containing the requests to build as well as, the account if not hoisted, the context, the overrides, and optionally a flag to enable signing of the UO via the underlying middleware\\n\\n## Returns\\n\\n`Promise>`\\na Promise containing the built user operation\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTxs#builduseroperationfromtxs\",\"html\":\"\\n

Performs buildUserOperationFromTx in batch and builds into a single,\\nyet to be signed UserOperation (UO) struct. The output user operation struct\\nwill be filled with all gas fields (and paymaster data if a paymaster is used)\\nbased on the transactions data (to, data, value, maxFeePerGas,\\nmaxPriorityFeePerGas) computed using the configured ClientMiddlewares on the SmartAccountClient.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTxs.mdx#builduseroperationfromtxs\",\"isPage\":true,\"text\":\"\\nPerforms buildUserOperationFromTx in batch and builds into a single,\\nyet to be signed UserOperation (UO) struct. The output user operation struct\\nwill be filled with all gas fields (and paymaster data if a paymaster is used)\\nbased on the transactions data (to, data, value, maxFeePerGas,\\nmaxPriorityFeePerGas) computed using the configured ClientMiddlewares on the SmartAccountClient.\\n\",\"title\":\"buildUserOperationFromTxs\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTxs#import\",\"html\":\"\\n
import { buildUserOperationFromTxs } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTxs.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { buildUserOperationFromTxs } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"buildUserOperationFromTxs\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTxs#usage\",\"html\":\"\\n
import type { RpcTransactionRequest } from "viem";\\nimport { smartAccountClient } from "./smartAccountClient";\\n \\nconst requests: RpcTransactionRequest[] = [\\n{\\nfrom, // ignored\\nto,\\ndata: encodeFunctionData({\\n  abi: ContractABI.abi,\\n  functionName: "func",\\n  args: [arg1, arg2, ...],\\n}),\\n},\\n{\\nfrom, // ignored\\nto,\\ndata: encodeFunctionData({\\n  abi: ContractABI.abi,\\n  functionName: "func",\\n  args: [arg1, arg2, ...],\\n}),\\n},\\n];\\nconst uoStruct = await smartAccountClient.buildUserOperationFromTxs({\\nrequests,\\n});\\n \\n// signUserOperation signs the above unsigned user operation struct built\\n// using the account connected to the smart account client\\nconst request = await smartAccountClient.signUserOperation({ uoStruct });\\n \\n// You can use the BundlerAction `sendRawUserOperation` (packages/core/src/actions/bundler/sendRawUserOperation.ts)\\n// to send the signed user operation request to the bundler, requesting the bundler to send the signed uo to the\\n// EntryPoint contract pointed at by the entryPoint address parameter\\nconst entryPointAddress = client.account.getEntryPoint().address;\\nconst uoHash = await smartAccountClient.sendRawUserOperation({\\nrequest,\\nentryPoint: entryPointAddress,\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTxs.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport type { RpcTransactionRequest } from "viem";\\nimport { smartAccountClient } from "./smartAccountClient";\\n \\nconst requests: RpcTransactionRequest[] = [\\n{\\nfrom, // ignored\\nto,\\ndata: encodeFunctionData({\\n abi: ContractABI.abi,\\n functionName: "func",\\n args: [arg1, arg2, ...],\\n}),\\n},\\n{\\nfrom, // ignored\\nto,\\ndata: encodeFunctionData({\\n abi: ContractABI.abi,\\n functionName: "func",\\n args: [arg1, arg2, ...],\\n}),\\n},\\n];\\nconst uoStruct = await smartAccountClient.buildUserOperationFromTxs({\\nrequests,\\n});\\n \\n// signUserOperation signs the above unsigned user operation struct built\\n// using the account connected to the smart account client\\nconst request = await smartAccountClient.signUserOperation({ uoStruct });\\n \\n// You can use the BundlerAction `sendRawUserOperation` (packages/core/src/actions/bundler/sendRawUserOperation.ts)\\n// to send the signed user operation request to the bundler, requesting the bundler to send the signed uo to the\\n// EntryPoint contract pointed at by the entryPoint address parameter\\nconst entryPointAddress = client.account.getEntryPoint().address;\\nconst uoHash = await smartAccountClient.sendRawUserOperation({\\nrequest,\\nentryPoint: entryPointAddress,\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"buildUserOperationFromTxs\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTxs#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTxs.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"buildUserOperationFromTxs\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTxs#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nthe smart account client to use to make RPC calls

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTxs.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nthe smart account client to use to make RPC calls\\n\",\"title\":\"client\",\"titles\":[\"buildUserOperationFromTxs\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTxs#args\",\"html\":\"\\n

BuildTransactionParameters\\nan object containing the requests to build as well as, the account if not hoisted, the context, the overrides, and optionally a flag to enable signing of the UO via the underlying middleware

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTxs.mdx#args\",\"isPage\":false,\"text\":\"\\nBuildTransactionParameters\\nan object containing the requests to build as well as, the account if not hoisted, the context, the overrides, and optionally a flag to enable signing of the UO via the underlying middleware\\n\",\"title\":\"args\",\"titles\":[\"buildUserOperationFromTxs\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/buildUserOperationFromTxs#returns\",\"html\":\"\\n

Promise<BuildUserOperationFromTransactionsResult<TEntryPointVersion>>\\na Promise containing the built user operation

\",\"id\":\"pages/reference/aa-sdk/core/functions/buildUserOperationFromTxs.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<BuildUserOperationFromTransactionsResult<TEntryPointVersion>>\\na Promise containing the built user operation\",\"title\":\"Returns\",\"titles\":[\"buildUserOperationFromTxs\"]}]}],[\"index.3ef65b3633eb2f204d032ff14c590250127f49ae54ddf4967f0454e769d58d31\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createSmartAccountClient\\ndescription: Overview of the createSmartAccountClient method\\n---\\n\\n# createSmartAccountClient\\n\\nCreates a smart account client using the provided configuration. This client handles various Ethereum transactions and message signing operations.\\n\\n## Import\\n\\n```ts\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createSmartAccountClient, toSmartContractAccount } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createSmartAccountClient({\\nchain: sepolia,\\ntransport: http(\\\"RPC_URL\\\"),\\n// optionally hoist the account\\naccount: toSmartContractAccount(...),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`SmartAccountClientConfig`\\nThe configuration for creating the smart account client\\n\\n## Returns\\n\\n`SmartAccountClient`\\nA smart account client capable of handling transactions, message signing, and other operations on a smart account\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClient#createsmartaccountclient\",\"html\":\"\\n

Creates a smart account client using the provided configuration. This client handles various Ethereum transactions and message signing operations.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClient.mdx#createsmartaccountclient\",\"isPage\":true,\"text\":\"\\nCreates a smart account client using the provided configuration. This client handles various Ethereum transactions and message signing operations.\\n\",\"title\":\"createSmartAccountClient\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClient#import\",\"html\":\"\\n
import { createSmartAccountClient } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"createSmartAccountClient\"]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClient#usage\",\"html\":\"\\n
import { createSmartAccountClient, toSmartContractAccount } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst client = createSmartAccountClient({\\nchain: sepolia,\\ntransport: http("RPC_URL"),\\n// optionally hoist the account\\naccount: toSmartContractAccount(...),\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient, toSmartContractAccount } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst client = createSmartAccountClient({\\nchain: sepolia,\\ntransport: http("RPC_URL"),\\n// optionally hoist the account\\naccount: toSmartContractAccount(...),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createSmartAccountClient\"]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createSmartAccountClient\"]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClient#config\",\"html\":\"\\n

SmartAccountClientConfig\\nThe configuration for creating the smart account client

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClient.mdx#config\",\"isPage\":false,\"text\":\"\\nSmartAccountClientConfig\\nThe configuration for creating the smart account client\\n\",\"title\":\"config\",\"titles\":[\"createSmartAccountClient\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClient#returns\",\"html\":\"\\n

SmartAccountClient\\nA smart account client capable of handling transactions, message signing, and other operations on a smart account

\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nSmartAccountClient\\nA smart account client capable of handling transactions, message signing, and other operations on a smart account\",\"title\":\"Returns\",\"titles\":[\"createSmartAccountClient\"]}]}],[\"index.96adf7c01a4b96939c507ffb8c8ea5c1483ad6af618c881b30fcb9e816382b69\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: defaultFeeEstimator\\ndescription: Overview of the defaultFeeEstimator method\\n---\\n\\n# defaultFeeEstimator\\n\\nDefault fee estimator middleware function that estimates the maximum fee per gas and maximum priority fee per gas for a given client and applies the necessary overrides and fee options.\\n\\n## Import\\n\\n```ts\\nimport { defaultFeeEstimator } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createSmartAccountClient, defaultFeeEstimator, createBundlerClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createBundlerClient(...);\\n\\n// NOTE: this is already provided by the smart account client\\nconst client = createSmartAccountClient({\\nfeeEstimator: defaultFeeEstimator(bundlerClient),\\n...otherParams\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`C`\\nThe client to perform the fee estimation\\n\\n## Returns\\n\\n`ClientMiddlewareFn`\\nA middleware function that takes in the struct and options, estimates the fees, and updates the struct with the estimated fees\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/defaultFeeEstimator#defaultfeeestimator\",\"html\":\"\\n

Default fee estimator middleware function that estimates the maximum fee per gas and maximum priority fee per gas for a given client and applies the necessary overrides and fee options.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultFeeEstimator.mdx#defaultfeeestimator\",\"isPage\":true,\"text\":\"\\nDefault fee estimator middleware function that estimates the maximum fee per gas and maximum priority fee per gas for a given client and applies the necessary overrides and fee options.\\n\",\"title\":\"defaultFeeEstimator\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/defaultFeeEstimator#import\",\"html\":\"\\n
import { defaultFeeEstimator } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultFeeEstimator.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { defaultFeeEstimator } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"defaultFeeEstimator\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultFeeEstimator#usage\",\"html\":\"\\n
import { createSmartAccountClient, defaultFeeEstimator, createBundlerClient } from "@aa-sdk/core";\\n \\nconst bundlerClient = createBundlerClient(...);\\n \\n// NOTE: this is already provided by the smart account client\\nconst client = createSmartAccountClient({\\nfeeEstimator: defaultFeeEstimator(bundlerClient),\\n...otherParams\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultFeeEstimator.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient, defaultFeeEstimator, createBundlerClient } from "@aa-sdk/core";\\n \\nconst bundlerClient = createBundlerClient(...);\\n \\n// NOTE: this is already provided by the smart account client\\nconst client = createSmartAccountClient({\\nfeeEstimator: defaultFeeEstimator(bundlerClient),\\n...otherParams\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"defaultFeeEstimator\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultFeeEstimator#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultFeeEstimator.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"defaultFeeEstimator\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultFeeEstimator#client\",\"html\":\"\\n

C\\nThe client to perform the fee estimation

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultFeeEstimator.mdx#client\",\"isPage\":false,\"text\":\"\\nC\\nThe client to perform the fee estimation\\n\",\"title\":\"client\",\"titles\":[\"defaultFeeEstimator\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultFeeEstimator#returns\",\"html\":\"\\n

ClientMiddlewareFn\\nA middleware function that takes in the struct and options, estimates the fees, and updates the struct with the estimated fees

\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultFeeEstimator.mdx#returns\",\"isPage\":false,\"text\":\"\\nClientMiddlewareFn\\nA middleware function that takes in the struct and options, estimates the fees, and updates the struct with the estimated fees\",\"title\":\"Returns\",\"titles\":[\"defaultFeeEstimator\"]}]}],[\"index.8470d4f4ede59afa409ca7c03db1ff941d5e1082bebacae5861b4c6c0f08bde1\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: defaultUserOpSigner\\ndescription: Overview of the defaultUserOpSigner method\\n---\\n\\n# defaultUserOpSigner\\n\\nProvides a default middleware function for signing user operations with a client account. This function validates the request and adds the signature to it.\\nThis is already included in the client returned from `createSmartAccountClient`\\n\\n## Import\\n\\n```ts\\nimport { defaultUserOpSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### struct\\n\\n`UserOperationStruct`\\nThe user operation structure to be signed\\n\\n### context\\n\\n`*`\\nThe middleware context containing the client and account information\\n\\n### context.client\\n\\n`Client`\\nThe client object, which should include account and chain information\\n\\n### context.account\\n\\n`Account`\\nOptional, the account used for signing, defaults to the client's account if not provided\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the signed user operation structure\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/defaultUserOpSigner#defaultuseropsigner\",\"html\":\"\\n

Provides a default middleware function for signing user operations with a client account. This function validates the request and adds the signature to it.\\nThis is already included in the client returned from createSmartAccountClient

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultUserOpSigner.mdx#defaultuseropsigner\",\"isPage\":true,\"text\":\"\\nProvides a default middleware function for signing user operations with a client account. This function validates the request and adds the signature to it.\\nThis is already included in the client returned from createSmartAccountClient\\n\",\"title\":\"defaultUserOpSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/defaultUserOpSigner#import\",\"html\":\"\\n
import { defaultUserOpSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultUserOpSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { defaultUserOpSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"defaultUserOpSigner\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultUserOpSigner#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultUserOpSigner.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"defaultUserOpSigner\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultUserOpSigner#struct\",\"html\":\"\\n

UserOperationStruct\\nThe user operation structure to be signed

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultUserOpSigner.mdx#struct\",\"isPage\":false,\"text\":\"\\nUserOperationStruct\\nThe user operation structure to be signed\\n\",\"title\":\"struct\",\"titles\":[\"defaultUserOpSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultUserOpSigner#context\",\"html\":\"\\n

*\\nThe middleware context containing the client and account information

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultUserOpSigner.mdx#context\",\"isPage\":false,\"text\":\"\\n*\\nThe middleware context containing the client and account information\\n\",\"title\":\"context\",\"titles\":[\"defaultUserOpSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultUserOpSigner#contextclient\",\"html\":\"\\n

Client\\nThe client object, which should include account and chain information

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultUserOpSigner.mdx#contextclient\",\"isPage\":false,\"text\":\"\\nClient\\nThe client object, which should include account and chain information\\n\",\"title\":\"context.client\",\"titles\":[\"defaultUserOpSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultUserOpSigner#contextaccount\",\"html\":\"\\n

Account\\nOptional, the account used for signing, defaults to the client's account if not provided

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultUserOpSigner.mdx#contextaccount\",\"isPage\":false,\"text\":\"\\nAccount\\nOptional, the account used for signing, defaults to the client's account if not provided\\n\",\"title\":\"context.account\",\"titles\":[\"defaultUserOpSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultUserOpSigner#returns\",\"html\":\"\\n

Promise<UserOperationStruct>\\nA promise that resolves to the signed user operation structure

\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultUserOpSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<UserOperationStruct>\\nA promise that resolves to the signed user operation structure\",\"title\":\"Returns\",\"titles\":[\"defaultUserOpSigner\"]}]}],[\"index.354e106d14e5c8b69bdda671ed970455ab685d99470074d03a0dabd35a7abb7d\",{\"mdx\":\"---\\ntitle: TODO\\ndescription: TODO\\n---\\n\\nTODO: this should also be autogenerated and just inherit from the README for the given package.\\n\",\"document\":[]}],[\"index.48579b5b4f67893c136e5309127451f8321868fe71c14a4059f28df365a2a5a6\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: defaultGasEstimator\\ndescription: Overview of the defaultGasEstimator method\\n---\\n\\n# defaultGasEstimator\\n\\nDescription default gas estimator middleware for `SmartAccountClient`\\nYou can override this middleware with your custom gas estimator middleware\\nby passing it to the client constructor\\n\\n## Import\\n\\n```ts\\nimport { defaultGasEstimator } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`MiddlewareClient`\\nsmart account client instance to apply the middleware to\\n\\n## Returns\\n\\n`ClientMiddlewareFn`\\nmiddleware execution function used to estimate gas for user operations\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/defaultGasEstimator#defaultgasestimator\",\"html\":\"\\n

Description default gas estimator middleware for SmartAccountClient\\nYou can override this middleware with your custom gas estimator middleware\\nby passing it to the client constructor

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultGasEstimator.mdx#defaultgasestimator\",\"isPage\":true,\"text\":\"\\nDescription default gas estimator middleware for SmartAccountClient\\nYou can override this middleware with your custom gas estimator middleware\\nby passing it to the client constructor\\n\",\"title\":\"defaultGasEstimator\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/defaultGasEstimator#import\",\"html\":\"\\n
import { defaultGasEstimator } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultGasEstimator.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { defaultGasEstimator } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"defaultGasEstimator\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultGasEstimator#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultGasEstimator.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"defaultGasEstimator\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultGasEstimator#client\",\"html\":\"\\n

MiddlewareClient\\nsmart account client instance to apply the middleware to

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultGasEstimator.mdx#client\",\"isPage\":false,\"text\":\"\\nMiddlewareClient\\nsmart account client instance to apply the middleware to\\n\",\"title\":\"client\",\"titles\":[\"defaultGasEstimator\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultGasEstimator#returns\",\"html\":\"\\n

ClientMiddlewareFn\\nmiddleware execution function used to estimate gas for user operations

\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultGasEstimator.mdx#returns\",\"isPage\":false,\"text\":\"\\nClientMiddlewareFn\\nmiddleware execution function used to estimate gas for user operations\",\"title\":\"Returns\",\"titles\":[\"defaultGasEstimator\"]}]}],[\"index.7487cb02fd04a0686489b41cb09659ff7a09799adc65e41e13836f50573efe6a\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createSmartAccountClientFromExisting\\ndescription: Overview of the createSmartAccountClientFromExisting method\\n---\\n\\n# createSmartAccountClientFromExisting\\n\\nCreates a smart account client using an existing client and specific configuration. This function can be used to reuse a pre-existing BundlerClient while customizing other aspects of the smart account.\\n\\n## Import\\n\\n```ts\\nimport { createSmartAccountClientFromExisting } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport {\\ncreateBundlerClient,\\ncreateSmartAccountClientFromExisting,\\ntoSmartContractAccount\\n} from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createBundlerClient(...);\\nconst client = createSmartAccountClientFromExisting({\\nclient,\\naccount: toSmartContractAccount(...),\\n})\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`Omit & {client: BundlerClient}`\\nthe configuration object which includes the client\\n\\n## Returns\\n\\n`SmartAccountClient`\\nA smart account client created from the existing BundlerClient\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting#createsmartaccountclientfromexisting\",\"html\":\"\\n

Creates a smart account client using an existing client and specific configuration. This function can be used to reuse a pre-existing BundlerClient while customizing other aspects of the smart account.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting.mdx#createsmartaccountclientfromexisting\",\"isPage\":true,\"text\":\"\\nCreates a smart account client using an existing client and specific configuration. This function can be used to reuse a pre-existing BundlerClient while customizing other aspects of the smart account.\\n\",\"title\":\"createSmartAccountClientFromExisting\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting#import\",\"html\":\"\\n
import { createSmartAccountClientFromExisting } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClientFromExisting } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"createSmartAccountClientFromExisting\"]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting#usage\",\"html\":\"\\n
import {\\ncreateBundlerClient,\\ncreateSmartAccountClientFromExisting,\\ntoSmartContractAccount\\n} from "@aa-sdk/core";\\n \\nconst bundlerClient = createBundlerClient(...);\\nconst client = createSmartAccountClientFromExisting({\\nclient,\\naccount: toSmartContractAccount(...),\\n})
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport {\\ncreateBundlerClient,\\ncreateSmartAccountClientFromExisting,\\ntoSmartContractAccount\\n} from "@aa-sdk/core";\\n \\nconst bundlerClient = createBundlerClient(...);\\nconst client = createSmartAccountClientFromExisting({\\nclient,\\naccount: toSmartContractAccount(...),\\n})\\n\",\"title\":\"Usage\",\"titles\":[\"createSmartAccountClientFromExisting\"]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createSmartAccountClientFromExisting\"]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting#config\",\"html\":\"\\n

Omit<SmartAccountClientConfig, "transport" | "chain"> & {client: BundlerClient}\\nthe configuration object which includes the client

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting.mdx#config\",\"isPage\":false,\"text\":\"\\nOmit<SmartAccountClientConfig, "transport" | "chain"> & {client: BundlerClient}\\nthe configuration object which includes the client\\n\",\"title\":\"config\",\"titles\":[\"createSmartAccountClientFromExisting\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting#returns\",\"html\":\"\\n

SmartAccountClient\\nA smart account client created from the existing BundlerClient

\",\"id\":\"pages/reference/aa-sdk/core/functions/createSmartAccountClientFromExisting.mdx#returns\",\"isPage\":false,\"text\":\"\\nSmartAccountClient\\nA smart account client created from the existing BundlerClient\",\"title\":\"Returns\",\"titles\":[\"createSmartAccountClientFromExisting\"]}]}],[\"index.2974eb37c2174ae3da73415ad19ed7335f061671c38cbdf2fe6aecd27fbb9dc7\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: defaultPaymasterAndData\\ndescription: Overview of the defaultPaymasterAndData method\\n---\\n\\n# defaultPaymasterAndData\\n\\nMiddleware function that sets the `paymasterAndData` field in the given struct based on the entry point version of the account.\\nThis is the default used by `createSmartAccountClient` and is not necessary to be used directly.\\n\\n## Import\\n\\n```ts\\nimport { defaultPaymasterAndData } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### struct\\n\\n`UserOperationStruct`\\nthe user operation structure to be modified\\n\\n### context\\n\\n`{ account: Account }`\\nan object containing the account information\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to the modified user operation structure\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/defaultPaymasterAndData#defaultpaymasteranddata\",\"html\":\"\\n

Middleware function that sets the paymasterAndData field in the given struct based on the entry point version of the account.\\nThis is the default used by createSmartAccountClient and is not necessary to be used directly.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultPaymasterAndData.mdx#defaultpaymasteranddata\",\"isPage\":true,\"text\":\"\\nMiddleware function that sets the paymasterAndData field in the given struct based on the entry point version of the account.\\nThis is the default used by createSmartAccountClient and is not necessary to be used directly.\\n\",\"title\":\"defaultPaymasterAndData\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/defaultPaymasterAndData#import\",\"html\":\"\\n
import { defaultPaymasterAndData } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultPaymasterAndData.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { defaultPaymasterAndData } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"defaultPaymasterAndData\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultPaymasterAndData#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultPaymasterAndData.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"defaultPaymasterAndData\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultPaymasterAndData#struct\",\"html\":\"\\n

UserOperationStruct\\nthe user operation structure to be modified

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultPaymasterAndData.mdx#struct\",\"isPage\":false,\"text\":\"\\nUserOperationStruct\\nthe user operation structure to be modified\\n\",\"title\":\"struct\",\"titles\":[\"defaultPaymasterAndData\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultPaymasterAndData#context\",\"html\":\"\\n

{ account: Account }\\nan object containing the account information

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultPaymasterAndData.mdx#context\",\"isPage\":false,\"text\":\"\\n{ account: Account }\\nan object containing the account information\\n\",\"title\":\"context\",\"titles\":[\"defaultPaymasterAndData\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/defaultPaymasterAndData#returns\",\"html\":\"\\n

Promise<UserOperationStruct>\\na promise that resolves to the modified user operation structure

\",\"id\":\"pages/reference/aa-sdk/core/functions/defaultPaymasterAndData.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<UserOperationStruct>\\na promise that resolves to the modified user operation structure\",\"title\":\"Returns\",\"titles\":[\"defaultPaymasterAndData\"]}]}],[\"index.64cc4d8f41a8ade43f2784170bd277db42fc3fe60b3c154fdb7197c1f67dd7f6\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: dropAndReplaceUserOperation\\ndescription: Overview of the dropAndReplaceUserOperation method\\n---\\n\\n# dropAndReplaceUserOperation\\n\\nDrops an existing user operation and replaces it with a new one while ensuring the appropriate fees and overrides are applied.\\n\\n## Import\\n\\n```ts\\nimport { dropAndReplaceUserOperation } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport {\\ncreateSmartAccountClient,\\n} from \\\"@aa-sdk/core\\\";\\n\\n// smart account client is already extended with dropAndReplaceUserOperation\\nconst client = createSmartAccountClient(...);\\nconst { request } = await client.sendUserOperation(...);\\nconst result = await client.dropAndReplaceUserOperation({\\nuoToDrop: request,\\naccount, // only required if the client above is not connected to an account\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance with the transport, chain, and account information\\n\\n### args\\n\\n`DropAndReplaceUserOperationParameters`\\nThe parameters required for dropping and replacing the user operation including the account, operation to drop, overrides, and context\\n\\n## Returns\\n\\n`Promise>`\\nA promise that resolves to the result of sending the new user operation\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/dropAndReplaceUserOperation#dropandreplaceuseroperation\",\"html\":\"\\n

Drops an existing user operation and replaces it with a new one while ensuring the appropriate fees and overrides are applied.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/dropAndReplaceUserOperation.mdx#dropandreplaceuseroperation\",\"isPage\":true,\"text\":\"\\nDrops an existing user operation and replaces it with a new one while ensuring the appropriate fees and overrides are applied.\\n\",\"title\":\"dropAndReplaceUserOperation\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/dropAndReplaceUserOperation#import\",\"html\":\"\\n
import { dropAndReplaceUserOperation } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/dropAndReplaceUserOperation.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { dropAndReplaceUserOperation } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"dropAndReplaceUserOperation\"]},{\"href\":\"/reference/aa-sdk/core/functions/dropAndReplaceUserOperation#usage\",\"html\":\"\\n
import {\\ncreateSmartAccountClient,\\n} from "@aa-sdk/core";\\n \\n// smart account client is already extended with dropAndReplaceUserOperation\\nconst client = createSmartAccountClient(...);\\nconst { request } = await client.sendUserOperation(...);\\nconst result = await client.dropAndReplaceUserOperation({\\nuoToDrop: request,\\naccount, // only required if the client above is not connected to an account\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/dropAndReplaceUserOperation.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport {\\ncreateSmartAccountClient,\\n} from "@aa-sdk/core";\\n \\n// smart account client is already extended with dropAndReplaceUserOperation\\nconst client = createSmartAccountClient(...);\\nconst { request } = await client.sendUserOperation(...);\\nconst result = await client.dropAndReplaceUserOperation({\\nuoToDrop: request,\\naccount, // only required if the client above is not connected to an account\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"dropAndReplaceUserOperation\"]},{\"href\":\"/reference/aa-sdk/core/functions/dropAndReplaceUserOperation#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/dropAndReplaceUserOperation.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"dropAndReplaceUserOperation\"]},{\"href\":\"/reference/aa-sdk/core/functions/dropAndReplaceUserOperation#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client instance with the transport, chain, and account information

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/dropAndReplaceUserOperation.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client instance with the transport, chain, and account information\\n\",\"title\":\"client\",\"titles\":[\"dropAndReplaceUserOperation\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/dropAndReplaceUserOperation#args\",\"html\":\"\\n

DropAndReplaceUserOperationParameters<TAccount, TContext>\\nThe parameters required for dropping and replacing the user operation including the account, operation to drop, overrides, and context

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/dropAndReplaceUserOperation.mdx#args\",\"isPage\":false,\"text\":\"\\nDropAndReplaceUserOperationParameters<TAccount, TContext>\\nThe parameters required for dropping and replacing the user operation including the account, operation to drop, overrides, and context\\n\",\"title\":\"args\",\"titles\":[\"dropAndReplaceUserOperation\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/dropAndReplaceUserOperation#returns\",\"html\":\"\\n

Promise<SendUserOperationResult<TEntryPointVersion>>\\nA promise that resolves to the result of sending the new user operation

\",\"id\":\"pages/reference/aa-sdk/core/functions/dropAndReplaceUserOperation.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SendUserOperationResult<TEntryPointVersion>>\\nA promise that resolves to the result of sending the new user operation\",\"title\":\"Returns\",\"titles\":[\"dropAndReplaceUserOperation\"]}]}],[\"index.25fb14d55062ecaa5b772175a8a37f84ac4931011cd6b78b93baa65cd548114b\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: erc7677Middleware\\ndescription: Overview of the erc7677Middleware method\\n---\\n\\n# erc7677Middleware\\n\\nMiddleware function for interacting with ERC-7677 enabled clients. It supports resolving paymaster and data fields for user operations.\\nThis middleware assumes that your RPC provider supports the ERC-7677 methods (pm_getPaymasterStubData and pm_getPaymasterData).\\n\\n## Import\\n\\n```ts\\nimport { erc7677Middleware } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createSmartAccountClient, erc7677Middleware } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createSmartAccountClient({\\n transport: http(\\\"rpc-url\\\"),\\n chain: sepolia,\\n // this assumes that your RPC provider supports the ERC-7677 methods AND takes no context\\n ...erc7677Middleware(),\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`Erc7677MiddlewareParams`\\nMiddleware parameters including context function or object. Context can be resolved dynamically by passing in a function which takes in the context at the time of sending a user op\\n\\n## Returns\\n\\n`Pick`\\nAn object containing middleware functions `dummyPaymasterAndData` and `paymasterAndData` for processing user operations with the paymaster data\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/erc7677Middleware#erc7677middleware\",\"html\":\"\\n

Middleware function for interacting with ERC-7677 enabled clients. It supports resolving paymaster and data fields for user operations.\\nThis middleware assumes that your RPC provider supports the ERC-7677 methods (pm_getPaymasterStubData and pm_getPaymasterData).

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/erc7677Middleware.mdx#erc7677middleware\",\"isPage\":true,\"text\":\"\\nMiddleware function for interacting with ERC-7677 enabled clients. It supports resolving paymaster and data fields for user operations.\\nThis middleware assumes that your RPC provider supports the ERC-7677 methods (pm_getPaymasterStubData and pm_getPaymasterData).\\n\",\"title\":\"erc7677Middleware\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/erc7677Middleware#import\",\"html\":\"\\n
import { erc7677Middleware } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/erc7677Middleware.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { erc7677Middleware } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"erc7677Middleware\"]},{\"href\":\"/reference/aa-sdk/core/functions/erc7677Middleware#usage\",\"html\":\"\\n
import { createSmartAccountClient, erc7677Middleware } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst client = createSmartAccountClient({\\n  transport: http("rpc-url"),\\n  chain: sepolia,\\n  // this assumes that your RPC provider supports the ERC-7677 methods AND takes no context\\n  ...erc7677Middleware(),\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/erc7677Middleware.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient, erc7677Middleware } from "@aa-sdk/core";\\nimport { http } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst client = createSmartAccountClient({\\n transport: http("rpc-url"),\\n chain: sepolia,\\n // this assumes that your RPC provider supports the ERC-7677 methods AND takes no context\\n ...erc7677Middleware(),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"erc7677Middleware\"]},{\"href\":\"/reference/aa-sdk/core/functions/erc7677Middleware#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/erc7677Middleware.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"erc7677Middleware\"]},{\"href\":\"/reference/aa-sdk/core/functions/erc7677Middleware#params\",\"html\":\"\\n

Erc7677MiddlewareParams<TContext>\\nMiddleware parameters including context function or object. Context can be resolved dynamically by passing in a function which takes in the context at the time of sending a user op

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/erc7677Middleware.mdx#params\",\"isPage\":false,\"text\":\"\\nErc7677MiddlewareParams<TContext>\\nMiddleware parameters including context function or object. Context can be resolved dynamically by passing in a function which takes in the context at the time of sending a user op\\n\",\"title\":\"params\",\"titles\":[\"erc7677Middleware\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/erc7677Middleware#returns\",\"html\":\"\\n

Pick<ClientMiddlewareConfig, "dummyPaymasterAndData" | "paymasterAndData">\\nAn object containing middleware functions dummyPaymasterAndData and paymasterAndData for processing user operations with the paymaster data

\",\"id\":\"pages/reference/aa-sdk/core/functions/erc7677Middleware.mdx#returns\",\"isPage\":false,\"text\":\"\\nPick<ClientMiddlewareConfig, "dummyPaymasterAndData" | "paymasterAndData">\\nAn object containing middleware functions dummyPaymasterAndData and paymasterAndData for processing user operations with the paymaster data\",\"title\":\"Returns\",\"titles\":[\"erc7677Middleware\"]}]}],[\"index.d45821d51d0e17423fe19f2382c1a5dc3f41a95358e3bc2ea0605d38d75d485d\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: filterUndefined\\ndescription: Overview of the filterUndefined method\\n---\\n\\n# filterUndefined\\n\\nFilters out properties with undefined or null values from the provided object.\\n\\n## Import\\n\\n```ts\\nimport { filterUndefined } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { filterUndefined } from \\\"@aa-sdk/core\\\";\\n\\nconst result = filterUndefined({\\n foo: undefined,\\n bar: null,\\n baz: \\\"baz\\\",\\n}); // { baz: \\\"baz\\\" }\\n```\\n\\n## Parameters\\n\\n### obj\\n\\n`T`\\nthe object from which to remove properties with undefined or null values\\n\\n## Returns\\n\\n`T`\\nthe object with undefined or null properties removed\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/filterUndefined#filterundefined\",\"html\":\"\\n

Filters out properties with undefined or null values from the provided object.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/filterUndefined.mdx#filterundefined\",\"isPage\":true,\"text\":\"\\nFilters out properties with undefined or null values from the provided object.\\n\",\"title\":\"filterUndefined\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/filterUndefined#import\",\"html\":\"\\n
import { filterUndefined } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/filterUndefined.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { filterUndefined } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"filterUndefined\"]},{\"href\":\"/reference/aa-sdk/core/functions/filterUndefined#usage\",\"html\":\"\\n
import { filterUndefined } from "@aa-sdk/core";\\n \\nconst result = filterUndefined({\\n  foo: undefined,\\n  bar: null,\\n  baz: "baz",\\n}); // { baz: "baz" }
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/filterUndefined.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { filterUndefined } from "@aa-sdk/core";\\n \\nconst result = filterUndefined({\\n foo: undefined,\\n bar: null,\\n baz: "baz",\\n}); // { baz: "baz" }\\n\",\"title\":\"Usage\",\"titles\":[\"filterUndefined\"]},{\"href\":\"/reference/aa-sdk/core/functions/filterUndefined#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/filterUndefined.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"filterUndefined\"]},{\"href\":\"/reference/aa-sdk/core/functions/filterUndefined#obj\",\"html\":\"\\n

T\\nthe object from which to remove properties with undefined or null values

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/filterUndefined.mdx#obj\",\"isPage\":false,\"text\":\"\\nT\\nthe object from which to remove properties with undefined or null values\\n\",\"title\":\"obj\",\"titles\":[\"filterUndefined\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/filterUndefined#returns\",\"html\":\"\\n

T\\nthe object with undefined or null properties removed

\",\"id\":\"pages/reference/aa-sdk/core/functions/filterUndefined.mdx#returns\",\"isPage\":false,\"text\":\"\\nT\\nthe object with undefined or null properties removed\",\"title\":\"Returns\",\"titles\":[\"filterUndefined\"]}]}],[\"index.a947fd658994353107bc82849634fe75badcb0b715054fb4e090a5efeb878d6c\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: parseFactoryAddressFromAccountInitCode\\ndescription: Overview of the parseFactoryAddressFromAccountInitCode method\\n---\\n\\n# parseFactoryAddressFromAccountInitCode\\n\\nParses the factory address and factory calldata from the provided account initialization code (initCode).\\n\\n## Import\\n\\n```ts\\nimport { parseFactoryAddressFromAccountInitCode } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { parseFactoryAddressFromAccountInitCode } from \\\"@aa-sdk/core\\\";\\n\\nconst [address, calldata] =\\n parseFactoryAddressFromAccountInitCode(\\\"0xAddressCalldata\\\");\\n```\\n\\n## Parameters\\n\\n### initCode\\n\\n`Hex`\\nThe initialization code from which to parse the factory address and calldata\\n\\n## Returns\\n\\n`[Address, Hex]`\\nA tuple containing the parsed factory address and factory calldata\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode#parsefactoryaddressfromaccountinitcode\",\"html\":\"\\n

Parses the factory address and factory calldata from the provided account initialization code (initCode).

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode.mdx#parsefactoryaddressfromaccountinitcode\",\"isPage\":true,\"text\":\"\\nParses the factory address and factory calldata from the provided account initialization code (initCode).\\n\",\"title\":\"parseFactoryAddressFromAccountInitCode\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode#import\",\"html\":\"\\n
import { parseFactoryAddressFromAccountInitCode } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { parseFactoryAddressFromAccountInitCode } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"parseFactoryAddressFromAccountInitCode\"]},{\"href\":\"/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode#usage\",\"html\":\"\\n
import { parseFactoryAddressFromAccountInitCode } from "@aa-sdk/core";\\n \\nconst [address, calldata] =\\n  parseFactoryAddressFromAccountInitCode("0xAddressCalldata");
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { parseFactoryAddressFromAccountInitCode } from "@aa-sdk/core";\\n \\nconst [address, calldata] =\\n parseFactoryAddressFromAccountInitCode("0xAddressCalldata");\\n\",\"title\":\"Usage\",\"titles\":[\"parseFactoryAddressFromAccountInitCode\"]},{\"href\":\"/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"parseFactoryAddressFromAccountInitCode\"]},{\"href\":\"/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode#initcode\",\"html\":\"\\n

Hex\\nThe initialization code from which to parse the factory address and calldata

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode.mdx#initcode\",\"isPage\":false,\"text\":\"\\nHex\\nThe initialization code from which to parse the factory address and calldata\\n\",\"title\":\"initCode\",\"titles\":[\"parseFactoryAddressFromAccountInitCode\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode#returns\",\"html\":\"\\n

[Address, Hex]\\nA tuple containing the parsed factory address and factory calldata

\",\"id\":\"pages/reference/aa-sdk/core/functions/parseFactoryAddressFromAccountInitCode.mdx#returns\",\"isPage\":false,\"text\":\"\\n[Address, Hex]\\nA tuple containing the parsed factory address and factory calldata\",\"title\":\"Returns\",\"titles\":[\"parseFactoryAddressFromAccountInitCode\"]}]}],[\"index.68f2e013a32366cf766d8d7a32aa8b5b5ced6d8ac19579acbe68b738e9db2e22\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: isEntryPointVersion\\ndescription: Overview of the isEntryPointVersion method\\n---\\n\\n# isEntryPointVersion\\n\\nChecks if the given value is a valid key of the EntryPointRegistry.\\n\\n## Import\\n\\n```ts\\nimport { isEntryPointVersion } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { isEntryPointVersion } from \\\"@aa-sdk/core\\\";\\n\\nconst valid = isEntryPointVersion(\\\"0.6.0\\\");\\nconst invalid = isEntryPointVersion(\\\"0.8.0\\\");\\n```\\n\\n## Parameters\\n\\n### value\\n\\n`*`\\nThe value to be checked\\n\\n## Returns\\n\\n`boolean`\\ntrue if the value is a valid key of EntryPointRegistry, false otherwise\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/isEntryPointVersion#isentrypointversion\",\"html\":\"\\n

Checks if the given value is a valid key of the EntryPointRegistry.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isEntryPointVersion.mdx#isentrypointversion\",\"isPage\":true,\"text\":\"\\nChecks if the given value is a valid key of the EntryPointRegistry.\\n\",\"title\":\"isEntryPointVersion\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/isEntryPointVersion#import\",\"html\":\"\\n
import { isEntryPointVersion } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isEntryPointVersion.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { isEntryPointVersion } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"isEntryPointVersion\"]},{\"href\":\"/reference/aa-sdk/core/functions/isEntryPointVersion#usage\",\"html\":\"\\n
import { isEntryPointVersion } from "@aa-sdk/core";\\n \\nconst valid = isEntryPointVersion("0.6.0");\\nconst invalid = isEntryPointVersion("0.8.0");
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isEntryPointVersion.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { isEntryPointVersion } from "@aa-sdk/core";\\n \\nconst valid = isEntryPointVersion("0.6.0");\\nconst invalid = isEntryPointVersion("0.8.0");\\n\",\"title\":\"Usage\",\"titles\":[\"isEntryPointVersion\"]},{\"href\":\"/reference/aa-sdk/core/functions/isEntryPointVersion#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isEntryPointVersion.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"isEntryPointVersion\"]},{\"href\":\"/reference/aa-sdk/core/functions/isEntryPointVersion#value\",\"html\":\"\\n

*\\nThe value to be checked

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isEntryPointVersion.mdx#value\",\"isPage\":false,\"text\":\"\\n*\\nThe value to be checked\\n\",\"title\":\"value\",\"titles\":[\"isEntryPointVersion\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/isEntryPointVersion#returns\",\"html\":\"\\n

boolean\\ntrue if the value is a valid key of EntryPointRegistry, false otherwise

\",\"id\":\"pages/reference/aa-sdk/core/functions/isEntryPointVersion.mdx#returns\",\"isPage\":false,\"text\":\"\\nboolean\\ntrue if the value is a valid key of EntryPointRegistry, false otherwise\",\"title\":\"Returns\",\"titles\":[\"isEntryPointVersion\"]}]}],[\"index.7ecaf01f8282d8620cb4d05172b709c08d9a6715358235016cea6592e3ae592f\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: convertEthersSignerToAccountSigner\\ndescription: Overview of the convertEthersSignerToAccountSigner method\\n---\\n\\n# convertEthersSignerToAccountSigner\\n\\nConverts a ethers.js Signer to a SmartAccountSigner\\n\\n## Import\\n\\n```ts\\nimport { convertEthersSignerToAccountSigner } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Parameters\\n\\n### signer\\n\\n`Signer`\\n\\n- the Signer to convert\\n\\n## Returns\\n\\n`SmartAccountSigner`\\na signer that can be used to sign and send user operations\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner#convertetherssignertoaccountsigner\",\"html\":\"\\n

Converts a ethers.js Signer to a SmartAccountSigner

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner.mdx#convertetherssignertoaccountsigner\",\"isPage\":true,\"text\":\"\\nConverts a ethers.js Signer to a SmartAccountSigner\\n\",\"title\":\"convertEthersSignerToAccountSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner#import\",\"html\":\"\\n
import { convertEthersSignerToAccountSigner } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { convertEthersSignerToAccountSigner } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"convertEthersSignerToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"convertEthersSignerToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner#signer\",\"html\":\"\\n

Signer

\\n
    \\n
  • the Signer to convert
  • \\n
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner.mdx#signer\",\"isPage\":false,\"text\":\"\\nSigner\\n\\nthe Signer to convert\\n\\n\",\"title\":\"signer\",\"titles\":[\"convertEthersSignerToAccountSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner#returns\",\"html\":\"\\n

SmartAccountSigner<Signer>\\na signer that can be used to sign and send user operations

\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertEthersSignerToAccountSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\nSmartAccountSigner<Signer>\\na signer that can be used to sign and send user operations\",\"title\":\"Returns\",\"titles\":[\"convertEthersSignerToAccountSigner\"]}]}],[\"index.15c6ed02ba1c25e3b4ea66684e3e96068d01dd3a6bcc28b3ef5b897d6fc5beb0\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getEntryPoint\\ndescription: Overview of the getEntryPoint method\\n---\\n\\n# getEntryPoint\\n\\nRetrieves the entry point definition for the specified chain and version, falling back to the default version if not provided. Throws an error if the entry point address cannot be found.\\n\\n## Import\\n\\n```ts\\nimport { getEntryPoint } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getEntryPoint } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst entryPoint060 = getEntryPoint(sepolia);\\nconst entryPoint070 = getEntryPoint(sepolia, { version: \\\"0.7.0\\\" });\\n```\\n\\n## Parameters\\n\\n### chain\\n\\n`Chain`\\nThe chain for which the entry point is being retrieved\\n\\n### options\\n\\n`GetEntryPointOptions`\\nOptions containing the version and address overrides for the entry point\\n\\n## Returns\\n\\n`EntryPointDefRegistry[EntryPointVersion]`\\nThe entry point definition for the specified chain and version\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/getEntryPoint#getentrypoint\",\"html\":\"\\n

Retrieves the entry point definition for the specified chain and version, falling back to the default version if not provided. Throws an error if the entry point address cannot be found.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getEntryPoint.mdx#getentrypoint\",\"isPage\":true,\"text\":\"\\nRetrieves the entry point definition for the specified chain and version, falling back to the default version if not provided. Throws an error if the entry point address cannot be found.\\n\",\"title\":\"getEntryPoint\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/getEntryPoint#import\",\"html\":\"\\n
import { getEntryPoint } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getEntryPoint.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getEntryPoint } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"getEntryPoint\"]},{\"href\":\"/reference/aa-sdk/core/functions/getEntryPoint#usage\",\"html\":\"\\n
import { getEntryPoint } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst entryPoint060 = getEntryPoint(sepolia);\\nconst entryPoint070 = getEntryPoint(sepolia, { version: "0.7.0" });
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getEntryPoint.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getEntryPoint } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\n \\nconst entryPoint060 = getEntryPoint(sepolia);\\nconst entryPoint070 = getEntryPoint(sepolia, { version: "0.7.0" });\\n\",\"title\":\"Usage\",\"titles\":[\"getEntryPoint\"]},{\"href\":\"/reference/aa-sdk/core/functions/getEntryPoint#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getEntryPoint.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getEntryPoint\"]},{\"href\":\"/reference/aa-sdk/core/functions/getEntryPoint#chain\",\"html\":\"\\n

Chain\\nThe chain for which the entry point is being retrieved

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getEntryPoint.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nThe chain for which the entry point is being retrieved\\n\",\"title\":\"chain\",\"titles\":[\"getEntryPoint\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/getEntryPoint#options\",\"html\":\"\\n

GetEntryPointOptions<TEntryPointVersion>\\nOptions containing the version and address overrides for the entry point

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getEntryPoint.mdx#options\",\"isPage\":false,\"text\":\"\\nGetEntryPointOptions<TEntryPointVersion>\\nOptions containing the version and address overrides for the entry point\\n\",\"title\":\"options\",\"titles\":[\"getEntryPoint\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/getEntryPoint#returns\",\"html\":\"\\n

EntryPointDefRegistry<TChain>[EntryPointVersion]\\nThe entry point definition for the specified chain and version

\",\"id\":\"pages/reference/aa-sdk/core/functions/getEntryPoint.mdx#returns\",\"isPage\":false,\"text\":\"\\nEntryPointDefRegistry<TChain>[EntryPointVersion]\\nThe entry point definition for the specified chain and version\",\"title\":\"Returns\",\"titles\":[\"getEntryPoint\"]}]}],[\"index.325f170564c9f458f1f59daf594dad6c1459a1a92e0012e5cadf45546f5f41ec\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: pick\\ndescription: Overview of the pick method\\n---\\n\\n# pick\\n\\nPicks the specified keys from an object and returns a new object containing only those key-value pairs.\\n\\n## Import\\n\\n```ts\\nimport { pick } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { pick } from \\\"@aa-sdk/core\\\";\\n\\nconst picked = pick(\\n {\\n foo: \\\"foo\\\",\\n bar: \\\"bar\\\",\\n },\\n [\\\"foo\\\"]\\n); // { foo: \\\"foo\\\" }\\n```\\n\\n## Parameters\\n\\n### obj\\n\\n`Record`\\nThe object from which to pick keys\\n\\n### keys\\n\\n`string|string[]`\\nA single key or an array of keys to pick from the object\\n\\n## Returns\\n\\n`Record`\\nA new object containing only the picked key-value pairs\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/pick#pick\",\"html\":\"\\n

Picks the specified keys from an object and returns a new object containing only those key-value pairs.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/pick.mdx#pick\",\"isPage\":true,\"text\":\"\\nPicks the specified keys from an object and returns a new object containing only those key-value pairs.\\n\",\"title\":\"pick\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/pick#import\",\"html\":\"\\n
import { pick } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/pick.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { pick } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"pick\"]},{\"href\":\"/reference/aa-sdk/core/functions/pick#usage\",\"html\":\"\\n
import { pick } from "@aa-sdk/core";\\n \\nconst picked = pick(\\n  {\\n    foo: "foo",\\n    bar: "bar",\\n  },\\n  ["foo"]\\n); // { foo: "foo" }
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/pick.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { pick } from "@aa-sdk/core";\\n \\nconst picked = pick(\\n {\\n foo: "foo",\\n bar: "bar",\\n },\\n ["foo"]\\n); // { foo: "foo" }\\n\",\"title\":\"Usage\",\"titles\":[\"pick\"]},{\"href\":\"/reference/aa-sdk/core/functions/pick#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/pick.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"pick\"]},{\"href\":\"/reference/aa-sdk/core/functions/pick#obj\",\"html\":\"\\n

Record<string, unknown>\\nThe object from which to pick keys

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/pick.mdx#obj\",\"isPage\":false,\"text\":\"\\nRecord<string, unknown>\\nThe object from which to pick keys\\n\",\"title\":\"obj\",\"titles\":[\"pick\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/pick#keys\",\"html\":\"\\n

string|string[]\\nA single key or an array of keys to pick from the object

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/pick.mdx#keys\",\"isPage\":false,\"text\":\"\\nstring|string[]\\nA single key or an array of keys to pick from the object\\n\",\"title\":\"keys\",\"titles\":[\"pick\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/pick#returns\",\"html\":\"\\n

Record<string, unknown>\\nA new object containing only the picked key-value pairs

\",\"id\":\"pages/reference/aa-sdk/core/functions/pick.mdx#returns\",\"isPage\":false,\"text\":\"\\nRecord<string, unknown>\\nA new object containing only the picked key-value pairs\",\"title\":\"Returns\",\"titles\":[\"pick\"]}]}],[\"index.8446d24f6fcfae1a73981bab2a11ddc6218496779bada2e1c09b5b2d4a321cb1\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: isSmartAccountWithSigner\\ndescription: Overview of the isSmartAccountWithSigner method\\n---\\n\\n# isSmartAccountWithSigner\\n\\nDetermines if the given SmartContractAccount has a signer associated with it.\\n\\n## Import\\n\\n```ts\\nimport { isSmartAccountWithSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { toSmartContractAccount } from \\\"@aa-sdk/core\\\";\\n\\nconst account = await toSmartContractAccount(...);\\n\\nconsole.log(isSmartAccountWithSigner(account)); // false: the base account does not have a publicly accessible signer\\n```\\n\\n## Parameters\\n\\n### account\\n\\n`SmartContractAccount`\\nThe account to check.\\n\\n## Returns\\n\\n`boolean`\\ntrue if the account has a signer, otherwise false.\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountWithSigner#issmartaccountwithsigner\",\"html\":\"\\n

Determines if the given SmartContractAccount has a signer associated with it.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountWithSigner.mdx#issmartaccountwithsigner\",\"isPage\":true,\"text\":\"\\nDetermines if the given SmartContractAccount has a signer associated with it.\\n\",\"title\":\"isSmartAccountWithSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountWithSigner#import\",\"html\":\"\\n
import { isSmartAccountWithSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountWithSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { isSmartAccountWithSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"isSmartAccountWithSigner\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountWithSigner#usage\",\"html\":\"\\n
import { toSmartContractAccount } from "@aa-sdk/core";\\n \\nconst account = await toSmartContractAccount(...);\\n \\nconsole.log(isSmartAccountWithSigner(account)); // false: the base account does not have a publicly accessible signer
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountWithSigner.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { toSmartContractAccount } from "@aa-sdk/core";\\n \\nconst account = await toSmartContractAccount(...);\\n \\nconsole.log(isSmartAccountWithSigner(account)); // false: the base account does not have a publicly accessible signer\\n\",\"title\":\"Usage\",\"titles\":[\"isSmartAccountWithSigner\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountWithSigner#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountWithSigner.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"isSmartAccountWithSigner\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountWithSigner#account\",\"html\":\"\\n

SmartContractAccount\\nThe account to check.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountWithSigner.mdx#account\",\"isPage\":false,\"text\":\"\\nSmartContractAccount\\nThe account to check.\\n\",\"title\":\"account\",\"titles\":[\"isSmartAccountWithSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountWithSigner#returns\",\"html\":\"\\n

boolean\\ntrue if the account has a signer, otherwise false.

\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountWithSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\nboolean\\ntrue if the account has a signer, otherwise false.\",\"title\":\"Returns\",\"titles\":[\"isSmartAccountWithSigner\"]}]}],[\"index.087010f80945f365cc0685b3acf980f81ae911ef3aa79ac8e48edb3395870603\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: isSigner\\ndescription: Overview of the isSigner method\\n---\\n\\n# isSigner\\n\\nChecks if the provided object is a `SmartAccountSigner`.\\n\\n## Import\\n\\n```ts\\nimport { isSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { isSigner, LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\n\\nconst signer = new LocalAccountSigner(...);\\nconsole.log(isSigner(signer)); // true\\n```\\n\\n## Parameters\\n\\n### signer\\n\\n`any`\\nthe object to check\\n\\n## Returns\\n\\n`boolean`\\nA boolean indicating whether the object is a `SmartAccountSigner`\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/isSigner#issigner\",\"html\":\"\\n

Checks if the provided object is a SmartAccountSigner.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSigner.mdx#issigner\",\"isPage\":true,\"text\":\"\\nChecks if the provided object is a SmartAccountSigner.\\n\",\"title\":\"isSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/isSigner#import\",\"html\":\"\\n
import { isSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { isSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"isSigner\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSigner#usage\",\"html\":\"\\n
import { isSigner, LocalAccountSigner } from "@aa-sdk/core";\\n \\nconst signer = new LocalAccountSigner(...);\\nconsole.log(isSigner(signer)); // true
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSigner.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { isSigner, LocalAccountSigner } from "@aa-sdk/core";\\n \\nconst signer = new LocalAccountSigner(...);\\nconsole.log(isSigner(signer)); // true\\n\",\"title\":\"Usage\",\"titles\":[\"isSigner\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSigner#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSigner.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"isSigner\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSigner#signer\",\"html\":\"\\n

any\\nthe object to check

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSigner.mdx#signer\",\"isPage\":false,\"text\":\"\\nany\\nthe object to check\\n\",\"title\":\"signer\",\"titles\":[\"isSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSigner#returns\",\"html\":\"\\n

boolean\\nA boolean indicating whether the object is a SmartAccountSigner

\",\"id\":\"pages/reference/aa-sdk/core/functions/isSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\nboolean\\nA boolean indicating whether the object is a SmartAccountSigner\",\"title\":\"Returns\",\"titles\":[\"isSigner\"]}]}],[\"index.06e0e52c842ae847b6a1bb88ed3fc4d56bb8c771a852579da3befb954fe3e487\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: getAccountAddress\\ndescription: Overview of the getAccountAddress method\\n---\\n\\n# getAccountAddress\\n\\nRetrieves the account address. Uses a provided `accountAddress` if available; otherwise, it computes the address using the entry point contract and the initial code.\\n\\n## Import\\n\\n```ts\\nimport { getAccountAddress } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getEntryPoint, getAccountAddress } from \\\"@aa-sdk/core\\\";\\n\\nconst accountAddress = await getAccountAddress({\\n client,\\n entryPoint: getEntryPoint(chain),\\n getAccountInitCode: async () => \\\"0x{factoryAddress}{factoryCallData}\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`GetAccountAddressParams`\\nThe configuration object\\n\\n### params.client\\n\\n`PublicClient`\\nA public client instance to interact with the blockchain\\n\\n### params.entryPoint\\n\\n`EntryPointDef`\\nThe entry point definition which includes the address and ABI\\n\\n### params.accountAddress\\n\\n`Address`\\nOptional existing account address\\n\\n### params.getAccountInitCode\\n\\n`() => Promise`\\nA function that returns a Promise resolving to a Hex string representing the initial code of the account\\n\\n## Returns\\n\\n`Promise
`\\nA promise that resolves to the account address\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#getaccountaddress\",\"html\":\"\\n

Retrieves the account address. Uses a provided accountAddress if available; otherwise, it computes the address using the entry point contract and the initial code.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#getaccountaddress\",\"isPage\":true,\"text\":\"\\nRetrieves the account address. Uses a provided accountAddress if available; otherwise, it computes the address using the entry point contract and the initial code.\\n\",\"title\":\"getAccountAddress\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#import\",\"html\":\"\\n
import { getAccountAddress } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getAccountAddress } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"getAccountAddress\"]},{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#usage\",\"html\":\"\\n
import { getEntryPoint, getAccountAddress } from "@aa-sdk/core";\\n \\nconst accountAddress = await getAccountAddress({\\n  client,\\n  entryPoint: getEntryPoint(chain),\\n  getAccountInitCode: async () => "0x{factoryAddress}{factoryCallData}",\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getEntryPoint, getAccountAddress } from "@aa-sdk/core";\\n \\nconst accountAddress = await getAccountAddress({\\n client,\\n entryPoint: getEntryPoint(chain),\\n getAccountInitCode: async () => "0x{factoryAddress}{factoryCallData}",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"getAccountAddress\"]},{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getAccountAddress\"]},{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#params\",\"html\":\"\\n

GetAccountAddressParams\\nThe configuration object

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#params\",\"isPage\":false,\"text\":\"\\nGetAccountAddressParams\\nThe configuration object\\n\",\"title\":\"params\",\"titles\":[\"getAccountAddress\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#paramsclient\",\"html\":\"\\n

PublicClient\\nA public client instance to interact with the blockchain

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#paramsclient\",\"isPage\":false,\"text\":\"\\nPublicClient\\nA public client instance to interact with the blockchain\\n\",\"title\":\"params.client\",\"titles\":[\"getAccountAddress\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#paramsentrypoint\",\"html\":\"\\n

EntryPointDef\\nThe entry point definition which includes the address and ABI

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#paramsentrypoint\",\"isPage\":false,\"text\":\"\\nEntryPointDef\\nThe entry point definition which includes the address and ABI\\n\",\"title\":\"params.entryPoint\",\"titles\":[\"getAccountAddress\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#paramsaccountaddress\",\"html\":\"\\n

Address\\nOptional existing account address

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#paramsaccountaddress\",\"isPage\":false,\"text\":\"\\nAddress\\nOptional existing account address\\n\",\"title\":\"params.accountAddress\",\"titles\":[\"getAccountAddress\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#paramsgetaccountinitcode\",\"html\":\"\\n

() => Promise<Hex>\\nA function that returns a Promise resolving to a Hex string representing the initial code of the account

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#paramsgetaccountinitcode\",\"isPage\":false,\"text\":\"\\n() => Promise<Hex>\\nA function that returns a Promise resolving to a Hex string representing the initial code of the account\\n\",\"title\":\"params.getAccountInitCode\",\"titles\":[\"getAccountAddress\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/getAccountAddress#returns\",\"html\":\"\\n

Promise<Address>\\nA promise that resolves to the account address

\",\"id\":\"pages/reference/aa-sdk/core/functions/getAccountAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Address>\\nA promise that resolves to the account address\",\"title\":\"Returns\",\"titles\":[\"getAccountAddress\"]}]}],[\"index.775319de3950acbafd3b0808132f4c8190dc4fbb6c0144e0b7a4eefdaa1c22a8\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: cookieToInitialState\\ndescription: Overview of the cookieToInitialState method\\n---\\n\\n# cookieToInitialState\\n\\nConverts a cookie into an initial state object\\n\\n## Import\\n\\n```ts\\nimport { cookieToInitialState } from \\\"@account-kit/core\\\";\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe account config containing the client store\\n\\n### cookie\\n\\n`string | undefined`\\noptional cookie string\\n\\n## Returns\\n\\n`StoredState | undefined`\\nthe deserialized AlchemyClientState if the cookie exists, otherwise undefined\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/cookieToInitialState#cookietoinitialstate\",\"html\":\"\\n

Converts a cookie into an initial state object

\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieToInitialState.mdx#cookietoinitialstate\",\"isPage\":true,\"text\":\"\\nConverts a cookie into an initial state object\\n\",\"title\":\"cookieToInitialState\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/cookieToInitialState#import\",\"html\":\"\\n
import { cookieToInitialState } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieToInitialState.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { cookieToInitialState } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"cookieToInitialState\"]},{\"href\":\"/reference/account-kit/core/functions/cookieToInitialState#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieToInitialState.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"cookieToInitialState\"]},{\"href\":\"/reference/account-kit/core/functions/cookieToInitialState#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe account config containing the client store

\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieToInitialState.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe account config containing the client store\\n\",\"title\":\"config\",\"titles\":[\"cookieToInitialState\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/cookieToInitialState#cookie\",\"html\":\"\\n

string | undefined\\noptional cookie string

\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieToInitialState.mdx#cookie\",\"isPage\":false,\"text\":\"\\nstring | undefined\\noptional cookie string\\n\",\"title\":\"cookie\",\"titles\":[\"cookieToInitialState\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/cookieToInitialState#returns\",\"html\":\"\\n

StoredState | undefined\\nthe deserialized AlchemyClientState if the cookie exists, otherwise undefined

\",\"id\":\"pages/reference/account-kit/core/functions/cookieToInitialState.mdx#returns\",\"isPage\":false,\"text\":\"\\nStoredState | undefined\\nthe deserialized AlchemyClientState if the cookie exists, otherwise undefined\",\"title\":\"Returns\",\"titles\":[\"cookieToInitialState\"]}]}],[\"index.602a4405c25244e14b5efb5e7faa770ab15abfb7ad51f1de897551d737e398d2\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: smartAccountClientActions\\ndescription: Overview of the smartAccountClientActions method\\n---\\n\\n# smartAccountClientActions\\n\\nProvides a set of smart account client actions to decorate the provided client. These actions include building and signing user operations, sending transactions, and more.\\n\\nNOTE: this is already added to clients returned from `createSmartAccountClient`\\n\\n## Import\\n\\n```ts\\nimport { smartAccountClientActions } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client to bind the smart account actions to\\n\\n## Returns\\n\\n`BaseSmartAccountClientActions`\\nAn object containing various smart account client actions\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/smartAccountClientActions#smartaccountclientactions\",\"html\":\"\\n

Provides a set of smart account client actions to decorate the provided client. These actions include building and signing user operations, sending transactions, and more.

\\n

NOTE: this is already added to clients returned from createSmartAccountClient

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/smartAccountClientActions.mdx#smartaccountclientactions\",\"isPage\":true,\"text\":\"\\nProvides a set of smart account client actions to decorate the provided client. These actions include building and signing user operations, sending transactions, and more.\\nNOTE: this is already added to clients returned from createSmartAccountClient\\n\",\"title\":\"smartAccountClientActions\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/smartAccountClientActions#import\",\"html\":\"\\n
import { smartAccountClientActions } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/smartAccountClientActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { smartAccountClientActions } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"smartAccountClientActions\"]},{\"href\":\"/reference/aa-sdk/core/functions/smartAccountClientActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/smartAccountClientActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"smartAccountClientActions\"]},{\"href\":\"/reference/aa-sdk/core/functions/smartAccountClientActions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client to bind the smart account actions to

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/smartAccountClientActions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client to bind the smart account actions to\\n\",\"title\":\"client\",\"titles\":[\"smartAccountClientActions\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/smartAccountClientActions#returns\",\"html\":\"\\n

BaseSmartAccountClientActions<TChain, TAccount, TContext>\\nAn object containing various smart account client actions

\",\"id\":\"pages/reference/aa-sdk/core/functions/smartAccountClientActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nBaseSmartAccountClientActions<TChain, TAccount, TContext>\\nAn object containing various smart account client actions\",\"title\":\"Returns\",\"titles\":[\"smartAccountClientActions\"]}]}],[\"index.6bfecfb6fd2bcb2d27b8cfbba12e3248e3aa813ea5e142e34d5c382f64283dea\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: sendTransactions\\ndescription: Overview of the sendTransactions method\\n---\\n\\n# sendTransactions\\n\\nSends transactions using the provided client and transaction parameters. This function builds user operations from the transactions, sends them, and waits for the transaction to be mined.\\n\\n## Import\\n\\n```ts\\nimport { sendTransactions } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\n// smart account client is already extended with sendTransactions\\nconst client = createSmartAccountClient(...);\\nconst result = await client.sendTransactions({\\nrequests: [{\\nto: \\\"0x...\\\",\\ndata: \\\"0x...\\\", // or \\\"0x\\\",\\nvalue: 0n, // optional\\n}],\\naccount, // only required if the client above is not connected to an account\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client used to send the transactions\\n\\n### args\\n\\n`SendTransactionsParameters`\\nThe parameters for sending the transactions, including requests, overrides, account, and context\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the transaction hash of the sent transactions\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/sendTransactions#sendtransactions\",\"html\":\"\\n

Sends transactions using the provided client and transaction parameters. This function builds user operations from the transactions, sends them, and waits for the transaction to be mined.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransactions.mdx#sendtransactions\",\"isPage\":true,\"text\":\"\\nSends transactions using the provided client and transaction parameters. This function builds user operations from the transactions, sends them, and waits for the transaction to be mined.\\n\",\"title\":\"sendTransactions\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransactions#import\",\"html\":\"\\n
import { sendTransactions } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransactions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { sendTransactions } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"sendTransactions\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransactions#usage\",\"html\":\"\\n
import { createSmartAccountClient } from "@aa-sdk/core";\\n \\n// smart account client is already extended with sendTransactions\\nconst client = createSmartAccountClient(...);\\nconst result = await client.sendTransactions({\\nrequests: [{\\nto: "0x...",\\ndata: "0x...", // or "0x",\\nvalue: 0n, // optional\\n}],\\naccount, // only required if the client above is not connected to an account\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransactions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\n// smart account client is already extended with sendTransactions\\nconst client = createSmartAccountClient(...);\\nconst result = await client.sendTransactions({\\nrequests: [{\\nto: "0x...",\\ndata: "0x...", // or "0x",\\nvalue: 0n, // optional\\n}],\\naccount, // only required if the client above is not connected to an account\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"sendTransactions\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransactions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransactions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"sendTransactions\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransactions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client used to send the transactions

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransactions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client used to send the transactions\\n\",\"title\":\"client\",\"titles\":[\"sendTransactions\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransactions#args\",\"html\":\"\\n

SendTransactionsParameters<TAccount, TContext>\\nThe parameters for sending the transactions, including requests, overrides, account, and context

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransactions.mdx#args\",\"isPage\":false,\"text\":\"\\nSendTransactionsParameters<TAccount, TContext>\\nThe parameters for sending the transactions, including requests, overrides, account, and context\\n\",\"title\":\"args\",\"titles\":[\"sendTransactions\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransactions#returns\",\"html\":\"\\n

Promise<Hex>\\nA promise that resolves to the transaction hash of the sent transactions

\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransactions.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Hex>\\nA promise that resolves to the transaction hash of the sent transactions\",\"title\":\"Returns\",\"titles\":[\"sendTransactions\"]}]}],[\"index.9c1b13ee41c2645caa8951d254ed292355e3366e00711d03dfa0656a39618ea1\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: isSmartAccountClient\\ndescription: Overview of the isSmartAccountClient method\\n---\\n\\n# isSmartAccountClient\\n\\nUse this method to assert that a client is a BaseSmartAccountClient.\\nUseful for narrowing the type of the client down when used within the\\nsmart account client decorators\\n\\n## Import\\n\\n```ts\\nimport { isSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\na viem client\\n\\n## Returns\\n\\n`boolean`\\ntrue if the client is a SmartAccountClient\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountClient#issmartaccountclient\",\"html\":\"\\n

Use this method to assert that a client is a BaseSmartAccountClient.\\nUseful for narrowing the type of the client down when used within the\\nsmart account client decorators

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountClient.mdx#issmartaccountclient\",\"isPage\":true,\"text\":\"\\nUse this method to assert that a client is a BaseSmartAccountClient.\\nUseful for narrowing the type of the client down when used within the\\nsmart account client decorators\\n\",\"title\":\"isSmartAccountClient\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountClient#import\",\"html\":\"\\n
import { isSmartAccountClient } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { isSmartAccountClient } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"isSmartAccountClient\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"isSmartAccountClient\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountClient#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\na viem client

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountClient.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\na viem client\\n\",\"title\":\"client\",\"titles\":[\"isSmartAccountClient\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/isSmartAccountClient#returns\",\"html\":\"\\n

boolean\\ntrue if the client is a SmartAccountClient

\",\"id\":\"pages/reference/aa-sdk/core/functions/isSmartAccountClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nboolean\\ntrue if the client is a SmartAccountClient\",\"title\":\"Returns\",\"titles\":[\"isSmartAccountClient\"]}]}],[\"index.c63b33027775ba13f901359403b94460ad68e2f4bc6dcb6a2d8703f00cb209bc\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: defaultAccountState\\ndescription: Overview of the defaultAccountState method\\n---\\n\\n# defaultAccountState\\n\\nReturns the default state for an account of a supported type.\\n\\n## Import\\n\\n```ts\\nimport { defaultAccountState } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { defaultAccountState } from \\\"@account-kit/core\\\";\\n\\nconst defaultLightAccountState = defaultAccountState<\\\"LightAccount\\\">();\\n```\\n\\n## Returns\\n\\n`AccountState`\\nThe default state for the specified account type\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/defaultAccountState#defaultaccountstate\",\"html\":\"\\n

Returns the default state for an account of a supported type.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/defaultAccountState.mdx#defaultaccountstate\",\"isPage\":true,\"text\":\"\\nReturns the default state for an account of a supported type.\\n\",\"title\":\"defaultAccountState\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/defaultAccountState#import\",\"html\":\"\\n
import { defaultAccountState } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/defaultAccountState.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { defaultAccountState } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"defaultAccountState\"]},{\"href\":\"/reference/account-kit/core/functions/defaultAccountState#usage\",\"html\":\"\\n
import { defaultAccountState } from "@account-kit/core";\\n \\nconst defaultLightAccountState = defaultAccountState<"LightAccount">();
\\n\",\"id\":\"pages/reference/account-kit/core/functions/defaultAccountState.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { defaultAccountState } from "@account-kit/core";\\n \\nconst defaultLightAccountState = defaultAccountState<"LightAccount">();\\n\",\"title\":\"Usage\",\"titles\":[\"defaultAccountState\"]},{\"href\":\"/reference/account-kit/core/functions/defaultAccountState#returns\",\"html\":\"\\n

AccountState<T>\\nThe default state for the specified account type

\",\"id\":\"pages/reference/account-kit/core/functions/defaultAccountState.mdx#returns\",\"isPage\":false,\"text\":\"\\nAccountState<T>\\nThe default state for the specified account type\",\"title\":\"Returns\",\"titles\":[\"defaultAccountState\"]}]}],[\"index.e400a7164f625ee7159a22713f1c9db7d5ddfd95fb0737f32acba983ce53b984\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: split\\ndescription: Overview of the split method\\n---\\n\\n# split\\n\\nThe Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\\n\\n## Import\\n\\n```ts\\nimport { split } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\",\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [\\n {\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL),\\n },\\n ],\\n fallback: http(OTHER_RPC_URL),\\n }),\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`SplitTransportParams`\\nsplit transport configuration containing the methods overrides and fallback transport\\n\\n## Returns\\n\\n`CustomTransport`\\na viem Transport that splits traffic\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/split#split\",\"html\":\"\\n

The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/split.mdx#split\",\"isPage\":true,\"text\":\"\\nThe Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\\n\",\"title\":\"split\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/split#import\",\"html\":\"\\n
import { split } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/split.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { split } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"split\"]},{\"href\":\"/reference/aa-sdk/core/functions/split#usage\",\"html\":\"\\n
import { createPublicClient, http } from "viem";\\nimport { split } from "@aa-sdk/core";\\n \\nconst bundlerMethods = [\\n  "eth_sendUserOperation",\\n  "eth_estimateUserOperationGas",\\n  "eth_getUserOperationReceipt",\\n  "eth_getUserOperationByHash",\\n  "eth_supportedEntryPoints",\\n];\\n \\nconst clientWithSplit = createPublicClient({\\n  transport: split({\\n    overrides: [\\n      {\\n        methods: bundlerMethods,\\n        transport: http(BUNDLER_RPC_URL),\\n      },\\n    ],\\n    fallback: http(OTHER_RPC_URL),\\n  }),\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/split.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createPublicClient, http } from "viem";\\nimport { split } from "@aa-sdk/core";\\n \\nconst bundlerMethods = [\\n "eth_sendUserOperation",\\n "eth_estimateUserOperationGas",\\n "eth_getUserOperationReceipt",\\n "eth_getUserOperationByHash",\\n "eth_supportedEntryPoints",\\n];\\n \\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [\\n {\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL),\\n },\\n ],\\n fallback: http(OTHER_RPC_URL),\\n }),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"split\"]},{\"href\":\"/reference/aa-sdk/core/functions/split#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/split.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"split\"]},{\"href\":\"/reference/aa-sdk/core/functions/split#params\",\"html\":\"\\n

SplitTransportParams\\nsplit transport configuration containing the methods overrides and fallback transport

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/split.mdx#params\",\"isPage\":false,\"text\":\"\\nSplitTransportParams\\nsplit transport configuration containing the methods overrides and fallback transport\\n\",\"title\":\"params\",\"titles\":[\"split\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/split#returns\",\"html\":\"\\n

CustomTransport\\na viem Transport that splits traffic

\",\"id\":\"pages/reference/aa-sdk/core/functions/split.mdx#returns\",\"isPage\":false,\"text\":\"\\nCustomTransport\\na viem Transport that splits traffic\",\"title\":\"Returns\",\"titles\":[\"split\"]}]}],[\"index.d3f9df3b74b85b264ff847d729c9d52cc71282ab24949beb22edfdedf159ca11\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: waitForUserOperationTransaction\\ndescription: Overview of the waitForUserOperationTransaction method\\n---\\n\\n# waitForUserOperationTransaction\\n\\nWaits for a user operation transaction to be confirmed by checking the receipt periodically until it is found or a maximum number of retries is reached.\\n\\n## Import\\n\\n```ts\\nimport { waitForUserOperationTransaction } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\n// smart account client is already extended with waitForUserOperationTransaction\\nconst client = createSmartAccountClient(...);\\nconst result = await client.waitForUserOperationTransaction({\\nhash: \\\"0x...\\\",\\nretries: {...} // optional param to configure the retry amounts\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance used to interact with the blockchain\\n\\n### args\\n\\n`WaitForUserOperationTxParameters`\\nThe parameters for the transaction to wait for\\n\\n### args.hash\\n\\n`Hex`\\nThe transaction hash to wait for\\n\\n### args.retries\\n\\n`WaitForUserOperationTxParameters[\\\"retries\\\"]`\\nOptional retry parameters\\n\\n### args.retries.maxRetries\\n\\n`number`\\nThe maximum number of retry attempts\\n\\n### args.retries.intervalMs\\n\\n`number`\\nThe interval in milliseconds between retries\\n\\n### args.retries.multiplier\\n\\n`number`\\nThe multiplier for the interval between retries\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the transaction hash when the transaction is confirmed\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#waitforuseroperationtransaction\",\"html\":\"\\n

Waits for a user operation transaction to be confirmed by checking the receipt periodically until it is found or a maximum number of retries is reached.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#waitforuseroperationtransaction\",\"isPage\":true,\"text\":\"\\nWaits for a user operation transaction to be confirmed by checking the receipt periodically until it is found or a maximum number of retries is reached.\\n\",\"title\":\"waitForUserOperationTransaction\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#import\",\"html\":\"\\n
import { waitForUserOperationTransaction } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { waitForUserOperationTransaction } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"waitForUserOperationTransaction\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#usage\",\"html\":\"\\n
import { createSmartAccountClient } from "@aa-sdk/core";\\n \\n// smart account client is already extended with waitForUserOperationTransaction\\nconst client = createSmartAccountClient(...);\\nconst result = await client.waitForUserOperationTransaction({\\nhash: "0x...",\\nretries: {...} // optional param to configure the retry amounts\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\n// smart account client is already extended with waitForUserOperationTransaction\\nconst client = createSmartAccountClient(...);\\nconst result = await client.waitForUserOperationTransaction({\\nhash: "0x...",\\nretries: {...} // optional param to configure the retry amounts\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"waitForUserOperationTransaction\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"waitForUserOperationTransaction\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#client\",\"html\":\"\\n

Client<TTransport, TChain, any>\\nThe client instance used to interact with the blockchain

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, any>\\nThe client instance used to interact with the blockchain\\n\",\"title\":\"client\",\"titles\":[\"waitForUserOperationTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#args\",\"html\":\"\\n

WaitForUserOperationTxParameters\\nThe parameters for the transaction to wait for

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#args\",\"isPage\":false,\"text\":\"\\nWaitForUserOperationTxParameters\\nThe parameters for the transaction to wait for\\n\",\"title\":\"args\",\"titles\":[\"waitForUserOperationTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#argshash\",\"html\":\"\\n

Hex\\nThe transaction hash to wait for

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#argshash\",\"isPage\":false,\"text\":\"\\nHex\\nThe transaction hash to wait for\\n\",\"title\":\"args.hash\",\"titles\":[\"waitForUserOperationTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#argsretries\",\"html\":\"\\n

WaitForUserOperationTxParameters["retries"]\\nOptional retry parameters

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#argsretries\",\"isPage\":false,\"text\":\"\\nWaitForUserOperationTxParameters["retries"]\\nOptional retry parameters\\n\",\"title\":\"args.retries\",\"titles\":[\"waitForUserOperationTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#argsretriesmaxretries\",\"html\":\"\\n

number\\nThe maximum number of retry attempts

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#argsretriesmaxretries\",\"isPage\":false,\"text\":\"\\nnumber\\nThe maximum number of retry attempts\\n\",\"title\":\"args.retries.maxRetries\",\"titles\":[\"waitForUserOperationTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#argsretriesintervalms\",\"html\":\"\\n

number\\nThe interval in milliseconds between retries

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#argsretriesintervalms\",\"isPage\":false,\"text\":\"\\nnumber\\nThe interval in milliseconds between retries\\n\",\"title\":\"args.retries.intervalMs\",\"titles\":[\"waitForUserOperationTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#argsretriesmultiplier\",\"html\":\"\\n

number\\nThe multiplier for the interval between retries

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#argsretriesmultiplier\",\"isPage\":false,\"text\":\"\\nnumber\\nThe multiplier for the interval between retries\\n\",\"title\":\"args.retries.multiplier\",\"titles\":[\"waitForUserOperationTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/waitForUserOperationTransaction#returns\",\"html\":\"\\n

Promise<Hex>\\nA promise that resolves to the transaction hash when the transaction is confirmed

\",\"id\":\"pages/reference/aa-sdk/core/functions/waitForUserOperationTransaction.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Hex>\\nA promise that resolves to the transaction hash when the transaction is confirmed\",\"title\":\"Returns\",\"titles\":[\"waitForUserOperationTransaction\"]}]}],[\"index.3be9e338011a6e89906b96d9f4892ae45a219e82bedd70eda699fcb16f6184e0\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: sendTransaction\\ndescription: Overview of the sendTransaction method\\n---\\n\\n# sendTransaction\\n\\nSends a transaction using the provided client, arguments, optional overrides, and context.\\nThis sends a UO and then waits for it to be mined\\n\\n## Import\\n\\n```ts\\nimport { sendTransaction } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\n// smart account client is already extended with sendTransaction\\nconst client = createSmartAccountClient(...);\\nconst result = await client.sendTransaction({\\nto: \\\"0x...\\\",\\ndata: \\\"0x...\\\", // or \\\"0x\\\",\\nvalue: 0n, // optional\\naccount, // only required if the client above is not connected to an account\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client to send the transaction through\\n\\n### args\\n\\n`SendTransactionParameters`\\nThe parameters required to send the transaction\\n\\n### overrides\\n\\n`UserOperationOverrides`\\nOptional overrides for the user operation\\n\\n### context\\n\\n`UserOperationContext`\\nOptional context for the user operation\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to a hex string representing the transaction hash\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/sendTransaction#sendtransaction\",\"html\":\"\\n

Sends a transaction using the provided client, arguments, optional overrides, and context.\\nThis sends a UO and then waits for it to be mined

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransaction.mdx#sendtransaction\",\"isPage\":true,\"text\":\"\\nSends a transaction using the provided client, arguments, optional overrides, and context.\\nThis sends a UO and then waits for it to be mined\\n\",\"title\":\"sendTransaction\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransaction#import\",\"html\":\"\\n
import { sendTransaction } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransaction.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { sendTransaction } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"sendTransaction\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransaction#usage\",\"html\":\"\\n
import { createSmartAccountClient } from "@aa-sdk/core";\\n \\n// smart account client is already extended with sendTransaction\\nconst client = createSmartAccountClient(...);\\nconst result = await client.sendTransaction({\\nto: "0x...",\\ndata: "0x...", // or "0x",\\nvalue: 0n, // optional\\naccount, // only required if the client above is not connected to an account\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransaction.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\n// smart account client is already extended with sendTransaction\\nconst client = createSmartAccountClient(...);\\nconst result = await client.sendTransaction({\\nto: "0x...",\\ndata: "0x...", // or "0x",\\nvalue: 0n, // optional\\naccount, // only required if the client above is not connected to an account\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"sendTransaction\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransaction#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransaction.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"sendTransaction\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransaction#client\",\"html\":\"\\n

Client<Transport, TChain, TAccount>\\nThe client to send the transaction through

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransaction.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<Transport, TChain, TAccount>\\nThe client to send the transaction through\\n\",\"title\":\"client\",\"titles\":[\"sendTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransaction#args\",\"html\":\"\\n

SendTransactionParameters<TChain, TAccount, TChainOverride>\\nThe parameters required to send the transaction

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransaction.mdx#args\",\"isPage\":false,\"text\":\"\\nSendTransactionParameters<TChain, TAccount, TChainOverride>\\nThe parameters required to send the transaction\\n\",\"title\":\"args\",\"titles\":[\"sendTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransaction#overrides\",\"html\":\"\\n

UserOperationOverrides<TEntryPointVersion>\\nOptional overrides for the user operation

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransaction.mdx#overrides\",\"isPage\":false,\"text\":\"\\nUserOperationOverrides<TEntryPointVersion>\\nOptional overrides for the user operation\\n\",\"title\":\"overrides\",\"titles\":[\"sendTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransaction#context\",\"html\":\"\\n

UserOperationContext\\nOptional context for the user operation

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransaction.mdx#context\",\"isPage\":false,\"text\":\"\\nUserOperationContext\\nOptional context for the user operation\\n\",\"title\":\"context\",\"titles\":[\"sendTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendTransaction#returns\",\"html\":\"\\n

Promise<Hex>\\nA promise that resolves to a hex string representing the transaction hash

\",\"id\":\"pages/reference/aa-sdk/core/functions/sendTransaction.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Hex>\\nA promise that resolves to a hex string representing the transaction hash\",\"title\":\"Returns\",\"titles\":[\"sendTransaction\"]}]}],[\"index.1270f36f5978db424eb3744c81223d981a25ea272dc7c6ec2065a5914ee39742\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: wrapSignatureWith6492\\ndescription: Overview of the wrapSignatureWith6492 method\\n---\\n\\n# wrapSignatureWith6492\\n\\nWraps a given signature with additional data following the EIP-6492 standard.\\n\\n## Import\\n\\n```ts\\nimport { wrapSignatureWith6492 } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { wrapSignatureWith6492 } from \\\"@aa-sdk/core\\\";\\n\\nconst signature = wrapSignatureWith6492({\\n factoryAddress: \\\"0x...\\\",\\n factoryCalldata: \\\"0x...\\\",\\n signature: \\\"0x...\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`SignWith6492Params`\\nThe parameters to wrap the signature\\n\\n### params.factoryAddress\\n\\n`Hex`\\nThe address of the factory\\n\\n### params.factoryCalldata\\n\\n`Hex`\\nThe calldata for the factory\\n\\n### params.signature\\n\\n`Hex`\\nThe original signature that needs to be wrapped\\n\\n## Returns\\n\\n`Hash`\\nThe wrapped signature\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/wrapSignatureWith6492#wrapsignaturewith6492\",\"html\":\"\\n

Wraps a given signature with additional data following the EIP-6492 standard.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/wrapSignatureWith6492.mdx#wrapsignaturewith6492\",\"isPage\":true,\"text\":\"\\nWraps a given signature with additional data following the EIP-6492 standard.\\n\",\"title\":\"wrapSignatureWith6492\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/wrapSignatureWith6492#import\",\"html\":\"\\n
import { wrapSignatureWith6492 } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/wrapSignatureWith6492.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { wrapSignatureWith6492 } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"wrapSignatureWith6492\"]},{\"href\":\"/reference/aa-sdk/core/functions/wrapSignatureWith6492#usage\",\"html\":\"\\n
import { wrapSignatureWith6492 } from "@aa-sdk/core";\\n \\nconst signature = wrapSignatureWith6492({\\n  factoryAddress: "0x...",\\n  factoryCalldata: "0x...",\\n  signature: "0x...",\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/wrapSignatureWith6492.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { wrapSignatureWith6492 } from "@aa-sdk/core";\\n \\nconst signature = wrapSignatureWith6492({\\n factoryAddress: "0x...",\\n factoryCalldata: "0x...",\\n signature: "0x...",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"wrapSignatureWith6492\"]},{\"href\":\"/reference/aa-sdk/core/functions/wrapSignatureWith6492#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/wrapSignatureWith6492.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"wrapSignatureWith6492\"]},{\"href\":\"/reference/aa-sdk/core/functions/wrapSignatureWith6492#params\",\"html\":\"\\n

SignWith6492Params\\nThe parameters to wrap the signature

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/wrapSignatureWith6492.mdx#params\",\"isPage\":false,\"text\":\"\\nSignWith6492Params\\nThe parameters to wrap the signature\\n\",\"title\":\"params\",\"titles\":[\"wrapSignatureWith6492\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/wrapSignatureWith6492#paramsfactoryaddress\",\"html\":\"\\n

Hex\\nThe address of the factory

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/wrapSignatureWith6492.mdx#paramsfactoryaddress\",\"isPage\":false,\"text\":\"\\nHex\\nThe address of the factory\\n\",\"title\":\"params.factoryAddress\",\"titles\":[\"wrapSignatureWith6492\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/wrapSignatureWith6492#paramsfactorycalldata\",\"html\":\"\\n

Hex\\nThe calldata for the factory

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/wrapSignatureWith6492.mdx#paramsfactorycalldata\",\"isPage\":false,\"text\":\"\\nHex\\nThe calldata for the factory\\n\",\"title\":\"params.factoryCalldata\",\"titles\":[\"wrapSignatureWith6492\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/wrapSignatureWith6492#paramssignature\",\"html\":\"\\n

Hex\\nThe original signature that needs to be wrapped

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/wrapSignatureWith6492.mdx#paramssignature\",\"isPage\":false,\"text\":\"\\nHex\\nThe original signature that needs to be wrapped\\n\",\"title\":\"params.signature\",\"titles\":[\"wrapSignatureWith6492\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/wrapSignatureWith6492#returns\",\"html\":\"\\n

Hash\\nThe wrapped signature

\",\"id\":\"pages/reference/aa-sdk/core/functions/wrapSignatureWith6492.mdx#returns\",\"isPage\":false,\"text\":\"\\nHash\\nThe wrapped signature\",\"title\":\"Returns\",\"titles\":[\"wrapSignatureWith6492\"]}]}],[\"index.77d603b88fd5560ebb88bedd00671f2db667d249eb802577c7066a19f95891a3\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: toSmartContractAccount\\ndescription: Overview of the toSmartContractAccount method\\n---\\n\\n# toSmartContractAccount\\n\\nConverts an account to a smart contract account and sets up various account-related methods using the provided parameters like transport, chain, entry point, and other utilities.\\n\\n## Import\\n\\n```ts\\nimport { toSmartContractAccount } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { http, type SignableMessage } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst myAccount = await toSmartContractAccount({\\n /// REQUIRED PARAMS ///\\n source: \\\"MyAccount\\\",\\n transport: http(\\\"RPC_URL\\\"),\\n chain: sepolia,\\n // The EntryPointDef that your account is com\\\"patible with\\n entryPoint: getEntryPoint(sepolia, { version: \\\"0.6.0\\\" }),\\n // This should return a concatenation of your `factoryAddress` and the `callData` for your factory's create account method\\n getAccountInitCode: async () => \\\"0x{factoryAddress}{callData}\\\",\\n // an invalid signature that doesn't cause your account to revert during validation\\n getDummySignature: () => \\\"0x1234...\\\",\\n // given a UO in the form of {target, data, value} should output the calldata for calling your contract's execution method\\n encodeExecute: async (uo) => \\\"0xcalldata\\\",\\n signMessage: async ({ message }: { message: SignableMessage }) => \\\"0x...\\\",\\n signTypedData: async (typedData) => \\\"0x000\\\",\\n\\n /// OPTIONAL PARAMS ///\\n // if you already know your account's address, pass that in here to avoid generating a new counterfactual\\n accountAddress: \\\"0xaddressoverride\\\",\\n // if your account supports batching, this should take an array of UOs and return the calldata for calling your contract's batchExecute method\\n encodeBatchExecute: async (uos) => \\\"0x...\\\",\\n // if your contract expects a different signing scheme than the default signMessage scheme, you can override that here\\n signUserOperationHash: async (hash) => \\\"0x...\\\",\\n // allows you to define the calldata for upgrading your account\\n encodeUpgradeToAndCall: async (params) => \\\"0x...\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`ToSmartContractAccountParams`\\nthe parameters required for converting to a smart contract account\\n\\n### params.transport\\n\\n`Transport`\\nthe transport mechanism used for communication\\n\\n### params.chain\\n\\n`Chain`\\nthe blockchain chain used in the account\\n\\n### params.entryPoint\\n\\n`EntryPoint`\\nthe entry point of the smart contract\\n\\n### params.source\\n\\n`string`\\nthe source identifier for the account\\n\\n### params.accountAddress\\n\\n`Address`\\nthe address of the account\\n\\n### params.getAccountInitCode\\n\\n`() => Promise`\\na function to get the initial state code of the account\\n\\n### params.signMessage\\n\\n`(message: { message: SignableMessage }) => Promise`\\na function to sign a message\\n\\n### params.signTypedData\\n\\n`(typedDataDefinition: TypedDataDefinition) => Promise`\\na function to sign typed data\\n\\n### params.encodeBatchExecute\\n\\n`(transactions: Transaction[]) => Hex`\\na function to encode batch transactions\\n\\n### params.encodeExecute\\n\\n`(tx: Transaction) => Hex`\\na function to encode a single transaction\\n\\n### params.getDummySignature\\n\\n`() => Promise`\\na function to get a dummy signature\\n\\n### params.signUserOperationHash\\n\\n`(uoHash: Hex) => Promise`\\na function to sign user operations\\n\\n### params.encodeUpgradeToAndCall\\n\\n`(implementationAddress: Address, implementationCallData: Hex) => Hex`\\na function to encode upgrade call\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to a SmartContractAccount object with methods and properties for interacting with the smart contract account\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#tosmartcontractaccount\",\"html\":\"\\n

Converts an account to a smart contract account and sets up various account-related methods using the provided parameters like transport, chain, entry point, and other utilities.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#tosmartcontractaccount\",\"isPage\":true,\"text\":\"\\nConverts an account to a smart contract account and sets up various account-related methods using the provided parameters like transport, chain, entry point, and other utilities.\\n\",\"title\":\"toSmartContractAccount\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#import\",\"html\":\"\\n
import { toSmartContractAccount } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { toSmartContractAccount } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"toSmartContractAccount\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#usage\",\"html\":\"\\n
import { http, type SignableMessage } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst myAccount = await toSmartContractAccount({\\n  /// REQUIRED PARAMS ///\\n  source: "MyAccount",\\n  transport: http("RPC_URL"),\\n  chain: sepolia,\\n  // The EntryPointDef that your account is com"patible with\\n  entryPoint: getEntryPoint(sepolia, { version: "0.6.0" }),\\n  // This should return a concatenation of your `factoryAddress` and the `callData` for your factory's create account method\\n  getAccountInitCode: async () => "0x{factoryAddress}{callData}",\\n  // an invalid signature that doesn't cause your account to revert during validation\\n  getDummySignature: () => "0x1234...",\\n  // given a UO in the form of {target, data, value} should output the calldata for calling your contract's execution method\\n  encodeExecute: async (uo) => "0xcalldata",\\n  signMessage: async ({ message }: { message: SignableMessage }) => "0x...",\\n  signTypedData: async (typedData) => "0x000",\\n \\n  /// OPTIONAL PARAMS ///\\n  // if you already know your account's address, pass that in here to avoid generating a new counterfactual\\n  accountAddress: "0xaddressoverride",\\n  // if your account supports batching, this should take an array of UOs and return the calldata for calling your contract's batchExecute method\\n  encodeBatchExecute: async (uos) => "0x...",\\n  // if your contract expects a different signing scheme than the default signMessage scheme, you can override that here\\n  signUserOperationHash: async (hash) => "0x...",\\n  // allows you to define the calldata for upgrading your account\\n  encodeUpgradeToAndCall: async (params) => "0x...",\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { http, type SignableMessage } from "viem";\\nimport { sepolia } from "viem/chains";\\n \\nconst myAccount = await toSmartContractAccount({\\n /// REQUIRED PARAMS ///\\n source: "MyAccount",\\n transport: http("RPC_URL"),\\n chain: sepolia,\\n // The EntryPointDef that your account is com"patible with\\n entryPoint: getEntryPoint(sepolia, { version: "0.6.0" }),\\n // This should return a concatenation of your `factoryAddress` and the `callData` for your factory's create account method\\n getAccountInitCode: async () => "0x{factoryAddress}{callData}",\\n // an invalid signature that doesn't cause your account to revert during validation\\n getDummySignature: () => "0x1234...",\\n // given a UO in the form of {target, data, value} should output the calldata for calling your contract's execution method\\n encodeExecute: async (uo) => "0xcalldata",\\n signMessage: async ({ message }: { message: SignableMessage }) => "0x...",\\n signTypedData: async (typedData) => "0x000",\\n \\n /// OPTIONAL PARAMS ///\\n // if you already know your account's address, pass that in here to avoid generating a new counterfactual\\n accountAddress: "0xaddressoverride",\\n // if your account supports batching, this should take an array of UOs and return the calldata for calling your contract's batchExecute method\\n encodeBatchExecute: async (uos) => "0x...",\\n // if your contract expects a different signing scheme than the default signMessage scheme, you can override that here\\n signUserOperationHash: async (hash) => "0x...",\\n // allows you to define the calldata for upgrading your account\\n encodeUpgradeToAndCall: async (params) => "0x...",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"toSmartContractAccount\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"toSmartContractAccount\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#params\",\"html\":\"\\n

ToSmartContractAccountParams\\nthe parameters required for converting to a smart contract account

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#params\",\"isPage\":false,\"text\":\"\\nToSmartContractAccountParams\\nthe parameters required for converting to a smart contract account\\n\",\"title\":\"params\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramstransport\",\"html\":\"\\n

Transport\\nthe transport mechanism used for communication

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramstransport\",\"isPage\":false,\"text\":\"\\nTransport\\nthe transport mechanism used for communication\\n\",\"title\":\"params.transport\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramschain\",\"html\":\"\\n

Chain\\nthe blockchain chain used in the account

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramschain\",\"isPage\":false,\"text\":\"\\nChain\\nthe blockchain chain used in the account\\n\",\"title\":\"params.chain\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramsentrypoint\",\"html\":\"\\n

EntryPoint\\nthe entry point of the smart contract

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramsentrypoint\",\"isPage\":false,\"text\":\"\\nEntryPoint\\nthe entry point of the smart contract\\n\",\"title\":\"params.entryPoint\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramssource\",\"html\":\"\\n

string\\nthe source identifier for the account

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramssource\",\"isPage\":false,\"text\":\"\\nstring\\nthe source identifier for the account\\n\",\"title\":\"params.source\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramsaccountaddress\",\"html\":\"\\n

Address\\nthe address of the account

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramsaccountaddress\",\"isPage\":false,\"text\":\"\\nAddress\\nthe address of the account\\n\",\"title\":\"params.accountAddress\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramsgetaccountinitcode\",\"html\":\"\\n

() => Promise<Hex>\\na function to get the initial state code of the account

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramsgetaccountinitcode\",\"isPage\":false,\"text\":\"\\n() => Promise<Hex>\\na function to get the initial state code of the account\\n\",\"title\":\"params.getAccountInitCode\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramssignmessage\",\"html\":\"\\n

(message: { message: SignableMessage }) => Promise<Hex>\\na function to sign a message

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramssignmessage\",\"isPage\":false,\"text\":\"\\n(message: { message: SignableMessage }) => Promise<Hex>\\na function to sign a message\\n\",\"title\":\"params.signMessage\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramssigntypeddata\",\"html\":\"\\n

(typedDataDefinition: TypedDataDefinition<typedData, primaryType>) => Promise<Hex>\\na function to sign typed data

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramssigntypeddata\",\"isPage\":false,\"text\":\"\\n(typedDataDefinition: TypedDataDefinition<typedData, primaryType>) => Promise<Hex>\\na function to sign typed data\\n\",\"title\":\"params.signTypedData\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramsencodebatchexecute\",\"html\":\"\\n

(transactions: Transaction[]) => Hex\\na function to encode batch transactions

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramsencodebatchexecute\",\"isPage\":false,\"text\":\"\\n(transactions: Transaction[]) => Hex\\na function to encode batch transactions\\n\",\"title\":\"params.encodeBatchExecute\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramsencodeexecute\",\"html\":\"\\n

(tx: Transaction) => Hex\\na function to encode a single transaction

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramsencodeexecute\",\"isPage\":false,\"text\":\"\\n(tx: Transaction) => Hex\\na function to encode a single transaction\\n\",\"title\":\"params.encodeExecute\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramsgetdummysignature\",\"html\":\"\\n

() => Promise<Hex>\\na function to get a dummy signature

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramsgetdummysignature\",\"isPage\":false,\"text\":\"\\n() => Promise<Hex>\\na function to get a dummy signature\\n\",\"title\":\"params.getDummySignature\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramssignuseroperationhash\",\"html\":\"\\n

(uoHash: Hex) => Promise<Hex>\\na function to sign user operations

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramssignuseroperationhash\",\"isPage\":false,\"text\":\"\\n(uoHash: Hex) => Promise<Hex>\\na function to sign user operations\\n\",\"title\":\"params.signUserOperationHash\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#paramsencodeupgradetoandcall\",\"html\":\"\\n

(implementationAddress: Address, implementationCallData: Hex) => Hex\\na function to encode upgrade call

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#paramsencodeupgradetoandcall\",\"isPage\":false,\"text\":\"\\n(implementationAddress: Address, implementationCallData: Hex) => Hex\\na function to encode upgrade call\\n\",\"title\":\"params.encodeUpgradeToAndCall\",\"titles\":[\"toSmartContractAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toSmartContractAccount#returns\",\"html\":\"\\n

Promise<SmartContractAccount>\\na promise that resolves to a SmartContractAccount object with methods and properties for interacting with the smart contract account

\",\"id\":\"pages/reference/aa-sdk/core/functions/toSmartContractAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SmartContractAccount>\\na promise that resolves to a SmartContractAccount object with methods and properties for interacting with the smart contract account\",\"title\":\"Returns\",\"titles\":[\"toSmartContractAccount\"]}]}],[\"index.ee8a0a3db40beee84cd1df33a9b60c76649f3465b49ae047c0bb7f6dc78cdf46\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: sendUserOperation\\ndescription: Overview of the sendUserOperation method\\n---\\n\\n# sendUserOperation\\n\\nSends a user operation or batch of user operations using the connected account. Before executing, sendUserOperation will run the user operation through the middleware pipeline.\\n\\n## Import\\n\\n```ts\\nimport { sendUserOperation } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createSmartAccountClient, toSmartContractAccount } from \\\"@aa-sdk/core\\\";\\n\\nconst account = await toSmartContractAccount(...);\\nconst result = await createSmartAccountClient(...).sendUserOperation({\\nuo: {\\ntarget: \\\"0x...\\\",\\ndata: \\\"0x...\\\", // or \\\"0x\\\",\\nvalue: 0n, // optional\\n}\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nthe smart account client to use for RPC requests\\n\\n### args\\n\\n`SendUserOperationParameters`\\ncontains the UO or batch to send, context, overrides, and account if not hoisted on the client\\n\\n## Returns\\n\\n`Promise>`\\na Promise containing the result of the user operation\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/sendUserOperation#senduseroperation\",\"html\":\"\\n

Sends a user operation or batch of user operations using the connected account. Before executing, sendUserOperation will run the user operation through the middleware pipeline.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendUserOperation.mdx#senduseroperation\",\"isPage\":true,\"text\":\"\\nSends a user operation or batch of user operations using the connected account. Before executing, sendUserOperation will run the user operation through the middleware pipeline.\\n\",\"title\":\"sendUserOperation\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/sendUserOperation#import\",\"html\":\"\\n
import { sendUserOperation } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendUserOperation.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { sendUserOperation } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"sendUserOperation\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendUserOperation#usage\",\"html\":\"\\n
import { createSmartAccountClient, toSmartContractAccount } from "@aa-sdk/core";\\n \\nconst account = await toSmartContractAccount(...);\\nconst result = await createSmartAccountClient(...).sendUserOperation({\\nuo: {\\ntarget: "0x...",\\ndata: "0x...", // or "0x",\\nvalue: 0n, // optional\\n}\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendUserOperation.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createSmartAccountClient, toSmartContractAccount } from "@aa-sdk/core";\\n \\nconst account = await toSmartContractAccount(...);\\nconst result = await createSmartAccountClient(...).sendUserOperation({\\nuo: {\\ntarget: "0x...",\\ndata: "0x...", // or "0x",\\nvalue: 0n, // optional\\n}\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"sendUserOperation\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendUserOperation#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendUserOperation.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"sendUserOperation\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendUserOperation#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nthe smart account client to use for RPC requests

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendUserOperation.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nthe smart account client to use for RPC requests\\n\",\"title\":\"client\",\"titles\":[\"sendUserOperation\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendUserOperation#args\",\"html\":\"\\n

SendUserOperationParameters<TAccount, TContext>\\ncontains the UO or batch to send, context, overrides, and account if not hoisted on the client

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/sendUserOperation.mdx#args\",\"isPage\":false,\"text\":\"\\nSendUserOperationParameters<TAccount, TContext>\\ncontains the UO or batch to send, context, overrides, and account if not hoisted on the client\\n\",\"title\":\"args\",\"titles\":[\"sendUserOperation\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/sendUserOperation#returns\",\"html\":\"\\n

Promise<SendUserOperationResult<TEntryPointVersion>>\\na Promise containing the result of the user operation

\",\"id\":\"pages/reference/aa-sdk/core/functions/sendUserOperation.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SendUserOperationResult<TEntryPointVersion>>\\na Promise containing the result of the user operation\",\"title\":\"Returns\",\"titles\":[\"sendUserOperation\"]}]}],[\"index.89a0488e62d9cff80ba189d96a47a6a2c07a58966c43174e77889d54f6578ecf\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: toRecord\\ndescription: Overview of the toRecord method\\n---\\n\\n# toRecord\\n\\nConverts an array of objects into a record (object) where each key is determined by the specified selector and the value is determined by the provided function.\\n\\n## Import\\n\\n```ts\\nimport { toRecord } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { toRecord } from \\\"@aa-sdk/core\\\";\\nimport { sepolia, mainnet } from \\\"viem/chains\\\";\\n\\nconst addressesByChain = toRecord([sepolia, mainnet], \\\"id\\\", () => \\\"0x...\\\"); // { [sepolia.id]: \\\"0x...\\\", [mainnet.id]: \\\"0x...\\\" }\\n```\\n\\n## Parameters\\n\\n### array\\n\\n`T[]`\\nThe array of objects to convert to a record\\n\\n### selector\\n\\n`K`\\nThe key used to select the property that will become the record's key\\n\\n### fn\\n\\n`(item: T) => V`\\nThe function that transforms each item in the array into the record's value\\n\\n## Returns\\n\\n`Record`\\nThe resulting record object\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/toRecord#torecord\",\"html\":\"\\n

Converts an array of objects into a record (object) where each key is determined by the specified selector and the value is determined by the provided function.

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toRecord.mdx#torecord\",\"isPage\":true,\"text\":\"\\nConverts an array of objects into a record (object) where each key is determined by the specified selector and the value is determined by the provided function.\\n\",\"title\":\"toRecord\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/toRecord#import\",\"html\":\"\\n
import { toRecord } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toRecord.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { toRecord } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"toRecord\"]},{\"href\":\"/reference/aa-sdk/core/functions/toRecord#usage\",\"html\":\"\\n
import { toRecord } from "@aa-sdk/core";\\nimport { sepolia, mainnet } from "viem/chains";\\n \\nconst addressesByChain = toRecord([sepolia, mainnet], "id", () => "0x..."); // { [sepolia.id]: "0x...", [mainnet.id]: "0x..." }
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toRecord.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { toRecord } from "@aa-sdk/core";\\nimport { sepolia, mainnet } from "viem/chains";\\n \\nconst addressesByChain = toRecord([sepolia, mainnet], "id", () => "0x..."); // { [sepolia.id]: "0x...", [mainnet.id]: "0x..." }\\n\",\"title\":\"Usage\",\"titles\":[\"toRecord\"]},{\"href\":\"/reference/aa-sdk/core/functions/toRecord#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toRecord.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"toRecord\"]},{\"href\":\"/reference/aa-sdk/core/functions/toRecord#array\",\"html\":\"\\n

T[]\\nThe array of objects to convert to a record

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toRecord.mdx#array\",\"isPage\":false,\"text\":\"\\nT[]\\nThe array of objects to convert to a record\\n\",\"title\":\"array\",\"titles\":[\"toRecord\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toRecord#selector\",\"html\":\"\\n

K\\nThe key used to select the property that will become the record's key

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toRecord.mdx#selector\",\"isPage\":false,\"text\":\"\\nK\\nThe key used to select the property that will become the record's key\\n\",\"title\":\"selector\",\"titles\":[\"toRecord\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toRecord#fn\",\"html\":\"\\n

(item: T) => V\\nThe function that transforms each item in the array into the record's value

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/toRecord.mdx#fn\",\"isPage\":false,\"text\":\"\\n(item: T) => V\\nThe function that transforms each item in the array into the record's value\\n\",\"title\":\"fn\",\"titles\":[\"toRecord\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/toRecord#returns\",\"html\":\"\\n

Record<T[K], V>\\nThe resulting record object

\",\"id\":\"pages/reference/aa-sdk/core/functions/toRecord.mdx#returns\",\"isPage\":false,\"text\":\"\\nRecord<T[K], V>\\nThe resulting record object\",\"title\":\"Returns\",\"titles\":[\"toRecord\"]}]}],[\"index.5bb69c4d485c1bc299f88775e3fbf3b252f6fae3ad0eaec786f128deea3579b5\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createConfig\\ndescription: Overview of the createConfig method\\n---\\n\\n# createConfig\\n\\nCreates an AlchemyAccountsConfig object that can be used in conjunction with\\nthe actions exported from `@account-kit/core`.\\n\\nThe config contains core and client stores that can be used to manage account state\\nin your application.\\n\\n## Import\\n\\n```ts\\nimport { createConfig } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createConfig } from \\\"@account-kit/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst config = createConfig({\\n chain: sepolia,\\n apiKey: \\\"your-api-key\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`CreateConfigProps`\\nThe parameters to create the config with\\n\\n## Returns\\n\\n`AlchemyAccountsConfig`\\nAn alchemy account config object containing the core and client store\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/createConfig#createconfig\",\"html\":\"\\n

Creates an AlchemyAccountsConfig object that can be used in conjunction with\\nthe actions exported from @account-kit/core.

\\n

The config contains core and client stores that can be used to manage account state\\nin your application.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/createConfig.mdx#createconfig\",\"isPage\":true,\"text\":\"\\nCreates an AlchemyAccountsConfig object that can be used in conjunction with\\nthe actions exported from @account-kit/core.\\nThe config contains core and client stores that can be used to manage account state\\nin your application.\\n\",\"title\":\"createConfig\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/createConfig#import\",\"html\":\"\\n
import { createConfig } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/createConfig.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createConfig } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"createConfig\"]},{\"href\":\"/reference/account-kit/core/functions/createConfig#usage\",\"html\":\"\\n
import { createConfig } from "@account-kit/core";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst config = createConfig({\\n  chain: sepolia,\\n  apiKey: "your-api-key",\\n});
\\n\",\"id\":\"pages/reference/account-kit/core/functions/createConfig.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createConfig } from "@account-kit/core";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst config = createConfig({\\n chain: sepolia,\\n apiKey: "your-api-key",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createConfig\"]},{\"href\":\"/reference/account-kit/core/functions/createConfig#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/createConfig.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createConfig\"]},{\"href\":\"/reference/account-kit/core/functions/createConfig#params\",\"html\":\"\\n

CreateConfigProps\\nThe parameters to create the config with

\\n\",\"id\":\"pages/reference/account-kit/core/functions/createConfig.mdx#params\",\"isPage\":false,\"text\":\"\\nCreateConfigProps\\nThe parameters to create the config with\\n\",\"title\":\"params\",\"titles\":[\"createConfig\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/createConfig#returns\",\"html\":\"\\n

AlchemyAccountsConfig\\nAn alchemy account config object containing the core and client store

\",\"id\":\"pages/reference/account-kit/core/functions/createConfig.mdx#returns\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nAn alchemy account config object containing the core and client store\",\"title\":\"Returns\",\"titles\":[\"createConfig\"]}]}],[\"index.be727fef356e5ef7ed5573ef6b7dc0f6bac56efa05c9dcef97dda6fe79abee1d\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: cookieStorage\\ndescription: Overview of the cookieStorage method\\n---\\n\\n# cookieStorage\\n\\nFunction to create cookie based Storage\\n\\n## Import\\n\\n```ts\\nimport { cookieStorage } from \\\"@account-kit/core\\\";\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`{sessionLength: number}`\\noptional config object that allows you to set the session length\\n\\n### config.sessionLength\\n\\n`number`\\nthe length of the session in milliseconds\\n\\n## Returns\\n\\n`Storage`\\nan instance of a browser storage object that leverages cookies\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/cookieStorage#cookiestorage\",\"html\":\"\\n

Function to create cookie based Storage

\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieStorage.mdx#cookiestorage\",\"isPage\":true,\"text\":\"\\nFunction to create cookie based Storage\\n\",\"title\":\"cookieStorage\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/cookieStorage#import\",\"html\":\"\\n
import { cookieStorage } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieStorage.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { cookieStorage } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"cookieStorage\"]},{\"href\":\"/reference/account-kit/core/functions/cookieStorage#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieStorage.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"cookieStorage\"]},{\"href\":\"/reference/account-kit/core/functions/cookieStorage#config\",\"html\":\"\\n

{sessionLength: number}\\noptional config object that allows you to set the session length

\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieStorage.mdx#config\",\"isPage\":false,\"text\":\"\\n{sessionLength: number}\\noptional config object that allows you to set the session length\\n\",\"title\":\"config\",\"titles\":[\"cookieStorage\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/cookieStorage#configsessionlength\",\"html\":\"\\n

number\\nthe length of the session in milliseconds

\\n\",\"id\":\"pages/reference/account-kit/core/functions/cookieStorage.mdx#configsessionlength\",\"isPage\":false,\"text\":\"\\nnumber\\nthe length of the session in milliseconds\\n\",\"title\":\"config.sessionLength\",\"titles\":[\"cookieStorage\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/cookieStorage#returns\",\"html\":\"\\n

Storage\\nan instance of a browser storage object that leverages cookies

\",\"id\":\"pages/reference/account-kit/core/functions/cookieStorage.mdx#returns\",\"isPage\":false,\"text\":\"\\nStorage\\nan instance of a browser storage object that leverages cookies\",\"title\":\"Returns\",\"titles\":[\"cookieStorage\"]}]}],[\"index.eadcc52871c02c30fc636d7a6af29939d233a6663a7947d3d7cb50eb9f8f3a82\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: noopMiddleware\\ndescription: Overview of the noopMiddleware method\\n---\\n\\n# noopMiddleware\\n\\nNoop middleware that does nothing and passes the arguments through\\n\\n## Import\\n\\n```ts\\nimport { noopMiddleware } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### args\\n\\n`Deferrable>`\\nthe client middleware arguments passed to the middleware\\n\\n## Returns\\n\\n`Promise>>`\\nthe arguments passed to the middleware and returned as is without modification\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/noopMiddleware#noopmiddleware\",\"html\":\"\\n

Noop middleware that does nothing and passes the arguments through

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/noopMiddleware.mdx#noopmiddleware\",\"isPage\":true,\"text\":\"\\nNoop middleware that does nothing and passes the arguments through\\n\",\"title\":\"noopMiddleware\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/noopMiddleware#import\",\"html\":\"\\n
import { noopMiddleware } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/noopMiddleware.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { noopMiddleware } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"noopMiddleware\"]},{\"href\":\"/reference/aa-sdk/core/functions/noopMiddleware#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/noopMiddleware.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"noopMiddleware\"]},{\"href\":\"/reference/aa-sdk/core/functions/noopMiddleware#args\",\"html\":\"\\n

Deferrable<UserOperationStruct<TEntryPointVersion>>\\nthe client middleware arguments passed to the middleware

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/noopMiddleware.mdx#args\",\"isPage\":false,\"text\":\"\\nDeferrable<UserOperationStruct<TEntryPointVersion>>\\nthe client middleware arguments passed to the middleware\\n\",\"title\":\"args\",\"titles\":[\"noopMiddleware\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/noopMiddleware#returns\",\"html\":\"\\n

Promise<Deferrable<UserOperationStruct<TEntryPointVersion>>>\\nthe arguments passed to the middleware and returned as is without modification

\",\"id\":\"pages/reference/aa-sdk/core/functions/noopMiddleware.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Deferrable<UserOperationStruct<TEntryPointVersion>>>\\nthe arguments passed to the middleware and returned as is without modification\",\"title\":\"Returns\",\"titles\":[\"noopMiddleware\"]}]}],[\"index.2e536b598980fae33bbfffb03c81200c5e4fb4710c6454a4accae761f0c9df04\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: middlewareActions\\ndescription: Overview of the middlewareActions method\\n---\\n\\n# middlewareActions\\n\\nfunction that takes in ClientMiddlewareConfig used during client initiation\\nand returns the middleware actions object that the smart account client extends with\\n\\n## Import\\n\\n```ts\\nimport { middlewareActions } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### overrides\\n\\n`ClientMiddlewareConfig`\\nconfig used during client initiation for overriding default middlewares\\n\\n## Returns\\n\\n`(client: MiddlewareClient) => { middleware: ClientMiddleware }`\\nmiddleware actions object\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/middlewareActions#middlewareactions\",\"html\":\"\\n

function that takes in ClientMiddlewareConfig used during client initiation\\nand returns the middleware actions object that the smart account client extends with

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/middlewareActions.mdx#middlewareactions\",\"isPage\":true,\"text\":\"\\nfunction that takes in ClientMiddlewareConfig used during client initiation\\nand returns the middleware actions object that the smart account client extends with\\n\",\"title\":\"middlewareActions\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/middlewareActions#import\",\"html\":\"\\n
import { middlewareActions } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/middlewareActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { middlewareActions } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"middlewareActions\"]},{\"href\":\"/reference/aa-sdk/core/functions/middlewareActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/middlewareActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"middlewareActions\"]},{\"href\":\"/reference/aa-sdk/core/functions/middlewareActions#overrides\",\"html\":\"\\n

ClientMiddlewareConfig\\nconfig used during client initiation for overriding default middlewares

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/middlewareActions.mdx#overrides\",\"isPage\":false,\"text\":\"\\nClientMiddlewareConfig\\nconfig used during client initiation for overriding default middlewares\\n\",\"title\":\"overrides\",\"titles\":[\"middlewareActions\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/middlewareActions#returns\",\"html\":\"\\n

(client: MiddlewareClient<TTransport, TChain, TAccount>) => { middleware: ClientMiddleware }\\nmiddleware actions object

\",\"id\":\"pages/reference/aa-sdk/core/functions/middlewareActions.mdx#returns\",\"isPage\":false,\"text\":\"\\n(client: MiddlewareClient<TTransport, TChain, TAccount>) => { middleware: ClientMiddleware }\\nmiddleware actions object\",\"title\":\"Returns\",\"titles\":[\"middlewareActions\"]}]}],[\"index.5f56113103bd420ab4dab158a51561920ab33bf86fe126f462e7d5f60cdd8744\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: convertWalletToAccountSigner\\ndescription: Overview of the convertWalletToAccountSigner method\\n---\\n\\n# convertWalletToAccountSigner\\n\\nConverts a ethersjs Wallet to a SmartAccountSigner\\n\\n## Import\\n\\n```ts\\nimport { convertWalletToAccountSigner } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Parameters\\n\\n### wallet\\n\\n`Wallet`\\n\\n- the Wallet to convert\\n\\n## Returns\\n\\n`SmartAccountSigner`\\na signer that can be used to sign and send user operations\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner#convertwallettoaccountsigner\",\"html\":\"\\n

Converts a ethersjs Wallet to a SmartAccountSigner

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner.mdx#convertwallettoaccountsigner\",\"isPage\":true,\"text\":\"\\nConverts a ethersjs Wallet to a SmartAccountSigner\\n\",\"title\":\"convertWalletToAccountSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner#import\",\"html\":\"\\n
import { convertWalletToAccountSigner } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { convertWalletToAccountSigner } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"convertWalletToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"convertWalletToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner#wallet\",\"html\":\"\\n

Wallet

\\n
    \\n
  • the Wallet to convert
  • \\n
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner.mdx#wallet\",\"isPage\":false,\"text\":\"\\nWallet\\n\\nthe Wallet to convert\\n\\n\",\"title\":\"wallet\",\"titles\":[\"convertWalletToAccountSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner#returns\",\"html\":\"\\n

SmartAccountSigner<Wallet>\\na signer that can be used to sign and send user operations

\",\"id\":\"pages/reference/aa-sdk/ethers/functions/convertWalletToAccountSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\nSmartAccountSigner<Wallet>\\na signer that can be used to sign and send user operations\",\"title\":\"Returns\",\"titles\":[\"convertWalletToAccountSigner\"]}]}],[\"index.c905b4d7bee56a01a0ddcfd1dd906c31beba3bbc46a334c37a83e8067a27c45a\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: resolveProperties\\ndescription: Overview of the resolveProperties method\\n---\\n\\n# resolveProperties\\n\\nAwait all of the properties of a Deferrable object\\n\\n## Import\\n\\n```ts\\nimport { resolveProperties } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### object\\n\\n`Deferrable`\\n\\n- a Deferrable object\\n\\n## Returns\\n\\n`Promise`\\nthe object with its properties resolved\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/functions/resolveProperties#resolveproperties\",\"html\":\"\\n

Await all of the properties of a Deferrable object

\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/resolveProperties.mdx#resolveproperties\",\"isPage\":true,\"text\":\"\\nAwait all of the properties of a Deferrable object\\n\",\"title\":\"resolveProperties\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/functions/resolveProperties#import\",\"html\":\"\\n
import { resolveProperties } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/resolveProperties.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { resolveProperties } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"resolveProperties\"]},{\"href\":\"/reference/aa-sdk/core/functions/resolveProperties#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/resolveProperties.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"resolveProperties\"]},{\"href\":\"/reference/aa-sdk/core/functions/resolveProperties#object\",\"html\":\"\\n

Deferrable<T>

\\n
    \\n
  • a Deferrable object
  • \\n
\\n\",\"id\":\"pages/reference/aa-sdk/core/functions/resolveProperties.mdx#object\",\"isPage\":false,\"text\":\"\\nDeferrable<T>\\n\\na Deferrable object\\n\\n\",\"title\":\"object\",\"titles\":[\"resolveProperties\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/functions/resolveProperties#returns\",\"html\":\"\\n

Promise<T>\\nthe object with its properties resolved

\",\"id\":\"pages/reference/aa-sdk/core/functions/resolveProperties.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<T>\\nthe object with its properties resolved\",\"title\":\"Returns\",\"titles\":[\"resolveProperties\"]}]}],[\"index.02b73018ba9ac98a825aaaaa987c2eaffb0b390a6314fa30fef473ac5f91c8cd\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createAccount\\ndescription: Overview of the createAccount method\\n---\\n\\n# createAccount\\n\\nCreates an account of a specified type using the provided parameters and configuration. Supports creating LightAccount and MultiOwnerModularAccount types.\\n\\n## Import\\n\\n```ts\\nimport { createAccount } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createAccount } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nconst account = createAccount(\\n {\\n type: \\\"LightAccount\\\",\\n },\\n config\\n);\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`CreateAccountParams`\\nThe parameters required to create the account, including the type and account parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nThe configuration object for Alchemy accounts\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the created account object\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/createAccount#createaccount\",\"html\":\"\\n

Creates an account of a specified type using the provided parameters and configuration. Supports creating LightAccount and MultiOwnerModularAccount types.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/createAccount.mdx#createaccount\",\"isPage\":true,\"text\":\"\\nCreates an account of a specified type using the provided parameters and configuration. Supports creating LightAccount and MultiOwnerModularAccount types.\\n\",\"title\":\"createAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/createAccount#import\",\"html\":\"\\n
import { createAccount } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/createAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createAccount } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"createAccount\"]},{\"href\":\"/reference/account-kit/core/functions/createAccount#usage\",\"html\":\"\\n
import { createAccount } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nconst account = createAccount(\\n  {\\n    type: "LightAccount",\\n  },\\n  config\\n);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/createAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createAccount } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nconst account = createAccount(\\n {\\n type: "LightAccount",\\n },\\n config\\n);\\n\",\"title\":\"Usage\",\"titles\":[\"createAccount\"]},{\"href\":\"/reference/account-kit/core/functions/createAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/createAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createAccount\"]},{\"href\":\"/reference/account-kit/core/functions/createAccount#params\",\"html\":\"\\n

CreateAccountParams<TAccount>\\nThe parameters required to create the account, including the type and account parameters

\\n\",\"id\":\"pages/reference/account-kit/core/functions/createAccount.mdx#params\",\"isPage\":false,\"text\":\"\\nCreateAccountParams<TAccount>\\nThe parameters required to create the account, including the type and account parameters\\n\",\"title\":\"params\",\"titles\":[\"createAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/createAccount#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nThe configuration object for Alchemy accounts

\\n\",\"id\":\"pages/reference/account-kit/core/functions/createAccount.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nThe configuration object for Alchemy accounts\\n\",\"title\":\"config\",\"titles\":[\"createAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/createAccount#returns\",\"html\":\"\\n

Promise<SupportedAccounts>\\nA promise that resolves to the created account object

\",\"id\":\"pages/reference/account-kit/core/functions/createAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SupportedAccounts>\\nA promise that resolves to the created account object\",\"title\":\"Returns\",\"titles\":[\"createAccount\"]}]}],[\"index.474f212520a83667ae0c94f325a6ec626396d2c6d27d19c12e638690e5084601\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: disconnect\\ndescription: Overview of the disconnect method\\n---\\n\\n# disconnect\\n\\nDisconnects the current signer, accounts, and clears the store.\\n\\n## Import\\n\\n```ts\\nimport { disconnect } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { disconnect, createConfig } from \\\"@account-kit/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst config = createConfig({\\n chain: sepolia,\\n apiKey: \\\"your-api-key\\\",\\n});\\n\\nawait disconnect(config);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nThe configuration containing the store to be cleared\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/disconnect#disconnect\",\"html\":\"\\n

Disconnects the current signer, accounts, and clears the store.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/disconnect.mdx#disconnect\",\"isPage\":true,\"text\":\"\\nDisconnects the current signer, accounts, and clears the store.\\n\",\"title\":\"disconnect\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/disconnect#import\",\"html\":\"\\n
import { disconnect } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/disconnect.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { disconnect } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"disconnect\"]},{\"href\":\"/reference/account-kit/core/functions/disconnect#usage\",\"html\":\"\\n
import { disconnect, createConfig } from "@account-kit/core";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst config = createConfig({\\n  chain: sepolia,\\n  apiKey: "your-api-key",\\n});\\n \\nawait disconnect(config);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/disconnect.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { disconnect, createConfig } from "@account-kit/core";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst config = createConfig({\\n chain: sepolia,\\n apiKey: "your-api-key",\\n});\\n \\nawait disconnect(config);\\n\",\"title\":\"Usage\",\"titles\":[\"disconnect\"]},{\"href\":\"/reference/account-kit/core/functions/disconnect#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/disconnect.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"disconnect\"]},{\"href\":\"/reference/account-kit/core/functions/disconnect#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nThe configuration containing the store to be cleared

\",\"id\":\"pages/reference/account-kit/core/functions/disconnect.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nThe configuration containing the store to be cleared\",\"title\":\"config\",\"titles\":[\"disconnect\",\"Parameters\"]}]}],[\"index.06b45031f4bb4a39aaf3456121fd17f7ed9869b81a91d6091ca9ba940a7c7343\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: getAccount\\ndescription: Overview of the getAccount method\\n---\\n\\n# getAccount\\n\\nRetrieves the account of the specified type from the client store based on the provided configuration.\\n\\n## Import\\n\\n```ts\\nimport { getAccount } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getAccount } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nconst { account, status } = getAccount(\\n {\\n type: \\\"LightAccount\\\",\\n },\\n config\\n);\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`GetAccountParams`\\nThe parameters containing the type of the account to retrieve\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nThe configuration containing the client store\\n\\n## Returns\\n\\n`GetAccountResult`\\nThe result which includes the account if found and its status\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/getAccount#getaccount\",\"html\":\"\\n

Retrieves the account of the specified type from the client store based on the provided configuration.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getAccount.mdx#getaccount\",\"isPage\":true,\"text\":\"\\nRetrieves the account of the specified type from the client store based on the provided configuration.\\n\",\"title\":\"getAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/getAccount#import\",\"html\":\"\\n
import { getAccount } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getAccount } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"getAccount\"]},{\"href\":\"/reference/account-kit/core/functions/getAccount#usage\",\"html\":\"\\n
import { getAccount } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nconst { account, status } = getAccount(\\n  {\\n    type: "LightAccount",\\n  },\\n  config\\n);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getAccount } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nconst { account, status } = getAccount(\\n {\\n type: "LightAccount",\\n },\\n config\\n);\\n\",\"title\":\"Usage\",\"titles\":[\"getAccount\"]},{\"href\":\"/reference/account-kit/core/functions/getAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/getAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getAccount\"]},{\"href\":\"/reference/account-kit/core/functions/getAccount#params\",\"html\":\"\\n

GetAccountParams<TAccount>\\nThe parameters containing the type of the account to retrieve

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getAccount.mdx#params\",\"isPage\":false,\"text\":\"\\nGetAccountParams<TAccount>\\nThe parameters containing the type of the account to retrieve\\n\",\"title\":\"params\",\"titles\":[\"getAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/getAccount#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nThe configuration containing the client store

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getAccount.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nThe configuration containing the client store\\n\",\"title\":\"config\",\"titles\":[\"getAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/getAccount#returns\",\"html\":\"\\n

GetAccountResult<TAccount>\\nThe result which includes the account if found and its status

\",\"id\":\"pages/reference/account-kit/core/functions/getAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nGetAccountResult<TAccount>\\nThe result which includes the account if found and its status\",\"title\":\"Returns\",\"titles\":[\"getAccount\"]}]}],[\"index.8b4f7610e86cddf4281da31f0ca1642af04fd58cfbf8d5d9f276386c5b35984e\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getBundlerClient\\ndescription: Overview of the getBundlerClient method\\n---\\n\\n# getBundlerClient\\n\\nRetrieves the BundlerClient from the core store of the given AlchemyAccountsConfig.\\n\\n## Import\\n\\n```ts\\nimport { getBundlerClient } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\n// see `createConfig` for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nconst bundlerClient = getBundlerClient(config);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nThe configuration object containing the core store.\\n\\n## Returns\\n\\n`ClientWithAlchemyMethods`\\nThe BundlerClient from the core store.\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/getBundlerClient#getbundlerclient\",\"html\":\"\\n

Retrieves the BundlerClient from the core store of the given AlchemyAccountsConfig.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getBundlerClient.mdx#getbundlerclient\",\"isPage\":true,\"text\":\"\\nRetrieves the BundlerClient from the core store of the given AlchemyAccountsConfig.\\n\",\"title\":\"getBundlerClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/getBundlerClient#import\",\"html\":\"\\n
import { getBundlerClient } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getBundlerClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getBundlerClient } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"getBundlerClient\"]},{\"href\":\"/reference/account-kit/core/functions/getBundlerClient#usage\",\"html\":\"\\n
// see `createConfig` for more information on how to create a config\\nimport { config } from "./config";\\n \\nconst bundlerClient = getBundlerClient(config);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getBundlerClient.mdx#usage\",\"isPage\":false,\"text\":\"\\n// see `createConfig` for more information on how to create a config\\nimport { config } from "./config";\\n \\nconst bundlerClient = getBundlerClient(config);\\n\",\"title\":\"Usage\",\"titles\":[\"getBundlerClient\"]},{\"href\":\"/reference/account-kit/core/functions/getBundlerClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/getBundlerClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getBundlerClient\"]},{\"href\":\"/reference/account-kit/core/functions/getBundlerClient#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nThe configuration object containing the core store.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getBundlerClient.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nThe configuration object containing the core store.\\n\",\"title\":\"config\",\"titles\":[\"getBundlerClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/getBundlerClient#returns\",\"html\":\"\\n

ClientWithAlchemyMethods\\nThe BundlerClient from the core store.

\",\"id\":\"pages/reference/account-kit/core/functions/getBundlerClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nClientWithAlchemyMethods\\nThe BundlerClient from the core store.\",\"title\":\"Returns\",\"titles\":[\"getBundlerClient\"]}]}],[\"index.3b600c4a8a12e052f314d43ce7196faa5b0397daafa4b54c899c69a29a528780\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: hydrate\\ndescription: Overview of the hydrate method\\n---\\n\\n# hydrate\\n\\nWill hydrate the client store with the provided initial state if one is provided.\\n\\n## Import\\n\\n```ts\\nimport { hydrate } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { hydrate, cookieToInitialState } from \\\"@account-kit/core\\\";\\nimport { config } from \\\"./config\\\";\\n\\nconst initialState = cookieToInitialState(document.cookie);\\nconst { onMount } = hydrate(config, initialState);\\n// call onMount once your component has mounted\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe config containing the client store\\n\\n### initialState\\n\\n`StoredState`\\noptional param detailing the initial ClientState\\n\\n## Returns\\n\\n`{ onMount: () => Promise }`\\nan object containing an onMount function that can be called when your component first renders on the client\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/hydrate#hydrate\",\"html\":\"\\n

Will hydrate the client store with the provided initial state if one is provided.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/hydrate.mdx#hydrate\",\"isPage\":true,\"text\":\"\\nWill hydrate the client store with the provided initial state if one is provided.\\n\",\"title\":\"hydrate\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/hydrate#import\",\"html\":\"\\n
import { hydrate } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/hydrate.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { hydrate } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"hydrate\"]},{\"href\":\"/reference/account-kit/core/functions/hydrate#usage\",\"html\":\"\\n
import { hydrate, cookieToInitialState } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nconst initialState = cookieToInitialState(document.cookie);\\nconst { onMount } = hydrate(config, initialState);\\n// call onMount once your component has mounted
\\n\",\"id\":\"pages/reference/account-kit/core/functions/hydrate.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { hydrate, cookieToInitialState } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nconst initialState = cookieToInitialState(document.cookie);\\nconst { onMount } = hydrate(config, initialState);\\n// call onMount once your component has mounted\\n\",\"title\":\"Usage\",\"titles\":[\"hydrate\"]},{\"href\":\"/reference/account-kit/core/functions/hydrate#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/hydrate.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"hydrate\"]},{\"href\":\"/reference/account-kit/core/functions/hydrate#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe config containing the client store

\\n\",\"id\":\"pages/reference/account-kit/core/functions/hydrate.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe config containing the client store\\n\",\"title\":\"config\",\"titles\":[\"hydrate\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/hydrate#initialstate\",\"html\":\"\\n

StoredState\\noptional param detailing the initial ClientState

\\n\",\"id\":\"pages/reference/account-kit/core/functions/hydrate.mdx#initialstate\",\"isPage\":false,\"text\":\"\\nStoredState\\noptional param detailing the initial ClientState\\n\",\"title\":\"initialState\",\"titles\":[\"hydrate\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/hydrate#returns\",\"html\":\"\\n

{ onMount: () => Promise<void> }\\nan object containing an onMount function that can be called when your component first renders on the client

\",\"id\":\"pages/reference/account-kit/core/functions/hydrate.mdx#returns\",\"isPage\":false,\"text\":\"\\n{ onMount: () => Promise<void> }\\nan object containing an onMount function that can be called when your component first renders on the client\",\"title\":\"Returns\",\"titles\":[\"hydrate\"]}]}],[\"index.017202e14a1771a4d644c92b7a494f91afecef283f7864857e3db9da589614e8\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createLightAccount\\ndescription: Overview of the createLightAccount method\\n---\\n\\n# createLightAccount\\n\\nCreates a light account based on the provided parameters such as transport, chain, signer, init code, and more. Ensures that an account is configured and returned with various capabilities, such as transferring ownership and retrieving the owner's address.\\n\\n## Import\\n\\n```ts\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\nimport { http, generatePrivateKey } from \\\"viem\\\";\\n\\nconst account = await createLightAccount({\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`CreateLightAccountParams`\\nThe parameters for creating a light account\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to a `LightAccount` object containing the created account information and methods\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccount#createlightaccount\",\"html\":\"\\n

Creates a light account based on the provided parameters such as transport, chain, signer, init code, and more. Ensures that an account is configured and returned with various capabilities, such as transferring ownership and retrieving the owner's address.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccount.mdx#createlightaccount\",\"isPage\":true,\"text\":\"\\nCreates a light account based on the provided parameters such as transport, chain, signer, init code, and more. Ensures that an account is configured and returned with various capabilities, such as transferring ownership and retrieving the owner's address.\\n\",\"title\":\"createLightAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccount#import\",\"html\":\"\\n
import { createLightAccount } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createLightAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccount#usage\",\"html\":\"\\n
import { createLightAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createLightAccount({\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createLightAccount({\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createLightAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createLightAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccount#config\",\"html\":\"\\n

CreateLightAccountParams\\nThe parameters for creating a light account

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccount.mdx#config\",\"isPage\":false,\"text\":\"\\nCreateLightAccountParams\\nThe parameters for creating a light account\\n\",\"title\":\"config\",\"titles\":[\"createLightAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccount#returns\",\"html\":\"\\n

Promise<LightAccount>\\nA promise that resolves to a LightAccount object containing the created account information and methods

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<LightAccount>\\nA promise that resolves to a LightAccount object containing the created account information and methods\",\"title\":\"Returns\",\"titles\":[\"createLightAccount\"]}]}],[\"index.5515ad74959210c893ca30edca433eefd2d558fb9839493087712c4d26debd02\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: watchBundlerClient\\ndescription: Overview of the watchBundlerClient method\\n---\\n\\n# watchBundlerClient\\n\\nWatches for changes to the bundler client within the given configuration and triggers a callback when changes occur.\\n\\n## Import\\n\\n```ts\\nimport { watchBundlerClient } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { watchBundlerClient } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nwatchBundlerClient(config)(console.log);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nThe configuration object containing the core store\\n\\n## Returns\\n\\n`(onChange: (bundlerClient: ClientWithAlchemyMethods) => void) => (() => void)`\\nA function accepting a callback function to invoke when the bundler client changes and returns a function to unsubscribe from the store\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/watchBundlerClient#watchbundlerclient\",\"html\":\"\\n

Watches for changes to the bundler client within the given configuration and triggers a callback when changes occur.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchBundlerClient.mdx#watchbundlerclient\",\"isPage\":true,\"text\":\"\\nWatches for changes to the bundler client within the given configuration and triggers a callback when changes occur.\\n\",\"title\":\"watchBundlerClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/watchBundlerClient#import\",\"html\":\"\\n
import { watchBundlerClient } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchBundlerClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { watchBundlerClient } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"watchBundlerClient\"]},{\"href\":\"/reference/account-kit/core/functions/watchBundlerClient#usage\",\"html\":\"\\n
import { watchBundlerClient } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchBundlerClient(config)(console.log);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchBundlerClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { watchBundlerClient } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchBundlerClient(config)(console.log);\\n\",\"title\":\"Usage\",\"titles\":[\"watchBundlerClient\"]},{\"href\":\"/reference/account-kit/core/functions/watchBundlerClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchBundlerClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"watchBundlerClient\"]},{\"href\":\"/reference/account-kit/core/functions/watchBundlerClient#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nThe configuration object containing the core store

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchBundlerClient.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nThe configuration object containing the core store\\n\",\"title\":\"config\",\"titles\":[\"watchBundlerClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/watchBundlerClient#returns\",\"html\":\"\\n

(onChange: (bundlerClient: ClientWithAlchemyMethods) => void) => (() => void)\\nA function accepting a callback function to invoke when the bundler client changes and returns a function to unsubscribe from the store

\",\"id\":\"pages/reference/account-kit/core/functions/watchBundlerClient.mdx#returns\",\"isPage\":false,\"text\":\"\\n(onChange: (bundlerClient: ClientWithAlchemyMethods) => void) => (() => void)\\nA function accepting a callback function to invoke when the bundler client changes and returns a function to unsubscribe from the store\",\"title\":\"Returns\",\"titles\":[\"watchBundlerClient\"]}]}],[\"index.a3701851df677bcd8b6ffbae61c0d511ec6721eb73b8563e2f94ef14d6a62210\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createMultiOwnerLightAccount\\ndescription: Overview of the createMultiOwnerLightAccount method\\n---\\n\\n# createMultiOwnerLightAccount\\n\\nCreates a multi-owner light account using the provided parameters, including transport, chain, signer, initialization code, version, account address, factory address, salt, and owners. Ensures the owners list is deduplicated, ordered, and valid.\\n\\n## Import\\n\\n```ts\\nimport { createMultiOwnerLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createMultiOwnerLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\nimport { http, generatePrivateKey } from \\\"viem\\\";\\n\\nconst account = await createMultiOwnerLightAccount({\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`CreateMultiOwnerLightAccountParams`\\nThe parameters for creating a multi-owner light account\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to a `MultiOwnerLightAccount` object containing the created account information and methods\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount#createmultiownerlightaccount\",\"html\":\"\\n

Creates a multi-owner light account using the provided parameters, including transport, chain, signer, initialization code, version, account address, factory address, salt, and owners. Ensures the owners list is deduplicated, ordered, and valid.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount.mdx#createmultiownerlightaccount\",\"isPage\":true,\"text\":\"\\nCreates a multi-owner light account using the provided parameters, including transport, chain, signer, initialization code, version, account address, factory address, salt, and owners. Ensures the owners list is deduplicated, ordered, and valid.\\n\",\"title\":\"createMultiOwnerLightAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount#import\",\"html\":\"\\n
import { createMultiOwnerLightAccount } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerLightAccount } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createMultiOwnerLightAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount#usage\",\"html\":\"\\n
import { createMultiOwnerLightAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createMultiOwnerLightAccount({\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerLightAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createMultiOwnerLightAccount({\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createMultiOwnerLightAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createMultiOwnerLightAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount#config\",\"html\":\"\\n

CreateMultiOwnerLightAccountParams\\nThe parameters for creating a multi-owner light account

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount.mdx#config\",\"isPage\":false,\"text\":\"\\nCreateMultiOwnerLightAccountParams\\nThe parameters for creating a multi-owner light account\\n\",\"title\":\"config\",\"titles\":[\"createMultiOwnerLightAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount#returns\",\"html\":\"\\n

Promise<MultiOwnerLightAccount>\\nA promise that resolves to a MultiOwnerLightAccount object containing the created account information and methods

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<MultiOwnerLightAccount>\\nA promise that resolves to a MultiOwnerLightAccount object containing the created account information and methods\",\"title\":\"Returns\",\"titles\":[\"createMultiOwnerLightAccount\"]}]}],[\"index.d88b4a1d018ddbf464a86e19a5a77f81347acf6be348ced768582e339e4df484\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: reconnect\\ndescription: Overview of the reconnect method\\n---\\n\\n# reconnect\\n\\nThis method will use the current state in the client store and attempt to restore\\nconnected instances of previously used accounts and the signer.\\n\\n## Import\\n\\n```ts\\nimport { reconnect } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { reconnect } from \\\"@account-kit/core\\\";\\nimport { config } from \\\"./config\\\";\\n\\nawait reconnect(config);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe account config which contains the client store\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/reconnect#reconnect\",\"html\":\"\\n

This method will use the current state in the client store and attempt to restore\\nconnected instances of previously used accounts and the signer.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/reconnect.mdx#reconnect\",\"isPage\":true,\"text\":\"\\nThis method will use the current state in the client store and attempt to restore\\nconnected instances of previously used accounts and the signer.\\n\",\"title\":\"reconnect\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/reconnect#import\",\"html\":\"\\n
import { reconnect } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/reconnect.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { reconnect } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"reconnect\"]},{\"href\":\"/reference/account-kit/core/functions/reconnect#usage\",\"html\":\"\\n
import { reconnect } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nawait reconnect(config);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/reconnect.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { reconnect } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nawait reconnect(config);\\n\",\"title\":\"Usage\",\"titles\":[\"reconnect\"]},{\"href\":\"/reference/account-kit/core/functions/reconnect#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/reconnect.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"reconnect\"]},{\"href\":\"/reference/account-kit/core/functions/reconnect#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe account config which contains the client store

\",\"id\":\"pages/reference/account-kit/core/functions/reconnect.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe account config which contains the client store\",\"title\":\"config\",\"titles\":[\"reconnect\",\"Parameters\"]}]}],[\"index.a6f8d53739baa26778f47f686e63ab8a4b8065e81c01840d1c7af513c645f282\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getSignerStatus\\ndescription: Overview of the getSignerStatus method\\n---\\n\\n# getSignerStatus\\n\\nRetrieves the signer status from the client's store in the provided configuration.\\n\\n## Import\\n\\n```ts\\nimport { getSignerStatus } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getSignerStatus } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nconst signerStatus = getSignerStatus(config);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nThe configuration object containing the client store\\n\\n## Returns\\n\\n`SignerStatus`\\nThe current signer status from the client store\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/getSignerStatus#getsignerstatus\",\"html\":\"\\n

Retrieves the signer status from the client's store in the provided configuration.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSignerStatus.mdx#getsignerstatus\",\"isPage\":true,\"text\":\"\\nRetrieves the signer status from the client's store in the provided configuration.\\n\",\"title\":\"getSignerStatus\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/getSignerStatus#import\",\"html\":\"\\n
import { getSignerStatus } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSignerStatus.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getSignerStatus } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"getSignerStatus\"]},{\"href\":\"/reference/account-kit/core/functions/getSignerStatus#usage\",\"html\":\"\\n
import { getSignerStatus } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nconst signerStatus = getSignerStatus(config);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSignerStatus.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getSignerStatus } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nconst signerStatus = getSignerStatus(config);\\n\",\"title\":\"Usage\",\"titles\":[\"getSignerStatus\"]},{\"href\":\"/reference/account-kit/core/functions/getSignerStatus#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSignerStatus.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getSignerStatus\"]},{\"href\":\"/reference/account-kit/core/functions/getSignerStatus#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nThe configuration object containing the client store

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSignerStatus.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nThe configuration object containing the client store\\n\",\"title\":\"config\",\"titles\":[\"getSignerStatus\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/getSignerStatus#returns\",\"html\":\"\\n

SignerStatus\\nThe current signer status from the client store

\",\"id\":\"pages/reference/account-kit/core/functions/getSignerStatus.mdx#returns\",\"isPage\":false,\"text\":\"\\nSignerStatus\\nThe current signer status from the client store\",\"title\":\"Returns\",\"titles\":[\"getSignerStatus\"]}]}],[\"index.668bae0332b6f4e410aec31aa3302b69fc75ca7b6201aa2ac8e711b3300c2551\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: buildSessionKeysToRemoveStruct\\ndescription: Overview of the buildSessionKeysToRemoveStruct method\\n---\\n\\n# buildSessionKeysToRemoveStruct\\n\\nFinds predecessors for each provided key and returns them in the struct `ISessionKeyPlugin.SessionKeyToRemove[]`.\\n\\n## Import\\n\\n```ts\\nimport { buildSessionKeysToRemoveStruct } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { buildSessionKeysToRemoveStruct } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst client = createSmartAccountClient(...);\\n\\nconst keysToRemove = await buildSessionKeysToRemoveStruct(client, {\\nkeys: [\\\"0x...\\\", \\\"0x...\\\"],\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance used to interact with the smart account\\n\\n### args\\n\\n`BuildSessionKeysToRemoveStructParams`\\nArguments to configure the session key removal process\\n\\n## Returns\\n\\n`Promise<{ sessionKey: Address; predecessor: Address }[]>`\\nA promise that resolves to an array of objects each containing a session key and its predecessor\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct#buildsessionkeystoremovestruct\",\"html\":\"\\n

Finds predecessors for each provided key and returns them in the struct ISessionKeyPlugin.SessionKeyToRemove[].

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct.mdx#buildsessionkeystoremovestruct\",\"isPage\":true,\"text\":\"\\nFinds predecessors for each provided key and returns them in the struct ISessionKeyPlugin.SessionKeyToRemove[].\\n\",\"title\":\"buildSessionKeysToRemoveStruct\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct#import\",\"html\":\"\\n
import { buildSessionKeysToRemoveStruct } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { buildSessionKeysToRemoveStruct } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"buildSessionKeysToRemoveStruct\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct#usage\",\"html\":\"\\n
import { buildSessionKeysToRemoveStruct } from "@account-kit/smart-contracts";\\n \\nconst client = createSmartAccountClient(...);\\n \\nconst keysToRemove = await buildSessionKeysToRemoveStruct(client, {\\nkeys: ["0x...", "0x..."],\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { buildSessionKeysToRemoveStruct } from "@account-kit/smart-contracts";\\n \\nconst client = createSmartAccountClient(...);\\n \\nconst keysToRemove = await buildSessionKeysToRemoveStruct(client, {\\nkeys: ["0x...", "0x..."],\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"buildSessionKeysToRemoveStruct\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"buildSessionKeysToRemoveStruct\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client instance used to interact with the smart account

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client instance used to interact with the smart account\\n\",\"title\":\"client\",\"titles\":[\"buildSessionKeysToRemoveStruct\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct#args\",\"html\":\"\\n

BuildSessionKeysToRemoveStructParams<TAccount>\\nArguments to configure the session key removal process

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct.mdx#args\",\"isPage\":false,\"text\":\"\\nBuildSessionKeysToRemoveStructParams<TAccount>\\nArguments to configure the session key removal process\\n\",\"title\":\"args\",\"titles\":[\"buildSessionKeysToRemoveStruct\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct#returns\",\"html\":\"\\n

Promise<{ sessionKey: Address; predecessor: Address }[]>\\nA promise that resolves to an array of objects each containing a session key and its predecessor

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/buildSessionKeysToRemoveStruct.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<{ sessionKey: Address; predecessor: Address }[]>\\nA promise that resolves to an array of objects each containing a session key and its predecessor\",\"title\":\"Returns\",\"titles\":[\"buildSessionKeysToRemoveStruct\"]}]}],[\"index.4bb12d5206a9494bdc1e7ae7014fd53cd21fd95fa24dff0bafb3b829c904b3a4\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getUser\\ndescription: Overview of the getUser method\\n---\\n\\n# getUser\\n\\nReturns the currently logged in user if using an SCA with the AlchemySigner\\nor the connected EOA details.\\n\\n## Import\\n\\n```ts\\nimport { getUser } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getUser } from \\\"@account-kit/core\\\";\\nimport { config } from \\\"./config\\\";\\n\\nconst user = getUser(config);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe account config containing app state\\n\\n## Returns\\n\\n`GetUserResult`\\nthe user if the signer or an EOA are connected\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/getUser#getuser\",\"html\":\"\\n

Returns the currently logged in user if using an SCA with the AlchemySigner\\nor the connected EOA details.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getUser.mdx#getuser\",\"isPage\":true,\"text\":\"\\nReturns the currently logged in user if using an SCA with the AlchemySigner\\nor the connected EOA details.\\n\",\"title\":\"getUser\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/getUser#import\",\"html\":\"\\n
import { getUser } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getUser.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getUser } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"getUser\"]},{\"href\":\"/reference/account-kit/core/functions/getUser#usage\",\"html\":\"\\n
import { getUser } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nconst user = getUser(config);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getUser.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getUser } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nconst user = getUser(config);\\n\",\"title\":\"Usage\",\"titles\":[\"getUser\"]},{\"href\":\"/reference/account-kit/core/functions/getUser#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/getUser.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getUser\"]},{\"href\":\"/reference/account-kit/core/functions/getUser#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe account config containing app state

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getUser.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe account config containing app state\\n\",\"title\":\"config\",\"titles\":[\"getUser\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/getUser#returns\",\"html\":\"\\n

GetUserResult\\nthe user if the signer or an EOA are connected

\",\"id\":\"pages/reference/account-kit/core/functions/getUser.mdx#returns\",\"isPage\":false,\"text\":\"\\nGetUserResult\\nthe user if the signer or an EOA are connected\",\"title\":\"Returns\",\"titles\":[\"getUser\"]}]}],[\"index.f625d976d6e29ae8d271ecc60598e80d8735e978c1f5d484c828b5a50558b149\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getSigner\\ndescription: Overview of the getSigner method\\n---\\n\\n# getSigner\\n\\nIf there is a signer attached to the client state, it will return it.\\nThe signer should always be null on the server, and will be set on the client\\nif the store was properly hydrated.\\n\\n## Import\\n\\n```ts\\nimport { getSigner } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getSigner } from \\\"@account-kit/core\\\";\\nimport { config } from \\\"./config\\\";\\n\\nconst signer = getSigner(config);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nThe account config which contains the client store\\n\\n## Returns\\n\\n`AlchemyWebSigner | null`\\nthe instance of the signer present in the store if it exists, otherwise null\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/getSigner#getsigner\",\"html\":\"\\n

If there is a signer attached to the client state, it will return it.\\nThe signer should always be null on the server, and will be set on the client\\nif the store was properly hydrated.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSigner.mdx#getsigner\",\"isPage\":true,\"text\":\"\\nIf there is a signer attached to the client state, it will return it.\\nThe signer should always be null on the server, and will be set on the client\\nif the store was properly hydrated.\\n\",\"title\":\"getSigner\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/getSigner#import\",\"html\":\"\\n
import { getSigner } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getSigner } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"getSigner\"]},{\"href\":\"/reference/account-kit/core/functions/getSigner#usage\",\"html\":\"\\n
import { getSigner } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nconst signer = getSigner(config);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSigner.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getSigner } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nconst signer = getSigner(config);\\n\",\"title\":\"Usage\",\"titles\":[\"getSigner\"]},{\"href\":\"/reference/account-kit/core/functions/getSigner#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSigner.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getSigner\"]},{\"href\":\"/reference/account-kit/core/functions/getSigner#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nThe account config which contains the client store

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getSigner.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nThe account config which contains the client store\\n\",\"title\":\"config\",\"titles\":[\"getSigner\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/getSigner#returns\",\"html\":\"\\n

AlchemyWebSigner | null\\nthe instance of the signer present in the store if it exists, otherwise null

\",\"id\":\"pages/reference/account-kit/core/functions/getSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\nAlchemyWebSigner | null\\nthe instance of the signer present in the store if it exists, otherwise null\",\"title\":\"Returns\",\"titles\":[\"getSigner\"]}]}],[\"index.0faed59aba61a193989deb0dd4e365a53735b8cf848286465c5f24f683e2f265\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: watchConnection\\ndescription: Overview of the watchConnection method\\n---\\n\\n# watchConnection\\n\\nSubscribe to changes to the active connection\\n\\n## Import\\n\\n```ts\\nimport { watchConnection } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { watchConnection } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nwatchConnection(config)(console.log);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe account config\\n\\n## Returns\\n\\n`(onChange: (connection: Connection) => void) => (() => void)`\\na function which accepts an onChange callback that will be fired when the connection changes and returns a function to unsubscribe from the store\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/watchConnection#watchconnection\",\"html\":\"\\n

Subscribe to changes to the active connection

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchConnection.mdx#watchconnection\",\"isPage\":true,\"text\":\"\\nSubscribe to changes to the active connection\\n\",\"title\":\"watchConnection\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/watchConnection#import\",\"html\":\"\\n
import { watchConnection } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchConnection.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { watchConnection } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"watchConnection\"]},{\"href\":\"/reference/account-kit/core/functions/watchConnection#usage\",\"html\":\"\\n
import { watchConnection } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchConnection(config)(console.log);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchConnection.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { watchConnection } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchConnection(config)(console.log);\\n\",\"title\":\"Usage\",\"titles\":[\"watchConnection\"]},{\"href\":\"/reference/account-kit/core/functions/watchConnection#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchConnection.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"watchConnection\"]},{\"href\":\"/reference/account-kit/core/functions/watchConnection#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe account config

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchConnection.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe account config\\n\",\"title\":\"config\",\"titles\":[\"watchConnection\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/watchConnection#returns\",\"html\":\"\\n

(onChange: (connection: Connection) => void) => (() => void)\\na function which accepts an onChange callback that will be fired when the connection changes and returns a function to unsubscribe from the store

\",\"id\":\"pages/reference/account-kit/core/functions/watchConnection.mdx#returns\",\"isPage\":false,\"text\":\"\\n(onChange: (connection: Connection) => void) => (() => void)\\na function which accepts an onChange callback that will be fired when the connection changes and returns a function to unsubscribe from the store\",\"title\":\"Returns\",\"titles\":[\"watchConnection\"]}]}],[\"index.cce16e960452fa4d5176097c09d619e130c4adcd8ba63534e2938ad41e5cd187\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: setChain\\ndescription: Overview of the setChain method\\n---\\n\\n# setChain\\n\\nAllows you to change the current chain in the core store. Note, this chain\\nmust be one of the chains configured in your original createConfig call.\\n\\n## Import\\n\\n```ts\\nimport { setChain } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { setChain } from \\\"@account-kit/core\\\";\\nimport { config } from \\\"./config\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nawait setChain(config, sepolia);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe accounts config object\\n\\n### chain\\n\\n`Chain`\\nthe chain to change to. It must be present in the connections config object\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/setChain#setchain\",\"html\":\"\\n

Allows you to change the current chain in the core store. Note, this chain\\nmust be one of the chains configured in your original createConfig call.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/setChain.mdx#setchain\",\"isPage\":true,\"text\":\"\\nAllows you to change the current chain in the core store. Note, this chain\\nmust be one of the chains configured in your original createConfig call.\\n\",\"title\":\"setChain\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/setChain#import\",\"html\":\"\\n
import { setChain } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/setChain.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { setChain } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"setChain\"]},{\"href\":\"/reference/account-kit/core/functions/setChain#usage\",\"html\":\"\\n
import { setChain } from "@account-kit/core";\\nimport { config } from "./config";\\nimport { sepolia } from "@account-kit/infra";\\n \\nawait setChain(config, sepolia);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/setChain.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { setChain } from "@account-kit/core";\\nimport { config } from "./config";\\nimport { sepolia } from "@account-kit/infra";\\n \\nawait setChain(config, sepolia);\\n\",\"title\":\"Usage\",\"titles\":[\"setChain\"]},{\"href\":\"/reference/account-kit/core/functions/setChain#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/setChain.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"setChain\"]},{\"href\":\"/reference/account-kit/core/functions/setChain#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe accounts config object

\\n\",\"id\":\"pages/reference/account-kit/core/functions/setChain.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe accounts config object\\n\",\"title\":\"config\",\"titles\":[\"setChain\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/setChain#chain\",\"html\":\"\\n

Chain\\nthe chain to change to. It must be present in the connections config object

\",\"id\":\"pages/reference/account-kit/core/functions/setChain.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nthe chain to change to. It must be present in the connections config object\",\"title\":\"chain\",\"titles\":[\"setChain\",\"Parameters\"]}]}],[\"index.60b73c9bc2544700b5823b1e831eba18fc69dfd80f6041fde719298928270290\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: watchAccount\\ndescription: Overview of the watchAccount method\\n---\\n\\n# watchAccount\\n\\nWatches for changes to a specific type of account and triggers the provided callback function when changes occur.\\n\\n## Import\\n\\n```ts\\nimport { watchAccount } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { watchAccount } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nwatchAccount(\\\"LightAccount\\\", config)(console.log);\\n```\\n\\n## Parameters\\n\\n### type\\n\\n`TAccount`\\nThe type of account to watch\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nThe configuration containing client store settings\\n\\n## Returns\\n\\n`(onChange: (account: GetAccountResult) => void) => (() => void)`\\nA function that accepts a callback to be called when the account changes and returns a function to unsubscribe from the store\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/watchAccount#watchaccount\",\"html\":\"\\n

Watches for changes to a specific type of account and triggers the provided callback function when changes occur.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchAccount.mdx#watchaccount\",\"isPage\":true,\"text\":\"\\nWatches for changes to a specific type of account and triggers the provided callback function when changes occur.\\n\",\"title\":\"watchAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/watchAccount#import\",\"html\":\"\\n
import { watchAccount } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { watchAccount } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"watchAccount\"]},{\"href\":\"/reference/account-kit/core/functions/watchAccount#usage\",\"html\":\"\\n
import { watchAccount } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchAccount("LightAccount", config)(console.log);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { watchAccount } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchAccount("LightAccount", config)(console.log);\\n\",\"title\":\"Usage\",\"titles\":[\"watchAccount\"]},{\"href\":\"/reference/account-kit/core/functions/watchAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"watchAccount\"]},{\"href\":\"/reference/account-kit/core/functions/watchAccount#type\",\"html\":\"\\n

TAccount\\nThe type of account to watch

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchAccount.mdx#type\",\"isPage\":false,\"text\":\"\\nTAccount\\nThe type of account to watch\\n\",\"title\":\"type\",\"titles\":[\"watchAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/watchAccount#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nThe configuration containing client store settings

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchAccount.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nThe configuration containing client store settings\\n\",\"title\":\"config\",\"titles\":[\"watchAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/watchAccount#returns\",\"html\":\"\\n

(onChange: (account: GetAccountResult<TAccount>) => void) => (() => void)\\nA function that accepts a callback to be called when the account changes and returns a function to unsubscribe from the store

\",\"id\":\"pages/reference/account-kit/core/functions/watchAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\n(onChange: (account: GetAccountResult<TAccount>) => void) => (() => void)\\nA function that accepts a callback to be called when the account changes and returns a function to unsubscribe from the store\",\"title\":\"Returns\",\"titles\":[\"watchAccount\"]}]}],[\"index.df5bbbffc3ba85aa1b489020c1de5bd67b27279bd208670ea89c7692281e5e91\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createLightAccountClient\\ndescription: Overview of the createLightAccountClient method\\n---\\n\\n# createLightAccountClient\\n\\nCreates a light account client using the provided parameters, including account information, transport mechanism, blockchain chain, and additional client configurations. This function first creates a light account and then uses it to create a smart account client, extending it with light account client actions.\\n\\n## Import\\n\\n```ts\\nimport { createLightAccountClient } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createLightAccountClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\nimport { http, generatePrivateKey } from \\\"viem\\\";\\n\\nconst account = await createLightAccountClient({\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`CreateLightAccountClientParams`\\nThe parameters for creating a light account client\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to a `SmartAccountClient` object containing the created account information and methods\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountClient#createlightaccountclient\",\"html\":\"\\n

Creates a light account client using the provided parameters, including account information, transport mechanism, blockchain chain, and additional client configurations. This function first creates a light account and then uses it to create a smart account client, extending it with light account client actions.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountClient.mdx#createlightaccountclient\",\"isPage\":true,\"text\":\"\\nCreates a light account client using the provided parameters, including account information, transport mechanism, blockchain chain, and additional client configurations. This function first creates a light account and then uses it to create a smart account client, extending it with light account client actions.\\n\",\"title\":\"createLightAccountClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountClient#import\",\"html\":\"\\n
import { createLightAccountClient } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createLightAccountClient } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createLightAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountClient#usage\",\"html\":\"\\n
import { createLightAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createLightAccountClient({\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createLightAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createLightAccountClient({\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createLightAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createLightAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountClient#params\",\"html\":\"\\n

CreateLightAccountClientParams\\nThe parameters for creating a light account client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountClient.mdx#params\",\"isPage\":false,\"text\":\"\\nCreateLightAccountClientParams\\nThe parameters for creating a light account client\\n\",\"title\":\"params\",\"titles\":[\"createLightAccountClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountClient#returns\",\"html\":\"\\n

Promise<SmartAccountClient>\\nA promise that resolves to a SmartAccountClient object containing the created account information and methods

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SmartAccountClient>\\nA promise that resolves to a SmartAccountClient object containing the created account information and methods\",\"title\":\"Returns\",\"titles\":[\"createLightAccountClient\"]}]}],[\"index.27f80ffd4597f9242f6e178e21e7f003a3ac64f0ebe1657aee7827aff6d82e48\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createMultiOwnerLightAccountAlchemyClient\\ndescription: Overview of the createMultiOwnerLightAccountAlchemyClient method\\n---\\n\\n# createMultiOwnerLightAccountAlchemyClient\\n\\nCreates a multi-owner light account Alchemy client using the provided configuration.\\n\\n## Import\\n\\n```ts\\nimport { createMultiOwnerLightAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createMultiOwnerLightAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst lightAccountClient = await createMultiOwnerLightAccountAlchemyClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyMultiOwnerLightAccountClientConfig`\\nThe configuration for creating the Alchemy client\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to an `AlchemySmartAccountClient` object containing the created account information and methods\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient#createmultiownerlightaccountalchemyclient\",\"html\":\"\\n

Creates a multi-owner light account Alchemy client using the provided configuration.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient.mdx#createmultiownerlightaccountalchemyclient\",\"isPage\":true,\"text\":\"\\nCreates a multi-owner light account Alchemy client using the provided configuration.\\n\",\"title\":\"createMultiOwnerLightAccountAlchemyClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient#import\",\"html\":\"\\n
import { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createMultiOwnerLightAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient#usage\",\"html\":\"\\n
import { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst lightAccountClient = await createMultiOwnerLightAccountAlchemyClient({\\n  apiKey: "your-api-key",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst lightAccountClient = await createMultiOwnerLightAccountAlchemyClient({\\n apiKey: "your-api-key",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createMultiOwnerLightAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createMultiOwnerLightAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient#config\",\"html\":\"\\n

AlchemyMultiOwnerLightAccountClientConfig\\nThe configuration for creating the Alchemy client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyMultiOwnerLightAccountClientConfig\\nThe configuration for creating the Alchemy client\\n\",\"title\":\"config\",\"titles\":[\"createMultiOwnerLightAccountAlchemyClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient#returns\",\"html\":\"\\n

Promise<AlchemySmartAccountClient>\\nA promise that resolves to an AlchemySmartAccountClient object containing the created account information and methods

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountAlchemyClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<AlchemySmartAccountClient>\\nA promise that resolves to an AlchemySmartAccountClient object containing the created account information and methods\",\"title\":\"Returns\",\"titles\":[\"createMultiOwnerLightAccountAlchemyClient\"]}]}],[\"index.f7523182adaab178915ac68f2ab64ec1b73b2de89deb8a95775bc9819e69ddcf\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: watchUser\\ndescription: Overview of the watchUser method\\n---\\n\\n# watchUser\\n\\nWatches for changes to the user in the client store and triggers the provided callback when a change is detected.\\n\\n## Import\\n\\n```ts\\nimport { watchUser } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { watchUser } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nwatchUser(config)(console.log);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe configuration containing the client store\\n\\n## Returns\\n\\n`(onChange: (user: User) => void) => (() => void)`\\na function which accepts a callback that fires when the user changes and returns a function to unsubscribe from the user updates\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/watchUser#watchuser\",\"html\":\"\\n

Watches for changes to the user in the client store and triggers the provided callback when a change is detected.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchUser.mdx#watchuser\",\"isPage\":true,\"text\":\"\\nWatches for changes to the user in the client store and triggers the provided callback when a change is detected.\\n\",\"title\":\"watchUser\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/watchUser#import\",\"html\":\"\\n
import { watchUser } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchUser.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { watchUser } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"watchUser\"]},{\"href\":\"/reference/account-kit/core/functions/watchUser#usage\",\"html\":\"\\n
import { watchUser } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchUser(config)(console.log);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchUser.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { watchUser } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchUser(config)(console.log);\\n\",\"title\":\"Usage\",\"titles\":[\"watchUser\"]},{\"href\":\"/reference/account-kit/core/functions/watchUser#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchUser.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"watchUser\"]},{\"href\":\"/reference/account-kit/core/functions/watchUser#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe configuration containing the client store

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchUser.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe configuration containing the client store\\n\",\"title\":\"config\",\"titles\":[\"watchUser\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/watchUser#returns\",\"html\":\"\\n

(onChange: (user: User) => void) => (() => void)\\na function which accepts a callback that fires when the user changes and returns a function to unsubscribe from the user updates

\",\"id\":\"pages/reference/account-kit/core/functions/watchUser.mdx#returns\",\"isPage\":false,\"text\":\"\\n(onChange: (user: User) => void) => (() => void)\\na function which accepts a callback that fires when the user changes and returns a function to unsubscribe from the user updates\",\"title\":\"Returns\",\"titles\":[\"watchUser\"]}]}],[\"index.602483ed132d1e9f0a2be460db42e7148570ed3cd09506974ef9fd0889941bbf\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: watchSignerStatus\\ndescription: Overview of the watchSignerStatus method\\n---\\n\\n# watchSignerStatus\\n\\nWatches the signer status in the client store and triggers the provided callback function when the status changes.\\n\\n## Import\\n\\n```ts\\nimport { watchSignerStatus } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { watchSignerStatus } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nwatchSignerStatus(config)(console.log);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nThe configuration object containing the client store\\n\\n## Returns\\n\\n`(onChange: (status: SignerStatus) => void) => (() => void)`\\nA function that accepts a callback to be called when the signer status changes which returns a function to unsubscribe from the store\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/watchSignerStatus#watchsignerstatus\",\"html\":\"\\n

Watches the signer status in the client store and triggers the provided callback function when the status changes.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSignerStatus.mdx#watchsignerstatus\",\"isPage\":true,\"text\":\"\\nWatches the signer status in the client store and triggers the provided callback function when the status changes.\\n\",\"title\":\"watchSignerStatus\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/watchSignerStatus#import\",\"html\":\"\\n
import { watchSignerStatus } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSignerStatus.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { watchSignerStatus } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"watchSignerStatus\"]},{\"href\":\"/reference/account-kit/core/functions/watchSignerStatus#usage\",\"html\":\"\\n
import { watchSignerStatus } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchSignerStatus(config)(console.log);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSignerStatus.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { watchSignerStatus } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchSignerStatus(config)(console.log);\\n\",\"title\":\"Usage\",\"titles\":[\"watchSignerStatus\"]},{\"href\":\"/reference/account-kit/core/functions/watchSignerStatus#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSignerStatus.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"watchSignerStatus\"]},{\"href\":\"/reference/account-kit/core/functions/watchSignerStatus#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nThe configuration object containing the client store

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSignerStatus.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nThe configuration object containing the client store\\n\",\"title\":\"config\",\"titles\":[\"watchSignerStatus\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/watchSignerStatus#returns\",\"html\":\"\\n

(onChange: (status: SignerStatus) => void) => (() => void)\\nA function that accepts a callback to be called when the signer status changes which returns a function to unsubscribe from the store

\",\"id\":\"pages/reference/account-kit/core/functions/watchSignerStatus.mdx#returns\",\"isPage\":false,\"text\":\"\\n(onChange: (status: SignerStatus) => void) => (() => void)\\nA function that accepts a callback to be called when the signer status changes which returns a function to unsubscribe from the store\",\"title\":\"Returns\",\"titles\":[\"watchSignerStatus\"]}]}],[\"index.5a31ca58ff303905895be388a419b65845ed6afe70d00019d934667bd7ac342e\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createLightAccountAlchemyClient\\ndescription: Overview of the createLightAccountAlchemyClient method\\n---\\n\\n# createLightAccountAlchemyClient\\n\\nCreates an Alchemy smart account client connected to a Light Account instance.\\n\\n## Import\\n\\n```ts\\nimport { createLightAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createLightAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyLightAccountClientConfig`\\nThe configuration for setting up the Alchemy Light Account Client\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to an `AlchemySmartAccountClient` object containing the created client\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient#createlightaccountalchemyclient\",\"html\":\"\\n

Creates an Alchemy smart account client connected to a Light Account instance.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient.mdx#createlightaccountalchemyclient\",\"isPage\":true,\"text\":\"\\nCreates an Alchemy smart account client connected to a Light Account instance.\\n\",\"title\":\"createLightAccountAlchemyClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient#import\",\"html\":\"\\n
import { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createLightAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient#usage\",\"html\":\"\\n
import { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst lightAccountClient = await createLightAccountAlchemyClient({\\n  apiKey: "your-api-key",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createLightAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst lightAccountClient = await createLightAccountAlchemyClient({\\n apiKey: "your-api-key",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createLightAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createLightAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient#config\",\"html\":\"\\n

AlchemyLightAccountClientConfig\\nThe configuration for setting up the Alchemy Light Account Client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyLightAccountClientConfig\\nThe configuration for setting up the Alchemy Light Account Client\\n\",\"title\":\"config\",\"titles\":[\"createLightAccountAlchemyClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient#returns\",\"html\":\"\\n

Promise<AlchemySmartAccountClient>\\nA promise that resolves to an AlchemySmartAccountClient object containing the created client

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createLightAccountAlchemyClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<AlchemySmartAccountClient>\\nA promise that resolves to an AlchemySmartAccountClient object containing the created client\",\"title\":\"Returns\",\"titles\":[\"createLightAccountAlchemyClient\"]}]}],[\"index.6ce84296c0a0c329b5523607ee8b918e1f00c8b6d5a426f2e97993e5ecda3476\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: watchSigner\\ndescription: Overview of the watchSigner method\\n---\\n\\n# watchSigner\\n\\nSubscribe to changes of the signer instance on the client store.\\n\\n## Import\\n\\n```ts\\nimport { watchSigner } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { watchSigner } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nwatchSigner(config)(console.log);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe account config containing the client store\\n\\n## Returns\\n\\n`(onChange: (chain: AlchemyWebSigner) => void) => (() => void)`\\na function which accepts an onChange callback that will be fired when the signer changes and returns a function to unsubscribe from the store\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/watchSigner#watchsigner\",\"html\":\"\\n

Subscribe to changes of the signer instance on the client store.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSigner.mdx#watchsigner\",\"isPage\":true,\"text\":\"\\nSubscribe to changes of the signer instance on the client store.\\n\",\"title\":\"watchSigner\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/watchSigner#import\",\"html\":\"\\n
import { watchSigner } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { watchSigner } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"watchSigner\"]},{\"href\":\"/reference/account-kit/core/functions/watchSigner#usage\",\"html\":\"\\n
import { watchSigner } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchSigner(config)(console.log);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSigner.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { watchSigner } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchSigner(config)(console.log);\\n\",\"title\":\"Usage\",\"titles\":[\"watchSigner\"]},{\"href\":\"/reference/account-kit/core/functions/watchSigner#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSigner.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"watchSigner\"]},{\"href\":\"/reference/account-kit/core/functions/watchSigner#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe account config containing the client store

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchSigner.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe account config containing the client store\\n\",\"title\":\"config\",\"titles\":[\"watchSigner\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/watchSigner#returns\",\"html\":\"\\n

(onChange: (chain: AlchemyWebSigner) => void) => (() => void)\\na function which accepts an onChange callback that will be fired when the signer changes and returns a function to unsubscribe from the store

\",\"id\":\"pages/reference/account-kit/core/functions/watchSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\n(onChange: (chain: AlchemyWebSigner) => void) => (() => void)\\na function which accepts an onChange callback that will be fired when the signer changes and returns a function to unsubscribe from the store\",\"title\":\"Returns\",\"titles\":[\"watchSigner\"]}]}],[\"index.fc3de77da0262cef608dc82e87e4eca9858eb70e57f4b0e9c73350e0154aadff\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getConnection\\ndescription: Overview of the getConnection method\\n---\\n\\n# getConnection\\n\\nUsed to get the connection for the currently active chain\\n\\n## Import\\n\\n```ts\\nimport { getConnection } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getConnection } from \\\"@account-kit/core\\\";\\nimport { config } from \\\"./config\\\";\\n\\nconst connection = getConnection(config);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe account config\\n\\n## Returns\\n\\n`Connection`\\na connection object for the current active chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/getConnection#getconnection\",\"html\":\"\\n

Used to get the connection for the currently active chain

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getConnection.mdx#getconnection\",\"isPage\":true,\"text\":\"\\nUsed to get the connection for the currently active chain\\n\",\"title\":\"getConnection\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/getConnection#import\",\"html\":\"\\n
import { getConnection } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getConnection.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getConnection } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"getConnection\"]},{\"href\":\"/reference/account-kit/core/functions/getConnection#usage\",\"html\":\"\\n
import { getConnection } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nconst connection = getConnection(config);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getConnection.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getConnection } from "@account-kit/core";\\nimport { config } from "./config";\\n \\nconst connection = getConnection(config);\\n\",\"title\":\"Usage\",\"titles\":[\"getConnection\"]},{\"href\":\"/reference/account-kit/core/functions/getConnection#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/getConnection.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getConnection\"]},{\"href\":\"/reference/account-kit/core/functions/getConnection#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe account config

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getConnection.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe account config\\n\",\"title\":\"config\",\"titles\":[\"getConnection\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/getConnection#returns\",\"html\":\"\\n

Connection\\na connection object for the current active chain

\",\"id\":\"pages/reference/account-kit/core/functions/getConnection.mdx#returns\",\"isPage\":false,\"text\":\"\\nConnection\\na connection object for the current active chain\",\"title\":\"Returns\",\"titles\":[\"getConnection\"]}]}],[\"index.40d6854e92c4418aed7535627612a9c5dc3d3f5ed2c417ee9135e17032efce04\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: combineSignatures\\ndescription: Overview of the combineSignatures method\\n---\\n\\n# combineSignatures\\n\\nCombines multiple signatures with provided upper limit values for gas fees and returns the concatenated result.\\n\\n## Import\\n\\n```ts\\nimport { combineSignatures } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { combineSignatures } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst combinedSignature = combineSignatures({\\n// this is the upper limit pre-verification gas\\nupperLimitPvg: \\\"0x01\\\",\\nupperLimitMaxFeePerGas: \\\"0x02\\\",\\nupperLimitMaxPriorityFeePerGas: \\\"0x03\\\",\\nsignatures: [{\\nsignerType: \\\"EOA\\\",\\nuserOpSigType: \\\"UPPERLIMIT\\\",\\nsigner: `0x...`,\\nsignature: `0x...`,\\n}]\\nusingMaxValues: false,\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`CombineSignaturesParams`\\nThe function parameters\\n\\n## Returns\\n\\n`Hex`\\nThe concatenated result of padding and formatting the provided values and signatures\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/combineSignatures#combinesignatures\",\"html\":\"\\n

Combines multiple signatures with provided upper limit values for gas fees and returns the concatenated result.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/combineSignatures.mdx#combinesignatures\",\"isPage\":true,\"text\":\"\\nCombines multiple signatures with provided upper limit values for gas fees and returns the concatenated result.\\n\",\"title\":\"combineSignatures\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/combineSignatures#import\",\"html\":\"\\n
import { combineSignatures } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/combineSignatures.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { combineSignatures } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"combineSignatures\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/combineSignatures#usage\",\"html\":\"\\n
import { combineSignatures } from "@account-kit/smart-contracts";\\n \\nconst combinedSignature = combineSignatures({\\n// this is the upper limit pre-verification gas\\nupperLimitPvg: "0x01",\\nupperLimitMaxFeePerGas: "0x02",\\nupperLimitMaxPriorityFeePerGas: "0x03",\\nsignatures: [{\\nsignerType: "EOA",\\nuserOpSigType: "UPPERLIMIT",\\nsigner: `0x...`,\\nsignature: `0x...`,\\n}]\\nusingMaxValues: false,\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/combineSignatures.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { combineSignatures } from "@account-kit/smart-contracts";\\n \\nconst combinedSignature = combineSignatures({\\n// this is the upper limit pre-verification gas\\nupperLimitPvg: "0x01",\\nupperLimitMaxFeePerGas: "0x02",\\nupperLimitMaxPriorityFeePerGas: "0x03",\\nsignatures: [{\\nsignerType: "EOA",\\nuserOpSigType: "UPPERLIMIT",\\nsigner: `0x...`,\\nsignature: `0x...`,\\n}]\\nusingMaxValues: false,\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"combineSignatures\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/combineSignatures#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/combineSignatures.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"combineSignatures\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/combineSignatures#params\",\"html\":\"\\n

CombineSignaturesParams\\nThe function parameters

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/combineSignatures.mdx#params\",\"isPage\":false,\"text\":\"\\nCombineSignaturesParams\\nThe function parameters\\n\",\"title\":\"params\",\"titles\":[\"combineSignatures\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/combineSignatures#returns\",\"html\":\"\\n

Hex\\nThe concatenated result of padding and formatting the provided values and signatures

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/combineSignatures.mdx#returns\",\"isPage\":false,\"text\":\"\\nHex\\nThe concatenated result of padding and formatting the provided values and signatures\",\"title\":\"Returns\",\"titles\":[\"combineSignatures\"]}]}],[\"index.6c67b78d9f16bd5847dfbf5ba48c64a040065ec6e0d373466e67301b62044e04\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getChain\\ndescription: Overview of the getChain method\\n---\\n\\n# getChain\\n\\nGets the currently active chain\\n\\n## Import\\n\\n```ts\\nimport { getChain } from \\\"@account-kit/core\\\";\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe account config object\\n\\n## Returns\\n\\n`Chain`\\nthe currently active chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/getChain#getchain\",\"html\":\"\\n

Gets the currently active chain

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getChain.mdx#getchain\",\"isPage\":true,\"text\":\"\\nGets the currently active chain\\n\",\"title\":\"getChain\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/getChain#import\",\"html\":\"\\n
import { getChain } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/getChain.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getChain } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"getChain\"]},{\"href\":\"/reference/account-kit/core/functions/getChain#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/getChain.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getChain\"]},{\"href\":\"/reference/account-kit/core/functions/getChain#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe account config object

\\n\",\"id\":\"pages/reference/account-kit/core/functions/getChain.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe account config object\\n\",\"title\":\"config\",\"titles\":[\"getChain\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/getChain#returns\",\"html\":\"\\n

Chain\\nthe currently active chain

\",\"id\":\"pages/reference/account-kit/core/functions/getChain.mdx#returns\",\"isPage\":false,\"text\":\"\\nChain\\nthe currently active chain\",\"title\":\"Returns\",\"titles\":[\"getChain\"]}]}],[\"index.3f6e2ee43b9bcae7cc17843c9f354c98dc39ac5df8b72fcc0616b117f6f6bfea\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createModularAccountAlchemyClient\\ndescription: Overview of the createModularAccountAlchemyClient method\\n---\\n\\n# createModularAccountAlchemyClient\\n\\nCreates a modular account Alchemy client with the provided configuration.\\n\\n## Import\\n\\n```ts\\nimport { createModularAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createModularAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst alchemyAccountClient = await createModularAccountAlchemyClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyModularAccountClientConfig`\\nThe configuration for creating the Alchemy client\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to an `AlchemySmartAccountClient` configured with the desired plugins and actions\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient#createmodularaccountalchemyclient\",\"html\":\"\\n

Creates a modular account Alchemy client with the provided configuration.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient.mdx#createmodularaccountalchemyclient\",\"isPage\":true,\"text\":\"\\nCreates a modular account Alchemy client with the provided configuration.\\n\",\"title\":\"createModularAccountAlchemyClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient#import\",\"html\":\"\\n
import { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createModularAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient#usage\",\"html\":\"\\n
import { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst alchemyAccountClient = await createModularAccountAlchemyClient({\\n  apiKey: "your-api-key",\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst alchemyAccountClient = await createModularAccountAlchemyClient({\\n apiKey: "your-api-key",\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createModularAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createModularAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient#config\",\"html\":\"\\n

AlchemyModularAccountClientConfig\\nThe configuration for creating the Alchemy client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyModularAccountClientConfig\\nThe configuration for creating the Alchemy client\\n\",\"title\":\"config\",\"titles\":[\"createModularAccountAlchemyClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient#returns\",\"html\":\"\\n

Promise<AlchemySmartAccountClient>\\nA promise that resolves to an AlchemySmartAccountClient configured with the desired plugins and actions

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createModularAccountAlchemyClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<AlchemySmartAccountClient>\\nA promise that resolves to an AlchemySmartAccountClient configured with the desired plugins and actions\",\"title\":\"Returns\",\"titles\":[\"createModularAccountAlchemyClient\"]}]}],[\"index.2a94972d525e2461e593c0b23640aed8b01fe2da10ce38e10df32c52c6dd4e99\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: watchChain\\ndescription: Overview of the watchChain method\\n---\\n\\n# watchChain\\n\\nAllows you to subscribe to changes of the chain in the client store.\\n\\n## Import\\n\\n```ts\\nimport { watchChain } from \\\"@account-kit/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { watchChain } from \\\"@account-kit/core\\\";\\n// see createConfig for more information on how to create a config\\nimport { config } from \\\"./config\\\";\\n\\nwatchChain(config)(console.log);\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyAccountsConfig`\\nthe account config object\\n\\n## Returns\\n\\n`(onChange: (chain: Chain) => void) => (() => void)`\\na function which accepts an onChange callback that will be fired when the chain changes and returns a function to unsubscribe from the store\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/functions/watchChain#watchchain\",\"html\":\"\\n

Allows you to subscribe to changes of the chain in the client store.

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchChain.mdx#watchchain\",\"isPage\":true,\"text\":\"\\nAllows you to subscribe to changes of the chain in the client store.\\n\",\"title\":\"watchChain\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/functions/watchChain#import\",\"html\":\"\\n
import { watchChain } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchChain.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { watchChain } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"watchChain\"]},{\"href\":\"/reference/account-kit/core/functions/watchChain#usage\",\"html\":\"\\n
import { watchChain } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchChain(config)(console.log);
\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchChain.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { watchChain } from "@account-kit/core";\\n// see createConfig for more information on how to create a config\\nimport { config } from "./config";\\n \\nwatchChain(config)(console.log);\\n\",\"title\":\"Usage\",\"titles\":[\"watchChain\"]},{\"href\":\"/reference/account-kit/core/functions/watchChain#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchChain.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"watchChain\"]},{\"href\":\"/reference/account-kit/core/functions/watchChain#config\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe account config object

\\n\",\"id\":\"pages/reference/account-kit/core/functions/watchChain.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe account config object\\n\",\"title\":\"config\",\"titles\":[\"watchChain\",\"Parameters\"]},{\"href\":\"/reference/account-kit/core/functions/watchChain#returns\",\"html\":\"\\n

(onChange: (chain: Chain) => void) => (() => void)\\na function which accepts an onChange callback that will be fired when the chain changes and returns a function to unsubscribe from the store

\",\"id\":\"pages/reference/account-kit/core/functions/watchChain.mdx#returns\",\"isPage\":false,\"text\":\"\\n(onChange: (chain: Chain) => void) => (() => void)\\na function which accepts an onChange callback that will be fired when the chain changes and returns a function to unsubscribe from the store\",\"title\":\"Returns\",\"titles\":[\"watchChain\"]}]}],[\"index.b68534fd0da152fe1e06ad01ccc402a81ad414c36333cf234dba3820eeac6aa7\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: accountLoupeActions\\ndescription: Overview of the accountLoupeActions method\\n---\\n\\n# accountLoupeActions\\n\\nProvides a set of actions for account loupe operations using the specified client.\\nNOTE: this is already added to the client when using any of the Modular Account Clients.\\n\\n## Import\\n\\n```ts\\nimport { accountLoupeActions } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { accountLoupeActions } from \\\"@account-kit/smart-contracts\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst client = createSmartAccountClient(...).extend(accountLoupeActions);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nthe client to be used for executing the account loupe actions\\n\\n## Returns\\n\\n`AccountLoupeActions`\\nan object containing account loupe actions like `getExecutionFunctionConfig`, `getExecutionHooks`, `getPreValidationHooks`, and `getInstalledPlugins`\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/accountLoupeActions#accountloupeactions\",\"html\":\"\\n

Provides a set of actions for account loupe operations using the specified client.\\nNOTE: this is already added to the client when using any of the Modular Account Clients.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/accountLoupeActions.mdx#accountloupeactions\",\"isPage\":true,\"text\":\"\\nProvides a set of actions for account loupe operations using the specified client.\\nNOTE: this is already added to the client when using any of the Modular Account Clients.\\n\",\"title\":\"accountLoupeActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/accountLoupeActions#import\",\"html\":\"\\n
import { accountLoupeActions } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/accountLoupeActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { accountLoupeActions } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"accountLoupeActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/accountLoupeActions#usage\",\"html\":\"\\n
import { accountLoupeActions } from "@account-kit/smart-contracts";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst client = createSmartAccountClient(...).extend(accountLoupeActions);
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/accountLoupeActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { accountLoupeActions } from "@account-kit/smart-contracts";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst client = createSmartAccountClient(...).extend(accountLoupeActions);\\n\",\"title\":\"Usage\",\"titles\":[\"accountLoupeActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/accountLoupeActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/accountLoupeActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"accountLoupeActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/accountLoupeActions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nthe client to be used for executing the account loupe actions

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/accountLoupeActions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nthe client to be used for executing the account loupe actions\\n\",\"title\":\"client\",\"titles\":[\"accountLoupeActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/accountLoupeActions#returns\",\"html\":\"\\n

AccountLoupeActions<TAccount>\\nan object containing account loupe actions like getExecutionFunctionConfig, getExecutionHooks, getPreValidationHooks, and getInstalledPlugins

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/accountLoupeActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nAccountLoupeActions<TAccount>\\nan object containing account loupe actions like getExecutionFunctionConfig, getExecutionHooks, getPreValidationHooks, and getInstalledPlugins\",\"title\":\"Returns\",\"titles\":[\"accountLoupeActions\"]}]}],[\"index.b4135e0200c82ea6a2a7c1d2c7910ad53d62382f91ba7208230c9d9a8098bb90\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createMultiOwnerLightAccountClient\\ndescription: Overview of the createMultiOwnerLightAccountClient method\\n---\\n\\n# createMultiOwnerLightAccountClient\\n\\nCreates a multi-owner light account client using the provided parameters. It first creates a multi-owner light account and then creates a smart account client with the provided configurations.\\n\\n## Import\\n\\n```ts\\nimport { createMultiOwnerLightAccountClient } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createMultiOwnerLightAccountClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\nimport { http, generatePrivateKey } from \\\"viem\\\";\\n\\nconst account = await createMultiOwnerLightAccountClient({\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`CreateMultiOwnerLightAccountClientParams`\\nthe configuration for creating the multi-owner light account client\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to a `SmartAccountClient` containing the created account client and relevant methods\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient#createmultiownerlightaccountclient\",\"html\":\"\\n

Creates a multi-owner light account client using the provided parameters. It first creates a multi-owner light account and then creates a smart account client with the provided configurations.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient.mdx#createmultiownerlightaccountclient\",\"isPage\":true,\"text\":\"\\nCreates a multi-owner light account client using the provided parameters. It first creates a multi-owner light account and then creates a smart account client with the provided configurations.\\n\",\"title\":\"createMultiOwnerLightAccountClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient#import\",\"html\":\"\\n
import { createMultiOwnerLightAccountClient } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerLightAccountClient } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createMultiOwnerLightAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient#usage\",\"html\":\"\\n
import { createMultiOwnerLightAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createMultiOwnerLightAccountClient({\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerLightAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createMultiOwnerLightAccountClient({\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createMultiOwnerLightAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createMultiOwnerLightAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient#params\",\"html\":\"\\n

CreateMultiOwnerLightAccountClientParams\\nthe configuration for creating the multi-owner light account client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient.mdx#params\",\"isPage\":false,\"text\":\"\\nCreateMultiOwnerLightAccountClientParams\\nthe configuration for creating the multi-owner light account client\\n\",\"title\":\"params\",\"titles\":[\"createMultiOwnerLightAccountClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient#returns\",\"html\":\"\\n

Promise<SmartAccountClient>\\na promise that resolves to a SmartAccountClient containing the created account client and relevant methods

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerLightAccountClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SmartAccountClient>\\na promise that resolves to a SmartAccountClient containing the created account client and relevant methods\",\"title\":\"Returns\",\"titles\":[\"createMultiOwnerLightAccountClient\"]}]}],[\"index.27c54d2840daa7ffc750b2584dbbf8c8896047230094d212a96d733f4c5d3b5e\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createMultiOwnerModularAccount\\ndescription: Overview of the createMultiOwnerModularAccount method\\n---\\n\\n# createMultiOwnerModularAccount\\n\\nCreates a multi-owner modular account with the given parameters, including transport, chain, signer, account address, initialization code, entry point, factory address, owners, and salt.\\nEnsures that the owners are unique, ordered, and non-zero.\\n\\n## Import\\n\\n```ts\\nimport { createMultiOwnerModularAccount } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createMultiOwnerModularAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\nimport { http, generatePrivateKey } from \\\"viem\\\";\\n\\nconst account = await createMultiOwnerModularAccount({\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`CreateMultiOwnerModularAccountParams`\\nConfiguration parameters for creating a multi-owner modular account\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to a `MultiOwnerModularAccount` object containing the created account information and methods\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount#createmultiownermodularaccount\",\"html\":\"\\n

Creates a multi-owner modular account with the given parameters, including transport, chain, signer, account address, initialization code, entry point, factory address, owners, and salt.\\nEnsures that the owners are unique, ordered, and non-zero.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount.mdx#createmultiownermodularaccount\",\"isPage\":true,\"text\":\"\\nCreates a multi-owner modular account with the given parameters, including transport, chain, signer, account address, initialization code, entry point, factory address, owners, and salt.\\nEnsures that the owners are unique, ordered, and non-zero.\\n\",\"title\":\"createMultiOwnerModularAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount#import\",\"html\":\"\\n
import { createMultiOwnerModularAccount } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerModularAccount } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createMultiOwnerModularAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount#usage\",\"html\":\"\\n
import { createMultiOwnerModularAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createMultiOwnerModularAccount({\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerModularAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem";\\n \\nconst account = await createMultiOwnerModularAccount({\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createMultiOwnerModularAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createMultiOwnerModularAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount#config\",\"html\":\"\\n

CreateMultiOwnerModularAccountParams\\nConfiguration parameters for creating a multi-owner modular account

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount.mdx#config\",\"isPage\":false,\"text\":\"\\nCreateMultiOwnerModularAccountParams\\nConfiguration parameters for creating a multi-owner modular account\\n\",\"title\":\"config\",\"titles\":[\"createMultiOwnerModularAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount#returns\",\"html\":\"\\n

Promise<MultiOwnerModularAccount>\\nA promise that resolves to a MultiOwnerModularAccount object containing the created account information and methods

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<MultiOwnerModularAccount>\\nA promise that resolves to a MultiOwnerModularAccount object containing the created account information and methods\",\"title\":\"Returns\",\"titles\":[\"createMultiOwnerModularAccount\"]}]}],[\"index.c7a55e01bc722122031a7babf715f1e834477a97c5cdbe158b87591d68054e81\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createMultiOwnerModularAccountClient\\ndescription: Overview of the createMultiOwnerModularAccountClient method\\n---\\n\\n# createMultiOwnerModularAccountClient\\n\\nCreates a multi-owner modular account client with the provided parameters including account, transport, chain, and additional client configuration. This function uses a modular account and extends it with various plugin actions.\\n\\n## Import\\n\\n```ts\\nimport { createMultiOwnerModularAccountClient } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createMultiOwnerModularAccountClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nconst accountClient = await createMultiOwnerModularAccountClient({\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`CreateMultiOwnerModularAccountClientParams`\\nThe parameters for creating the multi-owner modular account client\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to a `SmartAccountClient` instance with extended plugin actions\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient#createmultiownermodularaccountclient\",\"html\":\"\\n

Creates a multi-owner modular account client with the provided parameters including account, transport, chain, and additional client configuration. This function uses a modular account and extends it with various plugin actions.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient.mdx#createmultiownermodularaccountclient\",\"isPage\":true,\"text\":\"\\nCreates a multi-owner modular account client with the provided parameters including account, transport, chain, and additional client configuration. This function uses a modular account and extends it with various plugin actions.\\n\",\"title\":\"createMultiOwnerModularAccountClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient#import\",\"html\":\"\\n
import { createMultiOwnerModularAccountClient } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerModularAccountClient } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createMultiOwnerModularAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient#usage\",\"html\":\"\\n
import { createMultiOwnerModularAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nconst accountClient = await createMultiOwnerModularAccountClient({\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createMultiOwnerModularAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nconst accountClient = await createMultiOwnerModularAccountClient({\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createMultiOwnerModularAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createMultiOwnerModularAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient#config\",\"html\":\"\\n

CreateMultiOwnerModularAccountClientParams\\nThe parameters for creating the multi-owner modular account client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient.mdx#config\",\"isPage\":false,\"text\":\"\\nCreateMultiOwnerModularAccountClientParams\\nThe parameters for creating the multi-owner modular account client\\n\",\"title\":\"config\",\"titles\":[\"createMultiOwnerModularAccountClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient#returns\",\"html\":\"\\n

Promise<SmartAccountClient>\\nA promise that resolves to a SmartAccountClient instance with extended plugin actions

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultiOwnerModularAccountClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SmartAccountClient>\\nA promise that resolves to a SmartAccountClient instance with extended plugin actions\",\"title\":\"Returns\",\"titles\":[\"createMultiOwnerModularAccountClient\"]}]}],[\"index.99871ea6ae908285d1c2d32449b8d9c5b67bbd3f35cc411d6ca36d48cbdaca77\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createMultisigModularAccountClient\\ndescription: Overview of the createMultisigModularAccountClient method\\n---\\n\\n# createMultisigModularAccountClient\\n\\nCreates a multisig modular account client using the provided parameters including account details, transport, chain, and additional client configuration. This function constructs the multisig modular account and extends it with various actions to create a comprehensive client.\\n\\n## Import\\n\\n```ts\\nimport { createMultisigModularAccountClient } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createMultisigModularAccountClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nconst accountClient = await createMultisigModularAccountClient({\\n chain: sepolia,\\n transport: http(\\\"RPC_URL\\\"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n owners: [], // other owners on the account\\n threshold: 2, // 2 of N signatures\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`CreateMultisigModularAccountClientParams`\\nthe parameters for configuring the multisig modular account client\\n\\n## Returns\\n\\n`Promise, {}, SmartAccountClientRpcSchema, MultisigUserOperationContext>>`\\na promise that resolves to a `SmartAccountClient` object extended with the multisig modular account and additional actions\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient#createmultisigmodularaccountclient\",\"html\":\"\\n

Creates a multisig modular account client using the provided parameters including account details, transport, chain, and additional client configuration. This function constructs the multisig modular account and extends it with various actions to create a comprehensive client.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient.mdx#createmultisigmodularaccountclient\",\"isPage\":true,\"text\":\"\\nCreates a multisig modular account client using the provided parameters including account details, transport, chain, and additional client configuration. This function constructs the multisig modular account and extends it with various actions to create a comprehensive client.\\n\",\"title\":\"createMultisigModularAccountClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient#import\",\"html\":\"\\n
import { createMultisigModularAccountClient } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createMultisigModularAccountClient } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createMultisigModularAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient#usage\",\"html\":\"\\n
import { createMultisigModularAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nconst accountClient = await createMultisigModularAccountClient({\\n  chain: sepolia,\\n  transport: http("RPC_URL"),\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n  owners: [], // other owners on the account\\n  threshold: 2, // 2 of N signatures\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createMultisigModularAccountClient } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http } from "viem";\\nimport { generatePrivateKey } from "viem/accounts";\\n \\nconst accountClient = await createMultisigModularAccountClient({\\n chain: sepolia,\\n transport: http("RPC_URL"),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n owners: [], // other owners on the account\\n threshold: 2, // 2 of N signatures\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createMultisigModularAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createMultisigModularAccountClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient#config\",\"html\":\"\\n

CreateMultisigModularAccountClientParams\\nthe parameters for configuring the multisig modular account client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient.mdx#config\",\"isPage\":false,\"text\":\"\\nCreateMultisigModularAccountClientParams\\nthe parameters for configuring the multisig modular account client\\n\",\"title\":\"config\",\"titles\":[\"createMultisigModularAccountClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient#returns\",\"html\":\"\\n

Promise<SmartAccountClient<Transport, Chain, MultisigModularAccount<SmartAccountSigner>, {}, SmartAccountClientRpcSchema, MultisigUserOperationContext>>\\na promise that resolves to a SmartAccountClient object extended with the multisig modular account and additional actions

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccountClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SmartAccountClient<Transport, Chain, MultisigModularAccount<SmartAccountSigner>, {}, SmartAccountClientRpcSchema, MultisigUserOperationContext>>\\na promise that resolves to a SmartAccountClient object extended with the multisig modular account and additional actions\",\"title\":\"Returns\",\"titles\":[\"createMultisigModularAccountClient\"]}]}],[\"index.206245a6dc0bfb3d21dcd6333503eb4986ab06cbad3111ca201c46b2c257bc6d\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createMultisigModularAccount\\ndescription: Overview of the createMultisigModularAccount method\\n---\\n\\n# createMultisigModularAccount\\n\\nCreates a multisig modular account using the provided parameters, including transport, chain, signer, account address, and other account settings. It configures the account with multiple owners and the specified threshold.\\n\\n## Import\\n\\n```ts\\nimport { createMultisigModularAccount } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createMultisigModularAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\nimport { http, generatePrivateKey } from \\\"viem\\\"\\n\\nconst account = await createMultisigModularAccount({\\nchain: sepolia,\\ntransport: http(\\\"RPC_URL\\\"),\\nsigner: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\nowners: [...], // other owners on the account\\nthreshold: 2, // 2 of N signatures\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`CreateMultisigModularAccountParams`\\nThe parameters for creating a multisig modular account.\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to a `MultisigModularAccount` object containing the created account information and methods.\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccount#createmultisigmodularaccount\",\"html\":\"\\n

Creates a multisig modular account using the provided parameters, including transport, chain, signer, account address, and other account settings. It configures the account with multiple owners and the specified threshold.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccount.mdx#createmultisigmodularaccount\",\"isPage\":true,\"text\":\"\\nCreates a multisig modular account using the provided parameters, including transport, chain, signer, account address, and other account settings. It configures the account with multiple owners and the specified threshold.\\n\",\"title\":\"createMultisigModularAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccount#import\",\"html\":\"\\n
import { createMultisigModularAccount } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createMultisigModularAccount } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createMultisigModularAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccount#usage\",\"html\":\"\\n
import { createMultisigModularAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem"\\n \\nconst account = await createMultisigModularAccount({\\nchain: sepolia,\\ntransport: http("RPC_URL"),\\nsigner: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\nowners: [...], // other owners on the account\\nthreshold: 2, // 2 of N signatures\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createMultisigModularAccount } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "viem/chains";\\nimport { http, generatePrivateKey } from "viem"\\n \\nconst account = await createMultisigModularAccount({\\nchain: sepolia,\\ntransport: http("RPC_URL"),\\nsigner: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\nowners: [...], // other owners on the account\\nthreshold: 2, // 2 of N signatures\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createMultisigModularAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createMultisigModularAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccount#config\",\"html\":\"\\n

CreateMultisigModularAccountParams\\nThe parameters for creating a multisig modular account.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccount.mdx#config\",\"isPage\":false,\"text\":\"\\nCreateMultisigModularAccountParams\\nThe parameters for creating a multisig modular account.\\n\",\"title\":\"config\",\"titles\":[\"createMultisigModularAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigModularAccount#returns\",\"html\":\"\\n

Promise<MultisigModularAccount>\\nA promise that resolves to a MultisigModularAccount object containing the created account information and methods.

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigModularAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<MultisigModularAccount>\\nA promise that resolves to a MultisigModularAccount object containing the created account information and methods.\",\"title\":\"Returns\",\"titles\":[\"createMultisigModularAccount\"]}]}],[\"index.036d86ae76ce33255be8f1a0e1b3132ffe4e213a4dd3050f4bdc3fe40ca595b5\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: defaultLightAccountVersion\\ndescription: Overview of the defaultLightAccountVersion method\\n---\\n\\n# defaultLightAccountVersion\\n\\nGet the default light account version for the given light account type\\n\\n## Import\\n\\n```ts\\nimport { defaultLightAccountVersion } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Returns\\n\\n`LightAccountVersion`\\nthe default version for the given light account type\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/defaultLightAccountVersion#defaultlightaccountversion\",\"html\":\"\\n

Get the default light account version for the given light account type

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/defaultLightAccountVersion.mdx#defaultlightaccountversion\",\"isPage\":true,\"text\":\"\\nGet the default light account version for the given light account type\\n\",\"title\":\"defaultLightAccountVersion\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/defaultLightAccountVersion#import\",\"html\":\"\\n
import { defaultLightAccountVersion } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/defaultLightAccountVersion.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { defaultLightAccountVersion } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"defaultLightAccountVersion\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/defaultLightAccountVersion#returns\",\"html\":\"\\n

LightAccountVersion<TLightAccountType>\\nthe default version for the given light account type

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/defaultLightAccountVersion.mdx#returns\",\"isPage\":false,\"text\":\"\\nLightAccountVersion<TLightAccountType>\\nthe default version for the given light account type\",\"title\":\"Returns\",\"titles\":[\"defaultLightAccountVersion\"]}]}],[\"index.d94ffc1bc06400a083f652c63e33a0ef54754a330c4a87778ec64f0c1e79f361\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createMultisigAccountAlchemyClient\\ndescription: Overview of the createMultisigAccountAlchemyClient method\\n---\\n\\n# createMultisigAccountAlchemyClient\\n\\nCreates an Alchemy client for a multisig account using the provided configuration.\\n\\n## Import\\n\\n```ts\\nimport { createMultisigAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createMultisigAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\"\\n\\nconst alchemyAccountClient = await createMultisigAccountAlchemyClient({\\napiKey: \\\"your-api-key\\\",\\nchain: sepolia,\\nsigner: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\nowners: [...], // other owners on the account\\nthreshold: 2, // 2 of N signatures\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemyMultisigAccountClientConfig`\\nThe configuration for the Alchemy multisig account client\\n\\n## Returns\\n\\n`Promise, MultisigPluginActions> & PluginManagerActions> & AccountLoupeActions>, MultisigUserOperationContext>>`\\nA promise that resolves to an Alchemy Smart Account Client for multisig accounts with extended functionalities.\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient#createmultisigaccountalchemyclient\",\"html\":\"\\n

Creates an Alchemy client for a multisig account using the provided configuration.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient.mdx#createmultisigaccountalchemyclient\",\"isPage\":true,\"text\":\"\\nCreates an Alchemy client for a multisig account using the provided configuration.\\n\",\"title\":\"createMultisigAccountAlchemyClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient#import\",\"html\":\"\\n
import { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"createMultisigAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient#usage\",\"html\":\"\\n
import { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem"\\n \\nconst alchemyAccountClient = await createMultisigAccountAlchemyClient({\\napiKey: "your-api-key",\\nchain: sepolia,\\nsigner: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\nowners: [...], // other owners on the account\\nthreshold: 2, // 2 of N signatures\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createMultisigAccountAlchemyClient } from "@account-kit/smart-contracts";\\nimport { sepolia } from "@account-kit/infra";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem"\\n \\nconst alchemyAccountClient = await createMultisigAccountAlchemyClient({\\napiKey: "your-api-key",\\nchain: sepolia,\\nsigner: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\nowners: [...], // other owners on the account\\nthreshold: 2, // 2 of N signatures\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createMultisigAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createMultisigAccountAlchemyClient\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient#config\",\"html\":\"\\n

AlchemyMultisigAccountClientConfig\\nThe configuration for the Alchemy multisig account client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemyMultisigAccountClientConfig\\nThe configuration for the Alchemy multisig account client\\n\",\"title\":\"config\",\"titles\":[\"createMultisigAccountAlchemyClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient#returns\",\"html\":\"\\n

Promise<AlchemySmartAccountClient<Transport, Chain | undefined, MultisigModularAccount<SmartAccountSigner>, MultisigPluginActions<MultisigModularAccount<SmartAccountSigner>> & PluginManagerActions<MultisigModularAccount<SmartAccountSigner>> & AccountLoupeActions<MultisigModularAccount<SmartAccountSigner>>, MultisigUserOperationContext>>\\nA promise that resolves to an Alchemy Smart Account Client for multisig accounts with extended functionalities.

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/createMultisigAccountAlchemyClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<AlchemySmartAccountClient<Transport, Chain | undefined, MultisigModularAccount<SmartAccountSigner>, MultisigPluginActions<MultisigModularAccount<SmartAccountSigner>> & PluginManagerActions<MultisigModularAccount<SmartAccountSigner>> & AccountLoupeActions<MultisigModularAccount<SmartAccountSigner>>, MultisigUserOperationContext>>\\nA promise that resolves to an Alchemy Smart Account Client for multisig accounts with extended functionalities.\",\"title\":\"Returns\",\"titles\":[\"createMultisigAccountAlchemyClient\"]}]}],[\"index.e827d7012b83cc1ce37f7d22c26a941554945e67f255bc62143fc5efd9f15c88\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getDefaultLightAccountFactoryAddress\\ndescription: Overview of the getDefaultLightAccountFactoryAddress method\\n---\\n\\n# getDefaultLightAccountFactoryAddress\\n\\nUtility method returning the default light account factory address given a Chain object\\n\\n## Import\\n\\n```ts\\nimport { getDefaultLightAccountFactoryAddress } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Parameters\\n\\n### chain\\n\\n`Chain`\\n\\n- a Chain object\\n\\n### version\\n\\n`LightAccountVersion`\\n\\n- the version of the light account to get the factory address for\\n\\n## Returns\\n\\n`Address`\\nan for the given chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress#getdefaultlightaccountfactoryaddress\",\"html\":\"\\n

Utility method returning the default light account factory address given a Chain object

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress.mdx#getdefaultlightaccountfactoryaddress\",\"isPage\":true,\"text\":\"\\nUtility method returning the default light account factory address given a Chain object\\n\",\"title\":\"getDefaultLightAccountFactoryAddress\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress#import\",\"html\":\"\\n
import { getDefaultLightAccountFactoryAddress } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getDefaultLightAccountFactoryAddress } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"getDefaultLightAccountFactoryAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getDefaultLightAccountFactoryAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress#chain\",\"html\":\"\\n

Chain

\\n
    \\n
  • a Chain object
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\n\\na Chain object\\n\\n\",\"title\":\"chain\",\"titles\":[\"getDefaultLightAccountFactoryAddress\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress#version\",\"html\":\"\\n

LightAccountVersion

\\n
    \\n
  • the version of the light account to get the factory address for
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress.mdx#version\",\"isPage\":false,\"text\":\"\\nLightAccountVersion\\n\\nthe version of the light account to get the factory address for\\n\\n\",\"title\":\"version\",\"titles\":[\"getDefaultLightAccountFactoryAddress\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress#returns\",\"html\":\"\\n

Address\\nan for the given chain

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultLightAccountFactoryAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nAddress\\nan for the given chain\",\"title\":\"Returns\",\"titles\":[\"getDefaultLightAccountFactoryAddress\"]}]}],[\"index.13ad1e944878f9ae153d32a8bd0202da91163c2ae7718f4f09c5117bec9a416e\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: formatSignatures\\ndescription: Overview of the formatSignatures method\\n---\\n\\n# formatSignatures\\n\\nFormats a collection of Signature objects into a single aggregated signature.\\nThe format is in the form of EOA_SIGS | CONTRACT_SIG_DATAS. The signatures are ordered\\nby signer address. The EOA SIGS contain the 65 signautre data for EOA signers and 65 bytes containing SIGNER | OFFSET | V for contract signers.\\nThe OFFSET is used to fetch the signature data from the CONTRACT_SIG_DATAS.\\n\\n## Import\\n\\n```ts\\nimport { formatSignatures } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Parameters\\n\\n### signatures\\n\\n`Signature[]`\\nthe array of Signature objects to combine into the correct aggregated signature format excluding the upper limits\\n\\n### usingMaxValues\\n\\n`boolean`\\na boolean indicating wether or not the UserOperation is using the UPPER_LIMIT for the gas and fee values\\n\\n## Returns\\n\\n`Hex`\\nthe Hex representation of the signature\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/formatSignatures#formatsignatures\",\"html\":\"\\n

Formats a collection of Signature objects into a single aggregated signature.\\nThe format is in the form of EOA_SIGS | CONTRACT_SIG_DATAS. The signatures are ordered\\nby signer address. The EOA SIGS contain the 65 signautre data for EOA signers and 65 bytes containing SIGNER | OFFSET | V for contract signers.\\nThe OFFSET is used to fetch the signature data from the CONTRACT_SIG_DATAS.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/formatSignatures.mdx#formatsignatures\",\"isPage\":true,\"text\":\"\\nFormats a collection of Signature objects into a single aggregated signature.\\nThe format is in the form of EOA_SIGS | CONTRACT_SIG_DATAS. The signatures are ordered\\nby signer address. The EOA SIGS contain the 65 signautre data for EOA signers and 65 bytes containing SIGNER | OFFSET | V for contract signers.\\nThe OFFSET is used to fetch the signature data from the CONTRACT_SIG_DATAS.\\n\",\"title\":\"formatSignatures\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/formatSignatures#import\",\"html\":\"\\n
import { formatSignatures } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/formatSignatures.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { formatSignatures } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"formatSignatures\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/formatSignatures#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/formatSignatures.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"formatSignatures\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/formatSignatures#signatures\",\"html\":\"\\n

Signature[]\\nthe array of Signature objects to combine into the correct aggregated signature format excluding the upper limits

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/formatSignatures.mdx#signatures\",\"isPage\":false,\"text\":\"\\nSignature[]\\nthe array of Signature objects to combine into the correct aggregated signature format excluding the upper limits\\n\",\"title\":\"signatures\",\"titles\":[\"formatSignatures\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/formatSignatures#usingmaxvalues\",\"html\":\"\\n

boolean\\na boolean indicating wether or not the UserOperation is using the UPPER_LIMIT for the gas and fee values

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/formatSignatures.mdx#usingmaxvalues\",\"isPage\":false,\"text\":\"\\nboolean\\na boolean indicating wether or not the UserOperation is using the UPPER_LIMIT for the gas and fee values\\n\",\"title\":\"usingMaxValues\",\"titles\":[\"formatSignatures\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/formatSignatures#returns\",\"html\":\"\\n

Hex\\nthe Hex representation of the signature

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/formatSignatures.mdx#returns\",\"isPage\":false,\"text\":\"\\nHex\\nthe Hex representation of the signature\",\"title\":\"Returns\",\"titles\":[\"formatSignatures\"]}]}],[\"index.68c734cf0d86df6c3792a034484f265e6fbd4835c45a4d906c0b4b151c394a73\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getSignerType\\ndescription: Overview of the getSignerType method\\n---\\n\\n# getSignerType\\n\\nDetermines the type of signer (Externally Owned Account (EOA) or CONTRACT) based on the provided client, signature, and signer.\\n\\n## Import\\n\\n```ts\\nimport { getSignerType } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getSignerType } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { createPublicClient, generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey());\\nconst client = createPublicClient(...);\\nconst signature = signer.signMessage(\\\"Hello World\\\");\\n\\nconst signerType = await getSignerType({ client, signature, signer }); // EOA\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`GetSignerTypeParams`\\nthe parameters including the client, signature, and signer\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the signer type, which is either \\\"EOA\\\" or \\\"CONTRACT\\\"\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/getSignerType#getsignertype\",\"html\":\"\\n

Determines the type of signer (Externally Owned Account (EOA) or CONTRACT) based on the provided client, signature, and signer.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getSignerType.mdx#getsignertype\",\"isPage\":true,\"text\":\"\\nDetermines the type of signer (Externally Owned Account (EOA) or CONTRACT) based on the provided client, signature, and signer.\\n\",\"title\":\"getSignerType\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getSignerType#import\",\"html\":\"\\n
import { getSignerType } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getSignerType.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getSignerType } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"getSignerType\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getSignerType#usage\",\"html\":\"\\n
import { getSignerType } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { createPublicClient, generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey());\\nconst client = createPublicClient(...);\\nconst signature = signer.signMessage("Hello World");\\n \\nconst signerType = await getSignerType({ client, signature, signer }); // EOA
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getSignerType.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getSignerType } from "@account-kit/smart-contracts";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { createPublicClient, generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey());\\nconst client = createPublicClient(...);\\nconst signature = signer.signMessage("Hello World");\\n \\nconst signerType = await getSignerType({ client, signature, signer }); // EOA\\n\",\"title\":\"Usage\",\"titles\":[\"getSignerType\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getSignerType#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getSignerType.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getSignerType\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getSignerType#params\",\"html\":\"\\n

GetSignerTypeParams<TTransport, TChain>\\nthe parameters including the client, signature, and signer

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getSignerType.mdx#params\",\"isPage\":false,\"text\":\"\\nGetSignerTypeParams<TTransport, TChain>\\nthe parameters including the client, signature, and signer\\n\",\"title\":\"params\",\"titles\":[\"getSignerType\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getSignerType#returns\",\"html\":\"\\n

Promise<SignerType>\\nA promise that resolves to the signer type, which is either "EOA" or "CONTRACT"

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getSignerType.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SignerType>\\nA promise that resolves to the signer type, which is either "EOA" or "CONTRACT"\",\"title\":\"Returns\",\"titles\":[\"getSignerType\"]}]}],[\"index.c2adfac186a334faf867abe58a9f0415091006a20ec5fca38947ac1bb34cbdfb\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getDefaultMultiOwnerModularAccountFactoryAddress\\ndescription: Overview of the getDefaultMultiOwnerModularAccountFactoryAddress method\\n---\\n\\n# getDefaultMultiOwnerModularAccountFactoryAddress\\n\\nUtility method returning the default multi owner msca factory address given a chain\\n\\n## Import\\n\\n```ts\\nimport { getDefaultMultiOwnerModularAccountFactoryAddress } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Parameters\\n\\n### chain\\n\\n`Chain`\\nthe chain object for which to get the address\\n\\n## Returns\\n\\n`Address`\\nthe address for the given chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress#getdefaultmultiownermodularaccountfactoryaddress\",\"html\":\"\\n

Utility method returning the default multi owner msca factory address given a chain

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress.mdx#getdefaultmultiownermodularaccountfactoryaddress\",\"isPage\":true,\"text\":\"\\nUtility method returning the default multi owner msca factory address given a chain\\n\",\"title\":\"getDefaultMultiOwnerModularAccountFactoryAddress\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress#import\",\"html\":\"\\n
import { getDefaultMultiOwnerModularAccountFactoryAddress } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getDefaultMultiOwnerModularAccountFactoryAddress } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"getDefaultMultiOwnerModularAccountFactoryAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getDefaultMultiOwnerModularAccountFactoryAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress#chain\",\"html\":\"\\n

Chain\\nthe chain object for which to get the address

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nthe chain object for which to get the address\\n\",\"title\":\"chain\",\"titles\":[\"getDefaultMultiOwnerModularAccountFactoryAddress\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress#returns\",\"html\":\"\\n

Address\\nthe address for the given chain

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerModularAccountFactoryAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nAddress\\nthe address for the given chain\",\"title\":\"Returns\",\"titles\":[\"getDefaultMultiOwnerModularAccountFactoryAddress\"]}]}],[\"index.5ea74b571a38b6f3a64081b37c9356d8dd02b9f46df99b73e07cce40efa0b1c6\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getLightAccountVersionForAccount\\ndescription: Overview of the getLightAccountVersionForAccount method\\n---\\n\\n# getLightAccountVersionForAccount\\n\\nGet the light account version definition for the given light account and chain\\n\\n## Import\\n\\n```ts\\nimport { getLightAccountVersionForAccount } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Parameters\\n\\n### account\\n\\n`LightAccountBase`\\nthe light account to get the version for\\n\\n### chain\\n\\n`Chain`\\n\\n- the chain to get the version for\\n\\n## Returns\\n\\n`Promise`\\nthe light account version definition for the given light account and chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount#getlightaccountversionforaccount\",\"html\":\"\\n

Get the light account version definition for the given light account and chain

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount.mdx#getlightaccountversionforaccount\",\"isPage\":true,\"text\":\"\\nGet the light account version definition for the given light account and chain\\n\",\"title\":\"getLightAccountVersionForAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount#import\",\"html\":\"\\n
import { getLightAccountVersionForAccount } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getLightAccountVersionForAccount } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"getLightAccountVersionForAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getLightAccountVersionForAccount\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount#account\",\"html\":\"\\n

LightAccountBase\\nthe light account to get the version for

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount.mdx#account\",\"isPage\":false,\"text\":\"\\nLightAccountBase\\nthe light account to get the version for\\n\",\"title\":\"account\",\"titles\":[\"getLightAccountVersionForAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount#chain\",\"html\":\"\\n

Chain

\\n
    \\n
  • the chain to get the version for
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\n\\nthe chain to get the version for\\n\\n\",\"title\":\"chain\",\"titles\":[\"getLightAccountVersionForAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount#returns\",\"html\":\"\\n

Promise<LightAccountVersionConfig>\\nthe light account version definition for the given light account and chain

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getLightAccountVersionForAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<LightAccountVersionConfig>\\nthe light account version definition for the given light account and chain\",\"title\":\"Returns\",\"titles\":[\"getLightAccountVersionForAccount\"]}]}],[\"index.b55dde4854d5e3e02898119007c031110080e3fa2ed341b89d671428dc5da1ff\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getDefaultMultiOwnerLightAccountFactoryAddress\\ndescription: Overview of the getDefaultMultiOwnerLightAccountFactoryAddress method\\n---\\n\\n# getDefaultMultiOwnerLightAccountFactoryAddress\\n\\nUtility method returning the default multi owner light account factory address given a Chain object\\n\\n## Import\\n\\n```ts\\nimport { getDefaultMultiOwnerLightAccountFactoryAddress } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Parameters\\n\\n### chain\\n\\n`Chain`\\n\\n- a Chain object\\n\\n### version\\n\\n`string`\\n\\n- the version of the light account to get the factory address for\\n\\n## Returns\\n\\n`Address`\\nan Address for the given chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress#getdefaultmultiownerlightaccountfactoryaddress\",\"html\":\"\\n

Utility method returning the default multi owner light account factory address given a Chain object

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress.mdx#getdefaultmultiownerlightaccountfactoryaddress\",\"isPage\":true,\"text\":\"\\nUtility method returning the default multi owner light account factory address given a Chain object\\n\",\"title\":\"getDefaultMultiOwnerLightAccountFactoryAddress\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress#import\",\"html\":\"\\n
import { getDefaultMultiOwnerLightAccountFactoryAddress } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getDefaultMultiOwnerLightAccountFactoryAddress } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"getDefaultMultiOwnerLightAccountFactoryAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getDefaultMultiOwnerLightAccountFactoryAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress#chain\",\"html\":\"\\n

Chain

\\n
    \\n
  • a Chain object
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\n\\na Chain object\\n\\n\",\"title\":\"chain\",\"titles\":[\"getDefaultMultiOwnerLightAccountFactoryAddress\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress#version\",\"html\":\"\\n

string

\\n
    \\n
  • the version of the light account to get the factory address for
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress.mdx#version\",\"isPage\":false,\"text\":\"\\nstring\\n\\nthe version of the light account to get the factory address for\\n\\n\",\"title\":\"version\",\"titles\":[\"getDefaultMultiOwnerLightAccountFactoryAddress\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress#returns\",\"html\":\"\\n

Address\\nan Address for the given chain

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultiOwnerLightAccountFactoryAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nAddress\\nan Address for the given chain\",\"title\":\"Returns\",\"titles\":[\"getDefaultMultiOwnerLightAccountFactoryAddress\"]}]}],[\"index.7a49aed32597a03a0288b3d2f7b8ff5e6c5ebb0aec2fa47a414d788b1779bf41\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: getMAInitializationData\\ndescription: Overview of the getMAInitializationData method\\n---\\n\\n# getMAInitializationData\\n\\nRetrieves the initialization data for a multi-owner modular account. Throws an error if the client's chain is not found or if the multi-owner plugin address is not retrievable.\\n\\n## Import\\n\\n```ts\\nimport { getMAInitializationData } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getMAInitializationData } from \\\"@account-kit/smart-contracts\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst client = createSmartAccountClient(...);\\nconst initializationData = await getMAInitializationData({\\nclient,\\nsignerAddress: \\\"0x...\\\", // or array of signers\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`GetMAInitializationDataParams`\\nthe parameters for getting initialization data\\n\\n### params.client\\n\\n`SmartAccountClient`\\nthe smart account client\\n\\n### params.signerAddress\\n\\n`Address | Address[]`\\nthe address of the signer or an array of signer addresses\\n\\n### params.multiOwnerPluginAddress\\n\\n`Address`\\noptional address of the multi-owner plugin\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to the initialization data required for upgrading to a multi-owner modular account\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/getMAInitializationData#getmainitializationdata\",\"html\":\"\\n

Retrieves the initialization data for a multi-owner modular account. Throws an error if the client's chain is not found or if the multi-owner plugin address is not retrievable.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMAInitializationData.mdx#getmainitializationdata\",\"isPage\":true,\"text\":\"\\nRetrieves the initialization data for a multi-owner modular account. Throws an error if the client's chain is not found or if the multi-owner plugin address is not retrievable.\\n\",\"title\":\"getMAInitializationData\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMAInitializationData#import\",\"html\":\"\\n
import { getMAInitializationData } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMAInitializationData.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getMAInitializationData } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"getMAInitializationData\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMAInitializationData#usage\",\"html\":\"\\n
import { getMAInitializationData } from "@account-kit/smart-contracts";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst client = createSmartAccountClient(...);\\nconst initializationData = await getMAInitializationData({\\nclient,\\nsignerAddress: "0x...", // or array of signers\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMAInitializationData.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getMAInitializationData } from "@account-kit/smart-contracts";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst client = createSmartAccountClient(...);\\nconst initializationData = await getMAInitializationData({\\nclient,\\nsignerAddress: "0x...", // or array of signers\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"getMAInitializationData\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMAInitializationData#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMAInitializationData.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getMAInitializationData\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMAInitializationData#params\",\"html\":\"\\n

GetMAInitializationDataParams<TTransport, TChain, TAccount>\\nthe parameters for getting initialization data

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMAInitializationData.mdx#params\",\"isPage\":false,\"text\":\"\\nGetMAInitializationDataParams<TTransport, TChain, TAccount>\\nthe parameters for getting initialization data\\n\",\"title\":\"params\",\"titles\":[\"getMAInitializationData\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMAInitializationData#paramsclient\",\"html\":\"\\n

SmartAccountClient<TTransport, TChain, TAccount>\\nthe smart account client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMAInitializationData.mdx#paramsclient\",\"isPage\":false,\"text\":\"\\nSmartAccountClient<TTransport, TChain, TAccount>\\nthe smart account client\\n\",\"title\":\"params.client\",\"titles\":[\"getMAInitializationData\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMAInitializationData#paramssigneraddress\",\"html\":\"\\n

Address | Address[]\\nthe address of the signer or an array of signer addresses

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMAInitializationData.mdx#paramssigneraddress\",\"isPage\":false,\"text\":\"\\nAddress | Address[]\\nthe address of the signer or an array of signer addresses\\n\",\"title\":\"params.signerAddress\",\"titles\":[\"getMAInitializationData\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMAInitializationData#paramsmultiownerpluginaddress\",\"html\":\"\\n

Address\\noptional address of the multi-owner plugin

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMAInitializationData.mdx#paramsmultiownerpluginaddress\",\"isPage\":false,\"text\":\"\\nAddress\\noptional address of the multi-owner plugin\\n\",\"title\":\"params.multiOwnerPluginAddress\",\"titles\":[\"getMAInitializationData\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMAInitializationData#returns\",\"html\":\"\\n

Promise<UpgradeToData>\\na promise that resolves to the initialization data required for upgrading to a multi-owner modular account

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMAInitializationData.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<UpgradeToData>\\na promise that resolves to the initialization data required for upgrading to a multi-owner modular account\",\"title\":\"Returns\",\"titles\":[\"getMAInitializationData\"]}]}],[\"index.bf304e63344285c14bb8669824c17beedd2ec08f6be1e367b7d266ca9227d3c5\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getDefaultMultisigModularAccountFactoryAddress\\ndescription: Overview of the getDefaultMultisigModularAccountFactoryAddress method\\n---\\n\\n# getDefaultMultisigModularAccountFactoryAddress\\n\\nUtility method returning the default multi sig msca factory address given a chain\\n\\n## Import\\n\\n```ts\\nimport { getDefaultMultisigModularAccountFactoryAddress } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Parameters\\n\\n### chain\\n\\n`Chain`\\nthe chain object for which to get the address\\n\\n## Returns\\n\\n`Address`\\nthe address for the given chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress#getdefaultmultisigmodularaccountfactoryaddress\",\"html\":\"\\n

Utility method returning the default multi sig msca factory address given a chain

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress.mdx#getdefaultmultisigmodularaccountfactoryaddress\",\"isPage\":true,\"text\":\"\\nUtility method returning the default multi sig msca factory address given a chain\\n\",\"title\":\"getDefaultMultisigModularAccountFactoryAddress\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress#import\",\"html\":\"\\n
import { getDefaultMultisigModularAccountFactoryAddress } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getDefaultMultisigModularAccountFactoryAddress } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"getDefaultMultisigModularAccountFactoryAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getDefaultMultisigModularAccountFactoryAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress#chain\",\"html\":\"\\n

Chain\\nthe chain object for which to get the address

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nthe chain object for which to get the address\\n\",\"title\":\"chain\",\"titles\":[\"getDefaultMultisigModularAccountFactoryAddress\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress#returns\",\"html\":\"\\n

Address\\nthe address for the given chain

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getDefaultMultisigModularAccountFactoryAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nAddress\\nthe address for the given chain\",\"title\":\"Returns\",\"titles\":[\"getDefaultMultisigModularAccountFactoryAddress\"]}]}],[\"index.9b28d76139a736d45cf970d7f05ae2412815683f02692412d5ad19697bedf21d\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getMSCAUpgradeToData\\ndescription: Overview of the getMSCAUpgradeToData method\\n---\\n\\n# getMSCAUpgradeToData\\n\\nRetrieves the data necessary to upgrade to a Multi-Signature Contract Account (MSCA) and provides a method to create a Multi-Owner Modular Account.\\n\\n## Import\\n\\n```ts\\nimport { getMSCAUpgradeToData } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createLightAccountClient, getMSCAUpgradeToData } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst client = createLightAccountClient(...);\\nconst upgradeData = await getMSCAUpgradeToData(client, {});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`SmartAccountClient`\\nThe smart account client\\n\\n### args\\n\\n`GetMSCAUpgradeToData`\\nThe arguments required for the upgrade\\n\\n## Returns\\n\\n`Promise Promise>}>`\\nA promise that resolves to upgrade data augmented with a function to create a Multi-Owner Modular Account\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData#getmscaupgradetodata\",\"html\":\"\\n

Retrieves the data necessary to upgrade to a Multi-Signature Contract Account (MSCA) and provides a method to create a Multi-Owner Modular Account.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData.mdx#getmscaupgradetodata\",\"isPage\":true,\"text\":\"\\nRetrieves the data necessary to upgrade to a Multi-Signature Contract Account (MSCA) and provides a method to create a Multi-Owner Modular Account.\\n\",\"title\":\"getMSCAUpgradeToData\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData#import\",\"html\":\"\\n
import { getMSCAUpgradeToData } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getMSCAUpgradeToData } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"getMSCAUpgradeToData\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData#usage\",\"html\":\"\\n
import { createLightAccountClient, getMSCAUpgradeToData } from "@account-kit/smart-contracts";\\n \\nconst client = createLightAccountClient(...);\\nconst upgradeData = await getMSCAUpgradeToData(client, {});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createLightAccountClient, getMSCAUpgradeToData } from "@account-kit/smart-contracts";\\n \\nconst client = createLightAccountClient(...);\\nconst upgradeData = await getMSCAUpgradeToData(client, {});\\n\",\"title\":\"Usage\",\"titles\":[\"getMSCAUpgradeToData\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getMSCAUpgradeToData\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData#client\",\"html\":\"\\n

SmartAccountClient<TTransport, TChain, TAccount>\\nThe smart account client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData.mdx#client\",\"isPage\":false,\"text\":\"\\nSmartAccountClient<TTransport, TChain, TAccount>\\nThe smart account client\\n\",\"title\":\"client\",\"titles\":[\"getMSCAUpgradeToData\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData#args\",\"html\":\"\\n

GetMSCAUpgradeToData<TSigner, TAccount>\\nThe arguments required for the upgrade

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData.mdx#args\",\"isPage\":false,\"text\":\"\\nGetMSCAUpgradeToData<TSigner, TAccount>\\nThe arguments required for the upgrade\\n\",\"title\":\"args\",\"titles\":[\"getMSCAUpgradeToData\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData#returns\",\"html\":\"\\n

Promise<UpgradeToData & { createMAAccount: () => Promise<MultiOwnerModularAccount<TSigner>>}>\\nA promise that resolves to upgrade data augmented with a function to create a Multi-Owner Modular Account

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/getMSCAUpgradeToData.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<UpgradeToData & { createMAAccount: () => Promise<MultiOwnerModularAccount<TSigner>>}>\\nA promise that resolves to upgrade data augmented with a function to create a Multi-Owner Modular Account\",\"title\":\"Returns\",\"titles\":[\"getMSCAUpgradeToData\"]}]}],[\"index.e0bf8eecabdaaa5beb04cfaf2203de93463079780faded20f0054bbe4e7b1a93\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: multiOwnerLightAccountClientActions\\ndescription: Overview of the multiOwnerLightAccountClientActions method\\n---\\n\\n# multiOwnerLightAccountClientActions\\n\\nGenerates client actions for a multi-owner light account, including the ability to update owners.\\n\\n## Import\\n\\n```ts\\nimport { multiOwnerLightAccountClientActions } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { multiOwnerLightAccountClientActions, createMultiOwnerLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { createAlchemySmartAccountClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst smartAccountClient = createAlchemySmartAccountClient({\\naccount: await createMultiOwnerLightAccount(...),\\napiKey: \\\"your-api-key\\\",\\nchain: sepolia,\\n}).extend(multiOwnerLightAccountClientActions);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nthe client for interacting with the multi-owner light account\\n\\n## Returns\\n\\n`MultiOwnerLightAccountClientActions`\\nan object containing the client actions specifically for a multi-owner light account\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions#multiownerlightaccountclientactions\",\"html\":\"\\n

Generates client actions for a multi-owner light account, including the ability to update owners.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions.mdx#multiownerlightaccountclientactions\",\"isPage\":true,\"text\":\"\\nGenerates client actions for a multi-owner light account, including the ability to update owners.\\n\",\"title\":\"multiOwnerLightAccountClientActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions#import\",\"html\":\"\\n
import { multiOwnerLightAccountClientActions } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { multiOwnerLightAccountClientActions } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"multiOwnerLightAccountClientActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions#usage\",\"html\":\"\\n
import { multiOwnerLightAccountClientActions, createMultiOwnerLightAccount } from "@account-kit/smart-contracts";\\nimport { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst smartAccountClient = createAlchemySmartAccountClient({\\naccount: await createMultiOwnerLightAccount(...),\\napiKey: "your-api-key",\\nchain: sepolia,\\n}).extend(multiOwnerLightAccountClientActions);
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { multiOwnerLightAccountClientActions, createMultiOwnerLightAccount } from "@account-kit/smart-contracts";\\nimport { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst smartAccountClient = createAlchemySmartAccountClient({\\naccount: await createMultiOwnerLightAccount(...),\\napiKey: "your-api-key",\\nchain: sepolia,\\n}).extend(multiOwnerLightAccountClientActions);\\n\",\"title\":\"Usage\",\"titles\":[\"multiOwnerLightAccountClientActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"multiOwnerLightAccountClientActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nthe client for interacting with the multi-owner light account

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nthe client for interacting with the multi-owner light account\\n\",\"title\":\"client\",\"titles\":[\"multiOwnerLightAccountClientActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions#returns\",\"html\":\"\\n

MultiOwnerLightAccountClientActions<TSigner, TAccount>\\nan object containing the client actions specifically for a multi-owner light account

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerLightAccountClientActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nMultiOwnerLightAccountClientActions<TSigner, TAccount>\\nan object containing the client actions specifically for a multi-owner light account\",\"title\":\"Returns\",\"titles\":[\"multiOwnerLightAccountClientActions\"]}]}],[\"index.44ea8fb67f0e0ae18627fd7395856fe3a9c5b4342a8fe1afeedd2e6102c7816a\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: installPlugin\\ndescription: Overview of the installPlugin method\\n---\\n\\n# installPlugin\\n\\nInstalls a plugin on a smart account via the client, sending the user operation with the appropriate parameters.\\nNOTE: it's recommended to just use the installPlugin action returned from generated plugins\\n\\n## Import\\n\\n```ts\\nimport { installPlugin } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { installPlugin, createModularAccountAlchemyClient } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst client = createModularAccountAlchemyClient(...);\\n\\nconst hash = await installPlugin(client, {\\npluginAddress: \\\"0x...\\\",\\nmanifestHash: \\\"0x...\\\",\\ndependencies: [], // this is defined by the plugin you're installing\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client configured to the smart account on which the plugin will be installed\\n\\n### params\\n\\n`InstallPluginParams`\\nThe parameters required to install the plugin, including overrides, context, and account information\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves once the plugin installation operation is sent\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/installPlugin#installplugin\",\"html\":\"\\n

Installs a plugin on a smart account via the client, sending the user operation with the appropriate parameters.\\nNOTE: it's recommended to just use the installPlugin action returned from generated plugins

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/installPlugin.mdx#installplugin\",\"isPage\":true,\"text\":\"\\nInstalls a plugin on a smart account via the client, sending the user operation with the appropriate parameters.\\nNOTE: it's recommended to just use the installPlugin action returned from generated plugins\\n\",\"title\":\"installPlugin\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/installPlugin#import\",\"html\":\"\\n
import { installPlugin } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/installPlugin.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { installPlugin } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"installPlugin\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/installPlugin#usage\",\"html\":\"\\n
import { installPlugin, createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst client = createModularAccountAlchemyClient(...);\\n \\nconst hash = await installPlugin(client, {\\npluginAddress: "0x...",\\nmanifestHash: "0x...",\\ndependencies: [], // this is defined by the plugin you're installing\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/installPlugin.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { installPlugin, createModularAccountAlchemyClient } from "@account-kit/smart-contracts";\\n \\nconst client = createModularAccountAlchemyClient(...);\\n \\nconst hash = await installPlugin(client, {\\npluginAddress: "0x...",\\nmanifestHash: "0x...",\\ndependencies: [], // this is defined by the plugin you're installing\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"installPlugin\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/installPlugin#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/installPlugin.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"installPlugin\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/installPlugin#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client configured to the smart account on which the plugin will be installed

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/installPlugin.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client configured to the smart account on which the plugin will be installed\\n\",\"title\":\"client\",\"titles\":[\"installPlugin\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/installPlugin#params\",\"html\":\"\\n

InstallPluginParams<TAccount, TContext>\\nThe parameters required to install the plugin, including overrides, context, and account information

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/installPlugin.mdx#params\",\"isPage\":false,\"text\":\"\\nInstallPluginParams<TAccount, TContext>\\nThe parameters required to install the plugin, including overrides, context, and account information\\n\",\"title\":\"params\",\"titles\":[\"installPlugin\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/installPlugin#returns\",\"html\":\"\\n

Promise<any>\\nA promise that resolves once the plugin installation operation is sent

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/installPlugin.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<any>\\nA promise that resolves once the plugin installation operation is sent\",\"title\":\"Returns\",\"titles\":[\"installPlugin\"]}]}],[\"index.ac4b6e38968a1e636a79574fd627c19592a9680dd7489872eb97b6ec722c7232\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: lightAccountClientActions\\ndescription: Overview of the lightAccountClientActions method\\n---\\n\\n# lightAccountClientActions\\n\\nProvides a set of actions for managing a light account client, including transferring ownership.\\n\\n## Import\\n\\n```ts\\nimport { lightAccountClientActions } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { lightAccountClientActions, createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { createAlchemySmartAccountClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst smartAccountClient = createAlchemySmartAccountClient({\\naccount: await createLightAccount(...),\\napiKey: \\\"your-api-key\\\",\\nchain: sepolia,\\n}).extend(lightAccountClientActions);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance for which to provide the light account actions\\n\\n## Returns\\n\\n`LightAccountClientActions`\\nAn object containing the available light account client actions\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/lightAccountClientActions#lightaccountclientactions\",\"html\":\"\\n

Provides a set of actions for managing a light account client, including transferring ownership.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/lightAccountClientActions.mdx#lightaccountclientactions\",\"isPage\":true,\"text\":\"\\nProvides a set of actions for managing a light account client, including transferring ownership.\\n\",\"title\":\"lightAccountClientActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/lightAccountClientActions#import\",\"html\":\"\\n
import { lightAccountClientActions } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/lightAccountClientActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { lightAccountClientActions } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"lightAccountClientActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/lightAccountClientActions#usage\",\"html\":\"\\n
import { lightAccountClientActions, createLightAccount } from "@account-kit/smart-contracts";\\nimport { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst smartAccountClient = createAlchemySmartAccountClient({\\naccount: await createLightAccount(...),\\napiKey: "your-api-key",\\nchain: sepolia,\\n}).extend(lightAccountClientActions);
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/lightAccountClientActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { lightAccountClientActions, createLightAccount } from "@account-kit/smart-contracts";\\nimport { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst smartAccountClient = createAlchemySmartAccountClient({\\naccount: await createLightAccount(...),\\napiKey: "your-api-key",\\nchain: sepolia,\\n}).extend(lightAccountClientActions);\\n\",\"title\":\"Usage\",\"titles\":[\"lightAccountClientActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/lightAccountClientActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/lightAccountClientActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"lightAccountClientActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/lightAccountClientActions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client instance for which to provide the light account actions

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/lightAccountClientActions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client instance for which to provide the light account actions\\n\",\"title\":\"client\",\"titles\":[\"lightAccountClientActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/lightAccountClientActions#returns\",\"html\":\"\\n

LightAccountClientActions<TSigner, TAccount>\\nAn object containing the available light account client actions

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/lightAccountClientActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nLightAccountClientActions<TSigner, TAccount>\\nAn object containing the available light account client actions\",\"title\":\"Returns\",\"titles\":[\"lightAccountClientActions\"]}]}],[\"index.519ed534a1047dac68c50bba0eabc728801d0ab35406224daf0786b587ac31f5\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: multiOwnerPluginActions\\ndescription: Overview of the multiOwnerPluginActions method\\n---\\n\\n# multiOwnerPluginActions\\n\\nCreates actions for the MultiOwner plugin, including reading owners and checking ownership.\\nNOTE: this is already added to the client returned from createMultiOwnerModularAccountClient\\n\\n## Import\\n\\n```ts\\nimport { multiOwnerPluginActions } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { multiOwnerPluginActions } from \\\"@account-kit/smart-contracts\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst client = createSmartAccountClient(...).extend(multiOwnerPluginActions);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nthe client instance containing the transport, chain, and account information\\n\\n## Returns\\n\\n`MultiOwnerPluginActions`\\nan object containing the actions for the MultiOwner plugin, such as `readOwners` and `isOwnerOf`\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions#multiownerpluginactions\",\"html\":\"\\n

Creates actions for the MultiOwner plugin, including reading owners and checking ownership.\\nNOTE: this is already added to the client returned from createMultiOwnerModularAccountClient

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions.mdx#multiownerpluginactions\",\"isPage\":true,\"text\":\"\\nCreates actions for the MultiOwner plugin, including reading owners and checking ownership.\\nNOTE: this is already added to the client returned from createMultiOwnerModularAccountClient\\n\",\"title\":\"multiOwnerPluginActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions#import\",\"html\":\"\\n
import { multiOwnerPluginActions } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { multiOwnerPluginActions } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"multiOwnerPluginActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions#usage\",\"html\":\"\\n
import { multiOwnerPluginActions } from "@account-kit/smart-contracts";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst client = createSmartAccountClient(...).extend(multiOwnerPluginActions);
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { multiOwnerPluginActions } from "@account-kit/smart-contracts";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst client = createSmartAccountClient(...).extend(multiOwnerPluginActions);\\n\",\"title\":\"Usage\",\"titles\":[\"multiOwnerPluginActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"multiOwnerPluginActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nthe client instance containing the transport, chain, and account information

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nthe client instance containing the transport, chain, and account information\\n\",\"title\":\"client\",\"titles\":[\"multiOwnerPluginActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions#returns\",\"html\":\"\\n

MultiOwnerPluginActions<TAccount>\\nan object containing the actions for the MultiOwner plugin, such as readOwners and isOwnerOf

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multiOwnerPluginActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nMultiOwnerPluginActions<TAccount>\\nan object containing the actions for the MultiOwner plugin, such as readOwners and isOwnerOf\",\"title\":\"Returns\",\"titles\":[\"multiOwnerPluginActions\"]}]}],[\"index.53fb6b694124c7618eab4681e6821b91d166d75f9a8dbf390e09894de3657405\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: multisigPluginActions\\ndescription: Overview of the multisigPluginActions method\\n---\\n\\n# multisigPluginActions\\n\\nProvides actions for managing a multisig plugin within the specified client, including reading owners, checking ownership, getting the threshold, proposing user operations, and signing multisig user operations.\\n\\n## Import\\n\\n```ts\\nimport { multisigPluginActions } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createModularAccountAlchemyClient, multisigPluginActions } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst client = createModularAccountAlchemyClient(...).extend(multisigPluginActions);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance configured with transport, chain, and account information\\n\\n## Returns\\n\\n`MultisigPluginActions`\\nAn object containing methods to perform actions related to the multisig plugin\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigPluginActions#multisigpluginactions\",\"html\":\"\\n

Provides actions for managing a multisig plugin within the specified client, including reading owners, checking ownership, getting the threshold, proposing user operations, and signing multisig user operations.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigPluginActions.mdx#multisigpluginactions\",\"isPage\":true,\"text\":\"\\nProvides actions for managing a multisig plugin within the specified client, including reading owners, checking ownership, getting the threshold, proposing user operations, and signing multisig user operations.\\n\",\"title\":\"multisigPluginActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigPluginActions#import\",\"html\":\"\\n
import { multisigPluginActions } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigPluginActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { multisigPluginActions } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"multisigPluginActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigPluginActions#usage\",\"html\":\"\\n
import { createModularAccountAlchemyClient, multisigPluginActions } from "@account-kit/smart-contracts";\\n \\nconst client = createModularAccountAlchemyClient(...).extend(multisigPluginActions);
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigPluginActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createModularAccountAlchemyClient, multisigPluginActions } from "@account-kit/smart-contracts";\\n \\nconst client = createModularAccountAlchemyClient(...).extend(multisigPluginActions);\\n\",\"title\":\"Usage\",\"titles\":[\"multisigPluginActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigPluginActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigPluginActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"multisigPluginActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigPluginActions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client instance configured with transport, chain, and account information

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigPluginActions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client instance configured with transport, chain, and account information\\n\",\"title\":\"client\",\"titles\":[\"multisigPluginActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigPluginActions#returns\",\"html\":\"\\n

MultisigPluginActions<TAccount>\\nAn object containing methods to perform actions related to the multisig plugin

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigPluginActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nMultisigPluginActions<TAccount>\\nAn object containing methods to perform actions related to the multisig plugin\",\"title\":\"Returns\",\"titles\":[\"multisigPluginActions\"]}]}],[\"index.b514c09570fb6898117d28aff25f0ff00ed9bb50cf1762d32bfe4a5b96b04065\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: multisigSignatureMiddleware\\ndescription: Overview of the multisigSignatureMiddleware method\\n---\\n\\n# multisigSignatureMiddleware\\n\\nA signer middleware to be used with Multisig Account Clients.\\nThis middleware handles correctly aggregating signatures passed through\\nas context when sending UserOperations, proposing UserOperations, or adding signatures to a UserOperation.\\n\\n## Import\\n\\n```ts\\nimport { multisigSignatureMiddleware } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Parameters\\n\\n### struct\\n\\n`Deferrable>`\\nthe user operation struct to be signed\\n\\n### args\\n\\n`ClientMiddlewareArgs`\\nthe parameters to be passed to the middleware\\n\\n### args.account\\n\\n`UserOperationOverrides`\\nthe account to be used for signing\\n\\n### args.client\\n\\n`MiddlewareClient`\\nthe smart account client that will be used for RPC requests\\n\\n### args.context\\n\\n`MultisigUserOperationContext`\\nthe context object containing the signatures to be aggregated MultisigUserOperationContext\\n\\n## Returns\\n\\n`Promise>>`\\na Promise containing a UserOperation with an aggregated signature in the `signature` field\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware#multisigsignaturemiddleware\",\"html\":\"\\n

A signer middleware to be used with Multisig Account Clients.\\nThis middleware handles correctly aggregating signatures passed through\\nas context when sending UserOperations, proposing UserOperations, or adding signatures to a UserOperation.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware.mdx#multisigsignaturemiddleware\",\"isPage\":true,\"text\":\"\\nA signer middleware to be used with Multisig Account Clients.\\nThis middleware handles correctly aggregating signatures passed through\\nas context when sending UserOperations, proposing UserOperations, or adding signatures to a UserOperation.\\n\",\"title\":\"multisigSignatureMiddleware\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware#import\",\"html\":\"\\n
import { multisigSignatureMiddleware } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { multisigSignatureMiddleware } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"multisigSignatureMiddleware\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"multisigSignatureMiddleware\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware#struct\",\"html\":\"\\n

Deferrable<UserOperationStruct<TEntryPointVersion>>\\nthe user operation struct to be signed

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware.mdx#struct\",\"isPage\":false,\"text\":\"\\nDeferrable<UserOperationStruct<TEntryPointVersion>>\\nthe user operation struct to be signed\\n\",\"title\":\"struct\",\"titles\":[\"multisigSignatureMiddleware\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware#args\",\"html\":\"\\n

ClientMiddlewareArgs<TAccount, C, TContext, TEntryPointVersion>\\nthe parameters to be passed to the middleware

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware.mdx#args\",\"isPage\":false,\"text\":\"\\nClientMiddlewareArgs<TAccount, C, TContext, TEntryPointVersion>\\nthe parameters to be passed to the middleware\\n\",\"title\":\"args\",\"titles\":[\"multisigSignatureMiddleware\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware#argsaccount\",\"html\":\"\\n

UserOperationOverrides<TEntryPointVersion>\\nthe account to be used for signing

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware.mdx#argsaccount\",\"isPage\":false,\"text\":\"\\nUserOperationOverrides<TEntryPointVersion>\\nthe account to be used for signing\\n\",\"title\":\"args.account\",\"titles\":[\"multisigSignatureMiddleware\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware#argsclient\",\"html\":\"\\n

MiddlewareClient\\nthe smart account client that will be used for RPC requests

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware.mdx#argsclient\",\"isPage\":false,\"text\":\"\\nMiddlewareClient\\nthe smart account client that will be used for RPC requests\\n\",\"title\":\"args.client\",\"titles\":[\"multisigSignatureMiddleware\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware#argscontext\",\"html\":\"\\n

MultisigUserOperationContext\\nthe context object containing the signatures to be aggregated MultisigUserOperationContext

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware.mdx#argscontext\",\"isPage\":false,\"text\":\"\\nMultisigUserOperationContext\\nthe context object containing the signatures to be aggregated MultisigUserOperationContext\\n\",\"title\":\"args.context\",\"titles\":[\"multisigSignatureMiddleware\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware#returns\",\"html\":\"\\n

Promise<Deferrable<UserOperationStruct<TEntryPointVersion>>>\\na Promise containing a UserOperation with an aggregated signature in the signature field

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/multisigSignatureMiddleware.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Deferrable<UserOperationStruct<TEntryPointVersion>>>\\na Promise containing a UserOperation with an aggregated signature in the signature field\",\"title\":\"Returns\",\"titles\":[\"multisigSignatureMiddleware\"]}]}],[\"index.b4fd5154653ce6a2159ac3d87a0eade1b3a20c00c0ffb6b08b46119be19edaa1\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: alchemyGasManagerMiddleware\\ndescription: Overview of the alchemyGasManagerMiddleware method\\n---\\n\\n# alchemyGasManagerMiddleware\\n\\nPaymaster middleware factory that uses Alchemy's Gas Manager for sponsoring transactions.\\n\\n## Import\\n\\n```ts\\nimport { alchemyGasManagerMiddleware } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\n\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { http } from \\\"viem\\\";\\n\\nconst client = createSmartAccountClient({\\n http(\\\"rpc-url\\\"),\\n sepolia,\\n alchemyErc7677Middleware(\\\"policyId\\\")\\n);\\n```\\n\\n## Parameters\\n\\n### policyId\\n\\n`string`\\nthe policyId for Alchemy's gas manager\\n\\n## Returns\\n\\n`Pick`\\npartial client middleware configuration containing `dummyPaymasterAndData` and `paymasterAndData`\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/alchemyGasManagerMiddleware#alchemygasmanagermiddleware\",\"html\":\"\\n

Paymaster middleware factory that uses Alchemy's Gas Manager for sponsoring transactions.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyGasManagerMiddleware.mdx#alchemygasmanagermiddleware\",\"isPage\":true,\"text\":\"\\nPaymaster middleware factory that uses Alchemy's Gas Manager for sponsoring transactions.\\n\",\"title\":\"alchemyGasManagerMiddleware\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/alchemyGasManagerMiddleware#import\",\"html\":\"\\n
import { alchemyGasManagerMiddleware } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyGasManagerMiddleware.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { alchemyGasManagerMiddleware } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"alchemyGasManagerMiddleware\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyGasManagerMiddleware#usage\",\"html\":\"\\n
 \\nimport { sepolia } from "@account-kit/infra";\\nimport { http } from "viem";\\n \\nconst client = createSmartAccountClient({\\n http("rpc-url"),\\n sepolia,\\n alchemyErc7677Middleware("policyId")\\n);
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyGasManagerMiddleware.mdx#usage\",\"isPage\":false,\"text\":\"\\n \\nimport { sepolia } from "@account-kit/infra";\\nimport { http } from "viem";\\n \\nconst client = createSmartAccountClient({\\n http("rpc-url"),\\n sepolia,\\n alchemyErc7677Middleware("policyId")\\n);\\n\",\"title\":\"Usage\",\"titles\":[\"alchemyGasManagerMiddleware\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyGasManagerMiddleware#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyGasManagerMiddleware.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"alchemyGasManagerMiddleware\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyGasManagerMiddleware#policyid\",\"html\":\"\\n

string\\nthe policyId for Alchemy's gas manager

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyGasManagerMiddleware.mdx#policyid\",\"isPage\":false,\"text\":\"\\nstring\\nthe policyId for Alchemy's gas manager\\n\",\"title\":\"policyId\",\"titles\":[\"alchemyGasManagerMiddleware\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyGasManagerMiddleware#returns\",\"html\":\"\\n

Pick<ClientMiddlewareConfig, "dummyPaymasterAndData" | "paymasterAndData">\\npartial client middleware configuration containing dummyPaymasterAndData and paymasterAndData

\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyGasManagerMiddleware.mdx#returns\",\"isPage\":false,\"text\":\"\\nPick<ClientMiddlewareConfig, "dummyPaymasterAndData" | "paymasterAndData">\\npartial client middleware configuration containing dummyPaymasterAndData and paymasterAndData\",\"title\":\"Returns\",\"titles\":[\"alchemyGasManagerMiddleware\"]}]}],[\"index.6d9f776473c3b2e30b4bb0957ecfb9156a171b65ea70b9886b5c2ab75816d49f\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: alchemyFeeEstimator\\ndescription: Overview of the alchemyFeeEstimator method\\n---\\n\\n# alchemyFeeEstimator\\n\\nFunction that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\\n\\n## Import\\n\\n```ts\\nimport { alchemyFeeEstimator } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\nfeeEstimator: alchemyFeeEstimator(bundlerClient),\\n...otherParams\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`ClientWithAlchemyMethods`\\nThe client with Alchemy methods\\n\\n## Returns\\n\\n`ClientMiddlewareFn`\\nA middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/alchemyFeeEstimator#alchemyfeeestimator\",\"html\":\"\\n

Function that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyFeeEstimator.mdx#alchemyfeeestimator\",\"isPage\":true,\"text\":\"\\nFunction that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\\n\",\"title\":\"alchemyFeeEstimator\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/alchemyFeeEstimator#import\",\"html\":\"\\n
import { alchemyFeeEstimator } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyFeeEstimator.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { alchemyFeeEstimator } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"alchemyFeeEstimator\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyFeeEstimator#usage\",\"html\":\"\\n
import { alchemyFeeEstimator, createAlchemyPublicRpcClient } from "@account-kit/infra";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\nfeeEstimator: alchemyFeeEstimator(bundlerClient),\\n...otherParams\\n});
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyFeeEstimator.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from "@account-kit/infra";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\nfeeEstimator: alchemyFeeEstimator(bundlerClient),\\n...otherParams\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"alchemyFeeEstimator\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyFeeEstimator#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyFeeEstimator.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"alchemyFeeEstimator\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyFeeEstimator#client\",\"html\":\"\\n

ClientWithAlchemyMethods\\nThe client with Alchemy methods

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyFeeEstimator.mdx#client\",\"isPage\":false,\"text\":\"\\nClientWithAlchemyMethods\\nThe client with Alchemy methods\\n\",\"title\":\"client\",\"titles\":[\"alchemyFeeEstimator\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyFeeEstimator#returns\",\"html\":\"\\n

ClientMiddlewareFn\\nA middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees

\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyFeeEstimator.mdx#returns\",\"isPage\":false,\"text\":\"\\nClientMiddlewareFn\\nA middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\",\"title\":\"Returns\",\"titles\":[\"alchemyFeeEstimator\"]}]}],[\"index.76a439e439f3090e0ec4864445ee8fc547ac61af08e932e55b299f55174f7647\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: pluginManagerActions\\ndescription: Overview of the pluginManagerActions method\\n---\\n\\n# pluginManagerActions\\n\\nProvides actions for managing plugins on a given client, including installing and uninstalling plugins.\\nNOTE: this is provided by default when using a modular account client\\n\\n## Import\\n\\n```ts\\nimport { pluginManagerActions } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { pluginManagerActions } from \\\"@account-kit/smart-contracts\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst client = createSmartAccountClient(...).extend(pluginManagerActions);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance on which to manage plugins\\n\\n## Returns\\n\\n`PluginManagerActions`\\nAn object containing functions to install and uninstall plugins\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/pluginManagerActions#pluginmanageractions\",\"html\":\"\\n

Provides actions for managing plugins on a given client, including installing and uninstalling plugins.\\nNOTE: this is provided by default when using a modular account client

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/pluginManagerActions.mdx#pluginmanageractions\",\"isPage\":true,\"text\":\"\\nProvides actions for managing plugins on a given client, including installing and uninstalling plugins.\\nNOTE: this is provided by default when using a modular account client\\n\",\"title\":\"pluginManagerActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/pluginManagerActions#import\",\"html\":\"\\n
import { pluginManagerActions } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/pluginManagerActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { pluginManagerActions } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"pluginManagerActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/pluginManagerActions#usage\",\"html\":\"\\n
import { pluginManagerActions } from "@account-kit/smart-contracts";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst client = createSmartAccountClient(...).extend(pluginManagerActions);
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/pluginManagerActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { pluginManagerActions } from "@account-kit/smart-contracts";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst client = createSmartAccountClient(...).extend(pluginManagerActions);\\n\",\"title\":\"Usage\",\"titles\":[\"pluginManagerActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/pluginManagerActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/pluginManagerActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"pluginManagerActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/pluginManagerActions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client instance on which to manage plugins

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/pluginManagerActions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client instance on which to manage plugins\\n\",\"title\":\"client\",\"titles\":[\"pluginManagerActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/pluginManagerActions#returns\",\"html\":\"\\n

PluginManagerActions<TAccount>\\nAn object containing functions to install and uninstall plugins

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/pluginManagerActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nPluginManagerActions<TAccount>\\nAn object containing functions to install and uninstall plugins\",\"title\":\"Returns\",\"titles\":[\"pluginManagerActions\"]}]}],[\"index.0cd7820d7c1f0c61ccd6c7c88f19d3f6987729e5776f9dba5faad26d8ce249e4\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: splitAggregatedSignature\\ndescription: Overview of the splitAggregatedSignature method\\n---\\n\\n# splitAggregatedSignature\\n\\nTakes an aggregated signature and threshold and splits it into its components\\n\\n## Import\\n\\n```ts\\nimport { splitAggregatedSignature } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Parameters\\n\\n### args\\n\\n`SplitAggregateSignatureParams`\\n\\n- the arguments for the split\\n\\n### args.aggregateSignature\\n\\n`Hex`\\n\\n- the aggregated signature to split\\n\\n### args.threshold\\n\\n`number`\\n\\n- the threshold for the signature\\n\\n### args.account\\n\\n`SmartContractAccount`\\n\\n- the account which the signature is valid for\\n\\n### args.request\\n\\n`UserOperationRequest`\\n\\n- the user operation request that the signature is for\\n\\n## Returns\\n\\n`Promise`\\nthe signature split into its upper limits and current signatures\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/splitAggregatedSignature#splitaggregatedsignature\",\"html\":\"\\n

Takes an aggregated signature and threshold and splits it into its components

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/splitAggregatedSignature.mdx#splitaggregatedsignature\",\"isPage\":true,\"text\":\"\\nTakes an aggregated signature and threshold and splits it into its components\\n\",\"title\":\"splitAggregatedSignature\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/splitAggregatedSignature#import\",\"html\":\"\\n
import { splitAggregatedSignature } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/splitAggregatedSignature.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { splitAggregatedSignature } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"splitAggregatedSignature\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/splitAggregatedSignature#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/splitAggregatedSignature.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"splitAggregatedSignature\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/splitAggregatedSignature#args\",\"html\":\"\\n

SplitAggregateSignatureParams<TAccount>

\\n
    \\n
  • the arguments for the split
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/splitAggregatedSignature.mdx#args\",\"isPage\":false,\"text\":\"\\nSplitAggregateSignatureParams<TAccount>\\n\\nthe arguments for the split\\n\\n\",\"title\":\"args\",\"titles\":[\"splitAggregatedSignature\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/splitAggregatedSignature#argsaggregatesignature\",\"html\":\"\\n

Hex

\\n
    \\n
  • the aggregated signature to split
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/splitAggregatedSignature.mdx#argsaggregatesignature\",\"isPage\":false,\"text\":\"\\nHex\\n\\nthe aggregated signature to split\\n\\n\",\"title\":\"args.aggregateSignature\",\"titles\":[\"splitAggregatedSignature\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/splitAggregatedSignature#argsthreshold\",\"html\":\"\\n

number

\\n
    \\n
  • the threshold for the signature
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/splitAggregatedSignature.mdx#argsthreshold\",\"isPage\":false,\"text\":\"\\nnumber\\n\\nthe threshold for the signature\\n\\n\",\"title\":\"args.threshold\",\"titles\":[\"splitAggregatedSignature\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/splitAggregatedSignature#argsaccount\",\"html\":\"\\n

SmartContractAccount

\\n
    \\n
  • the account which the signature is valid for
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/splitAggregatedSignature.mdx#argsaccount\",\"isPage\":false,\"text\":\"\\nSmartContractAccount\\n\\nthe account which the signature is valid for\\n\\n\",\"title\":\"args.account\",\"titles\":[\"splitAggregatedSignature\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/splitAggregatedSignature#argsrequest\",\"html\":\"\\n

UserOperationRequest<TEntryPointVersion>

\\n
    \\n
  • the user operation request that the signature is for
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/splitAggregatedSignature.mdx#argsrequest\",\"isPage\":false,\"text\":\"\\nUserOperationRequest<TEntryPointVersion>\\n\\nthe user operation request that the signature is for\\n\\n\",\"title\":\"args.request\",\"titles\":[\"splitAggregatedSignature\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/splitAggregatedSignature#returns\",\"html\":\"\\n

Promise<SplitAggregateSignatureResult>\\nthe signature split into its upper limits and current signatures

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/splitAggregatedSignature.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SplitAggregateSignatureResult>\\nthe signature split into its upper limits and current signatures\",\"title\":\"Returns\",\"titles\":[\"splitAggregatedSignature\"]}]}],[\"index.381fe468124bde8ddbcbd44dabbcc2dbb1156be18a9e108beb9c092ebe0fd97b\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: alchemyActions\\ndescription: Overview of the alchemyActions method\\n---\\n\\n# alchemyActions\\n\\nProvides a set of actions for interacting with the Alchemy Smart Account client, including the ability to simulate user operations.\\n\\n## Import\\n\\n```ts\\nimport { alchemyActions } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { alchemyActions } from \\\"@account-kit/infra\\\";\\nimport { createPublicClient } from \\\"viem\\\";\\n\\nconst client = createPublicClient(...);\\nconst clientWithAlchemyActions = client.extend(alchemyActions);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance used to perform actions\\n\\n## Returns\\n\\n`AlchemySmartAccountClientActions`\\nAn object containing Alchemy Smart Account client actions\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/alchemyActions#alchemyactions\",\"html\":\"\\n

Provides a set of actions for interacting with the Alchemy Smart Account client, including the ability to simulate user operations.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyActions.mdx#alchemyactions\",\"isPage\":true,\"text\":\"\\nProvides a set of actions for interacting with the Alchemy Smart Account client, including the ability to simulate user operations.\\n\",\"title\":\"alchemyActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/alchemyActions#import\",\"html\":\"\\n
import { alchemyActions } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { alchemyActions } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"alchemyActions\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyActions#usage\",\"html\":\"\\n
import { alchemyActions } from "@account-kit/infra";\\nimport { createPublicClient } from "viem";\\n \\nconst client = createPublicClient(...);\\nconst clientWithAlchemyActions = client.extend(alchemyActions);
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { alchemyActions } from "@account-kit/infra";\\nimport { createPublicClient } from "viem";\\n \\nconst client = createPublicClient(...);\\nconst clientWithAlchemyActions = client.extend(alchemyActions);\\n\",\"title\":\"Usage\",\"titles\":[\"alchemyActions\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"alchemyActions\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyActions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client instance used to perform actions

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyActions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client instance used to perform actions\\n\",\"title\":\"client\",\"titles\":[\"alchemyActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyActions#returns\",\"html\":\"\\n

AlchemySmartAccountClientActions<TAccount, TContext>\\nAn object containing Alchemy Smart Account client actions

\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nAlchemySmartAccountClientActions<TAccount, TContext>\\nAn object containing Alchemy Smart Account client actions\",\"title\":\"Returns\",\"titles\":[\"alchemyActions\"]}]}],[\"index.ee2d48946ffa8ac49eface8e097cbde138c5792b129e690c3503d14d35e450a0\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: sessionKeyPluginActions\\ndescription: Overview of the sessionKeyPluginActions method\\n---\\n\\n# sessionKeyPluginActions\\n\\nCreates actions for managing session keys in a smart contract associated with a client, including adding, removing, rotating, and updating session key permissions.\\n\\n## Import\\n\\n```ts\\nimport { sessionKeyPluginActions } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createModularAccountAlchemyClient, sessionKeyPluginActions } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst client = createModularAccountAlchemyClient(...).extend(sessionKeyPluginActions);\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance to use for managing session keys\\n\\n## Returns\\n\\n`SessionKeyPluginActions`\\nAn object containing methods for session key management and interaction with the smart contract\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions#sessionkeypluginactions\",\"html\":\"\\n

Creates actions for managing session keys in a smart contract associated with a client, including adding, removing, rotating, and updating session key permissions.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions.mdx#sessionkeypluginactions\",\"isPage\":true,\"text\":\"\\nCreates actions for managing session keys in a smart contract associated with a client, including adding, removing, rotating, and updating session key permissions.\\n\",\"title\":\"sessionKeyPluginActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions#import\",\"html\":\"\\n
import { sessionKeyPluginActions } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { sessionKeyPluginActions } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"sessionKeyPluginActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions#usage\",\"html\":\"\\n
import { createModularAccountAlchemyClient, sessionKeyPluginActions } from "@account-kit/smart-contracts";\\n \\nconst client = createModularAccountAlchemyClient(...).extend(sessionKeyPluginActions);
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createModularAccountAlchemyClient, sessionKeyPluginActions } from "@account-kit/smart-contracts";\\n \\nconst client = createModularAccountAlchemyClient(...).extend(sessionKeyPluginActions);\\n\",\"title\":\"Usage\",\"titles\":[\"sessionKeyPluginActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"sessionKeyPluginActions\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client instance to use for managing session keys

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client instance to use for managing session keys\\n\",\"title\":\"client\",\"titles\":[\"sessionKeyPluginActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions#returns\",\"html\":\"\\n

SessionKeyPluginActions<TAccount>\\nAn object containing methods for session key management and interaction with the smart contract

\",\"id\":\"pages/reference/account-kit/smart-contracts/functions/sessionKeyPluginActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nSessionKeyPluginActions<TAccount>\\nAn object containing methods for session key management and interaction with the smart contract\",\"title\":\"Returns\",\"titles\":[\"sessionKeyPluginActions\"]}]}],[\"index.55505cb0fe9f1a30f2b892734ca6ecef4ddfe8c1121c90f60596bf5c2b195b05\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: alchemyEnhancedApiActions\\ndescription: Overview of the alchemyEnhancedApiActions method\\n---\\n\\n# alchemyEnhancedApiActions\\n\\nGiven an instance of the Alchemy SDK, returns a smart account client decorator which contains actions for interacting Alchemy's enhanced APIs.\\n\\n## Import\\n\\n```ts\\nimport { alchemyEnhancedApiActions } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { Alchemy } from \\\"alchemy-sdk\\\";\\nimport { alchemyEnhancedApiActions } from \\\"@account-kit/infra\\\";\\nimport { alchemySCAClient } from \\\"./client\\\";\\n\\nconst alchemy = new Alchemy(...);\\nconst enhancedApiDecorator = alchemyEnhancedApiActions(alchemy);\\nconst withEnhancedApis = alchemySCAClient.extend(enhancedApiDecorator);\\n```\\n\\n## Parameters\\n\\n### alchemy\\n\\n`Alchemy`\\nThe Alchemy instance containing the SDK client\\n\\n## Returns\\n\\n`(client: AlchemySmartAccountClient) => AlchemyEnhancedApis`\\nA client decorator for Alchemy Smart Account clients that adds the enhanced API methods\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/alchemyEnhancedApiActions#alchemyenhancedapiactions\",\"html\":\"\\n

Given an instance of the Alchemy SDK, returns a smart account client decorator which contains actions for interacting Alchemy's enhanced APIs.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyEnhancedApiActions.mdx#alchemyenhancedapiactions\",\"isPage\":true,\"text\":\"\\nGiven an instance of the Alchemy SDK, returns a smart account client decorator which contains actions for interacting Alchemy's enhanced APIs.\\n\",\"title\":\"alchemyEnhancedApiActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/alchemyEnhancedApiActions#import\",\"html\":\"\\n
import { alchemyEnhancedApiActions } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyEnhancedApiActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { alchemyEnhancedApiActions } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"alchemyEnhancedApiActions\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyEnhancedApiActions#usage\",\"html\":\"\\n
import { Alchemy } from "alchemy-sdk";\\nimport { alchemyEnhancedApiActions } from "@account-kit/infra";\\nimport { alchemySCAClient } from "./client";\\n \\nconst alchemy = new Alchemy(...);\\nconst enhancedApiDecorator = alchemyEnhancedApiActions(alchemy);\\nconst withEnhancedApis = alchemySCAClient.extend(enhancedApiDecorator);
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyEnhancedApiActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { Alchemy } from "alchemy-sdk";\\nimport { alchemyEnhancedApiActions } from "@account-kit/infra";\\nimport { alchemySCAClient } from "./client";\\n \\nconst alchemy = new Alchemy(...);\\nconst enhancedApiDecorator = alchemyEnhancedApiActions(alchemy);\\nconst withEnhancedApis = alchemySCAClient.extend(enhancedApiDecorator);\\n\",\"title\":\"Usage\",\"titles\":[\"alchemyEnhancedApiActions\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyEnhancedApiActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyEnhancedApiActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"alchemyEnhancedApiActions\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyEnhancedApiActions#alchemy\",\"html\":\"\\n

Alchemy\\nThe Alchemy instance containing the SDK client

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyEnhancedApiActions.mdx#alchemy\",\"isPage\":false,\"text\":\"\\nAlchemy\\nThe Alchemy instance containing the SDK client\\n\",\"title\":\"alchemy\",\"titles\":[\"alchemyEnhancedApiActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyEnhancedApiActions#returns\",\"html\":\"\\n

(client: AlchemySmartAccountClient) => AlchemyEnhancedApis\\nA client decorator for Alchemy Smart Account clients that adds the enhanced API methods

\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyEnhancedApiActions.mdx#returns\",\"isPage\":false,\"text\":\"\\n(client: AlchemySmartAccountClient) => AlchemyEnhancedApis\\nA client decorator for Alchemy Smart Account clients that adds the enhanced API methods\",\"title\":\"Returns\",\"titles\":[\"alchemyEnhancedApiActions\"]}]}],[\"index.e60278e471cb05ff8f47b0451099e31979e85e35c1f787e01fc84e4b0a43e603\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createAlchemySmartAccountClient\\ndescription: Overview of the createAlchemySmartAccountClient method\\n---\\n\\n# createAlchemySmartAccountClient\\n\\nCreates an Alchemy smart account client using the provided configuration options, including account details, gas manager configuration, and custom middleware.\\n\\n## Import\\n\\n```ts\\nimport { createAlchemySmartAccountClient } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createAlchemySmartAccountClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra/chain\\\";\\n\\nconst client = createAlchemySmartAccountClient({\\n chain: sepolia,\\n apiKey: \\\"your-api-key\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`AlchemySmartAccountClientConfig`\\nThe configuration for creating the Alchemy smart account client\\n\\n## Returns\\n\\n`AlchemySmartAccountClient`\\nAn instance of `AlchemySmartAccountClient` configured based on the provided options\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/createAlchemySmartAccountClient#createalchemysmartaccountclient\",\"html\":\"\\n

Creates an Alchemy smart account client using the provided configuration options, including account details, gas manager configuration, and custom middleware.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemySmartAccountClient.mdx#createalchemysmartaccountclient\",\"isPage\":true,\"text\":\"\\nCreates an Alchemy smart account client using the provided configuration options, including account details, gas manager configuration, and custom middleware.\\n\",\"title\":\"createAlchemySmartAccountClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemySmartAccountClient#import\",\"html\":\"\\n
import { createAlchemySmartAccountClient } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemySmartAccountClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createAlchemySmartAccountClient } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"createAlchemySmartAccountClient\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemySmartAccountClient#usage\",\"html\":\"\\n
import { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { sepolia } from "@account-kit/infra/chain";\\n \\nconst client = createAlchemySmartAccountClient({\\n  chain: sepolia,\\n  apiKey: "your-api-key",\\n});
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemySmartAccountClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createAlchemySmartAccountClient } from "@account-kit/infra";\\nimport { sepolia } from "@account-kit/infra/chain";\\n \\nconst client = createAlchemySmartAccountClient({\\n chain: sepolia,\\n apiKey: "your-api-key",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createAlchemySmartAccountClient\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemySmartAccountClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemySmartAccountClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createAlchemySmartAccountClient\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemySmartAccountClient#config\",\"html\":\"\\n

AlchemySmartAccountClientConfig\\nThe configuration for creating the Alchemy smart account client

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemySmartAccountClient.mdx#config\",\"isPage\":false,\"text\":\"\\nAlchemySmartAccountClientConfig\\nThe configuration for creating the Alchemy smart account client\\n\",\"title\":\"config\",\"titles\":[\"createAlchemySmartAccountClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemySmartAccountClient#returns\",\"html\":\"\\n

AlchemySmartAccountClient\\nAn instance of AlchemySmartAccountClient configured based on the provided options

\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemySmartAccountClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nAlchemySmartAccountClient\\nAn instance of AlchemySmartAccountClient configured based on the provided options\",\"title\":\"Returns\",\"titles\":[\"createAlchemySmartAccountClient\"]}]}],[\"index.4d6e60f0a7e27df81a18377019ede8b514b7bc4aa84b13e178c35c6140e3c0d8\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: alchemyUserOperationSimulator\\ndescription: Overview of the alchemyUserOperationSimulator method\\n---\\n\\n# alchemyUserOperationSimulator\\n\\nA middleware function to be used during simulation of user operations which leverages Alchemy's RPC uo simulation method.\\n\\n## Import\\n\\n```ts\\nimport { alchemyUserOperationSimulator } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { alchemyUserOperationSimulator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\nuserOperationSimulator: alchemyUserOperationSimulator(bundlerClient),\\n...otherParams\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`C`\\nThe client object with Alchemy methods\\n\\n## Returns\\n\\n`ClientMiddlewareFn`\\nA middleware function to simulate and process user operations\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/alchemyUserOperationSimulator#alchemyuseroperationsimulator\",\"html\":\"\\n

A middleware function to be used during simulation of user operations which leverages Alchemy's RPC uo simulation method.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyUserOperationSimulator.mdx#alchemyuseroperationsimulator\",\"isPage\":true,\"text\":\"\\nA middleware function to be used during simulation of user operations which leverages Alchemy's RPC uo simulation method.\\n\",\"title\":\"alchemyUserOperationSimulator\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/alchemyUserOperationSimulator#import\",\"html\":\"\\n
import { alchemyUserOperationSimulator } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyUserOperationSimulator.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { alchemyUserOperationSimulator } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"alchemyUserOperationSimulator\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyUserOperationSimulator#usage\",\"html\":\"\\n
import { alchemyUserOperationSimulator, createAlchemyPublicRpcClient } from "@account-kit/infra";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\nuserOperationSimulator: alchemyUserOperationSimulator(bundlerClient),\\n...otherParams\\n});
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyUserOperationSimulator.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { alchemyUserOperationSimulator, createAlchemyPublicRpcClient } from "@account-kit/infra";\\nimport { createSmartAccountClient } from "@aa-sdk/core";\\n \\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\nuserOperationSimulator: alchemyUserOperationSimulator(bundlerClient),\\n...otherParams\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"alchemyUserOperationSimulator\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyUserOperationSimulator#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyUserOperationSimulator.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"alchemyUserOperationSimulator\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyUserOperationSimulator#client\",\"html\":\"\\n

C\\nThe client object with Alchemy methods

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyUserOperationSimulator.mdx#client\",\"isPage\":false,\"text\":\"\\nC\\nThe client object with Alchemy methods\\n\",\"title\":\"client\",\"titles\":[\"alchemyUserOperationSimulator\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/alchemyUserOperationSimulator#returns\",\"html\":\"\\n

ClientMiddlewareFn\\nA middleware function to simulate and process user operations

\",\"id\":\"pages/reference/account-kit/infra/functions/alchemyUserOperationSimulator.mdx#returns\",\"isPage\":false,\"text\":\"\\nClientMiddlewareFn\\nA middleware function to simulate and process user operations\",\"title\":\"Returns\",\"titles\":[\"alchemyUserOperationSimulator\"]}]}],[\"index.86d7f7e27e180994c1f08f1a72f590d213c98a42380821671d4022b4d75a7551\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createAlchemyPublicRpcClient\\ndescription: Overview of the createAlchemyPublicRpcClient method\\n---\\n\\n# createAlchemyPublicRpcClient\\n\\nCreates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\\n\\n## Import\\n\\n```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"your-api-key\\\",\\n },\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`{connectionConfig: ConnectionConfig,chain: Chain,fetchOptions?: NoUndefined}`\\nThe parameters for creating the Alchemy public RPC client\\n\\n### params.connectionConfig\\n\\n`ConnectionConfig`\\nThe connection configuration containing the RPC URL and API key\\n\\n### params.chain\\n\\n`Chain`\\nThe blockchain chain configuration\\n\\n### params.fetchOptions\\n\\n`NoUndefined`\\nOptional fetch configuration for HTTP transport\\n\\n## Returns\\n\\n`ClientWithAlchemyMethods`\\nA client object tailored with Alchemy methods and capabilities to interact with the blockchain\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/createAlchemyPublicRpcClient#createalchemypublicrpcclient\",\"html\":\"\\n

Creates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemyPublicRpcClient.mdx#createalchemypublicrpcclient\",\"isPage\":true,\"text\":\"\\nCreates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\\n\",\"title\":\"createAlchemyPublicRpcClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemyPublicRpcClient#import\",\"html\":\"\\n
import { createAlchemyPublicRpcClient } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemyPublicRpcClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createAlchemyPublicRpcClient } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"createAlchemyPublicRpcClient\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemyPublicRpcClient#usage\",\"html\":\"\\n
import { createAlchemyPublicRpcClient } from "@account-kit/infra";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst client = createAlchemyPublicRpcClient({\\n  chain: sepolia,\\n  connectionConfig: {\\n    apiKey: "your-api-key",\\n  },\\n});
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemyPublicRpcClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { createAlchemyPublicRpcClient } from "@account-kit/infra";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: "your-api-key",\\n },\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createAlchemyPublicRpcClient\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemyPublicRpcClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemyPublicRpcClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createAlchemyPublicRpcClient\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemyPublicRpcClient#params\",\"html\":\"\\n

{connectionConfig: ConnectionConfig,chain: Chain,fetchOptions?: NoUndefined<HttpTransportConfig["fetchOptions"]>}\\nThe parameters for creating the Alchemy public RPC client

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemyPublicRpcClient.mdx#params\",\"isPage\":false,\"text\":\"\\n{connectionConfig: ConnectionConfig,chain: Chain,fetchOptions?: NoUndefined<HttpTransportConfig["fetchOptions"]>}\\nThe parameters for creating the Alchemy public RPC client\\n\",\"title\":\"params\",\"titles\":[\"createAlchemyPublicRpcClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemyPublicRpcClient#paramsconnectionconfig\",\"html\":\"\\n

ConnectionConfig\\nThe connection configuration containing the RPC URL and API key

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemyPublicRpcClient.mdx#paramsconnectionconfig\",\"isPage\":false,\"text\":\"\\nConnectionConfig\\nThe connection configuration containing the RPC URL and API key\\n\",\"title\":\"params.connectionConfig\",\"titles\":[\"createAlchemyPublicRpcClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemyPublicRpcClient#paramschain\",\"html\":\"\\n

Chain\\nThe blockchain chain configuration

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemyPublicRpcClient.mdx#paramschain\",\"isPage\":false,\"text\":\"\\nChain\\nThe blockchain chain configuration\\n\",\"title\":\"params.chain\",\"titles\":[\"createAlchemyPublicRpcClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemyPublicRpcClient#paramsfetchoptions\",\"html\":\"\\n

NoUndefined<HttpTransportConfig["fetchOptions"]>\\nOptional fetch configuration for HTTP transport

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemyPublicRpcClient.mdx#paramsfetchoptions\",\"isPage\":false,\"text\":\"\\nNoUndefined<HttpTransportConfig["fetchOptions"]>\\nOptional fetch configuration for HTTP transport\\n\",\"title\":\"params.fetchOptions\",\"titles\":[\"createAlchemyPublicRpcClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/createAlchemyPublicRpcClient#returns\",\"html\":\"\\n

ClientWithAlchemyMethods\\nA client object tailored with Alchemy methods and capabilities to interact with the blockchain

\",\"id\":\"pages/reference/account-kit/infra/functions/createAlchemyPublicRpcClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nClientWithAlchemyMethods\\nA client object tailored with Alchemy methods and capabilities to interact with the blockchain\",\"title\":\"Returns\",\"titles\":[\"createAlchemyPublicRpcClient\"]}]}],[\"index.bba55151e0ed6332cdd29ade7cb7577ff785f8ef748c56bf77df8a1d0639c2bd\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: defineAlchemyChain\\ndescription: Overview of the defineAlchemyChain method\\n---\\n\\n# defineAlchemyChain\\n\\nDefines an Alchemy chain configuration by adding an Alchemy-specific RPC base URL to the chain's RPC URLs.\\n\\n## Import\\n\\n```ts\\nimport { defineAlchemyChain } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { defineAlchemyChain } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst chain = defineAlchemyChain({\\n chain: sepolia,\\n rpcBaseUrl: \\\"https://eth-sepolia.g.alchemy.com/v2\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`AlchemyChainConfig`\\nThe parameters for defining the Alchemy chain\\n\\n### params.chain\\n\\n`Chain`\\nThe original chain configuration\\n\\n### params.rpcBaseUrl\\n\\n`string`\\nThe Alchemy-specific RPC base URL\\n\\n## Returns\\n\\n`Chain`\\nThe updated chain configuration with the Alchemy RPC URL added\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/defineAlchemyChain#definealchemychain\",\"html\":\"\\n

Defines an Alchemy chain configuration by adding an Alchemy-specific RPC base URL to the chain's RPC URLs.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/defineAlchemyChain.mdx#definealchemychain\",\"isPage\":true,\"text\":\"\\nDefines an Alchemy chain configuration by adding an Alchemy-specific RPC base URL to the chain's RPC URLs.\\n\",\"title\":\"defineAlchemyChain\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/defineAlchemyChain#import\",\"html\":\"\\n
import { defineAlchemyChain } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/defineAlchemyChain.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { defineAlchemyChain } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"defineAlchemyChain\"]},{\"href\":\"/reference/account-kit/infra/functions/defineAlchemyChain#usage\",\"html\":\"\\n
import { defineAlchemyChain } from "@account-kit/infra";\\nimport { sepolia } from "viem/chains";\\n \\nconst chain = defineAlchemyChain({\\n  chain: sepolia,\\n  rpcBaseUrl: "https://eth-sepolia.g.alchemy.com/v2",\\n});
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/defineAlchemyChain.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { defineAlchemyChain } from "@account-kit/infra";\\nimport { sepolia } from "viem/chains";\\n \\nconst chain = defineAlchemyChain({\\n chain: sepolia,\\n rpcBaseUrl: "https://eth-sepolia.g.alchemy.com/v2",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"defineAlchemyChain\"]},{\"href\":\"/reference/account-kit/infra/functions/defineAlchemyChain#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/defineAlchemyChain.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"defineAlchemyChain\"]},{\"href\":\"/reference/account-kit/infra/functions/defineAlchemyChain#params\",\"html\":\"\\n

AlchemyChainConfig\\nThe parameters for defining the Alchemy chain

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/defineAlchemyChain.mdx#params\",\"isPage\":false,\"text\":\"\\nAlchemyChainConfig\\nThe parameters for defining the Alchemy chain\\n\",\"title\":\"params\",\"titles\":[\"defineAlchemyChain\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/defineAlchemyChain#paramschain\",\"html\":\"\\n

Chain\\nThe original chain configuration

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/defineAlchemyChain.mdx#paramschain\",\"isPage\":false,\"text\":\"\\nChain\\nThe original chain configuration\\n\",\"title\":\"params.chain\",\"titles\":[\"defineAlchemyChain\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/defineAlchemyChain#paramsrpcbaseurl\",\"html\":\"\\n

string\\nThe Alchemy-specific RPC base URL

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/defineAlchemyChain.mdx#paramsrpcbaseurl\",\"isPage\":false,\"text\":\"\\nstring\\nThe Alchemy-specific RPC base URL\\n\",\"title\":\"params.rpcBaseUrl\",\"titles\":[\"defineAlchemyChain\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/defineAlchemyChain#returns\",\"html\":\"\\n

Chain\\nThe updated chain configuration with the Alchemy RPC URL added

\",\"id\":\"pages/reference/account-kit/infra/functions/defineAlchemyChain.mdx#returns\",\"isPage\":false,\"text\":\"\\nChain\\nThe updated chain configuration with the Alchemy RPC URL added\",\"title\":\"Returns\",\"titles\":[\"defineAlchemyChain\"]}]}],[\"index.2507b1bf02804b4764cd68b8e20f9afe34c408b59093df402bc386fe4e024e86\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getAlchemyPaymasterAddress\\ndescription: Overview of the getAlchemyPaymasterAddress method\\n---\\n\\n# getAlchemyPaymasterAddress\\n\\nRetrieves the Alchemy paymaster address for the given chain. Returns different addresses based on the chain ID.\\n\\n## Import\\n\\n```ts\\nimport { getAlchemyPaymasterAddress } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { sepolia, getAlchemyPaymasterAddress } from \\\"@account-kit/infra\\\";\\n\\nconst paymasterAddress = getAlchemyPaymasterAddress(sepolia);\\n```\\n\\n## Parameters\\n\\n### chain\\n\\n`Chain`\\nThe chain for which the paymaster address is required\\n\\n## Returns\\n\\n`Address`\\nThe Alchemy paymaster address corresponding to the specified chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/getAlchemyPaymasterAddress#getalchemypaymasteraddress\",\"html\":\"\\n

Retrieves the Alchemy paymaster address for the given chain. Returns different addresses based on the chain ID.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getAlchemyPaymasterAddress.mdx#getalchemypaymasteraddress\",\"isPage\":true,\"text\":\"\\nRetrieves the Alchemy paymaster address for the given chain. Returns different addresses based on the chain ID.\\n\",\"title\":\"getAlchemyPaymasterAddress\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/getAlchemyPaymasterAddress#import\",\"html\":\"\\n
import { getAlchemyPaymasterAddress } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getAlchemyPaymasterAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getAlchemyPaymasterAddress } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"getAlchemyPaymasterAddress\"]},{\"href\":\"/reference/account-kit/infra/functions/getAlchemyPaymasterAddress#usage\",\"html\":\"\\n
import { sepolia, getAlchemyPaymasterAddress } from "@account-kit/infra";\\n \\nconst paymasterAddress = getAlchemyPaymasterAddress(sepolia);
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getAlchemyPaymasterAddress.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { sepolia, getAlchemyPaymasterAddress } from "@account-kit/infra";\\n \\nconst paymasterAddress = getAlchemyPaymasterAddress(sepolia);\\n\",\"title\":\"Usage\",\"titles\":[\"getAlchemyPaymasterAddress\"]},{\"href\":\"/reference/account-kit/infra/functions/getAlchemyPaymasterAddress#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getAlchemyPaymasterAddress.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getAlchemyPaymasterAddress\"]},{\"href\":\"/reference/account-kit/infra/functions/getAlchemyPaymasterAddress#chain\",\"html\":\"\\n

Chain\\nThe chain for which the paymaster address is required

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getAlchemyPaymasterAddress.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nThe chain for which the paymaster address is required\\n\",\"title\":\"chain\",\"titles\":[\"getAlchemyPaymasterAddress\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/getAlchemyPaymasterAddress#returns\",\"html\":\"\\n

Address\\nThe Alchemy paymaster address corresponding to the specified chain

\",\"id\":\"pages/reference/account-kit/infra/functions/getAlchemyPaymasterAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nAddress\\nThe Alchemy paymaster address corresponding to the specified chain\",\"title\":\"Returns\",\"titles\":[\"getAlchemyPaymasterAddress\"]}]}],[\"index.128926888af8c2051d9f6fc55fdfd2681c2d8a8acfcbbacfab1ebaa99bb15e19\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: AlchemyAccountProvider\\ndescription: Overview of the AlchemyAccountProvider method\\n---\\n\\n# AlchemyAccountProvider\\n\\nProvider for Alchemy accounts.\\n\\n## Import\\n\\n```ts\\nimport { AlchemyAccountProvider } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nimport { AlchemyAccountProvider, createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient, QueryClientProvider } from \\\"@tanstack/react-query\\\";\\n\\nconst config = createConfig({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst queryClient = new QueryClient();\\n\\nfunction App({ children }: React.PropsWithChildren) {\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\\n```\\n\\n## Parameters\\n\\n### props\\n\\n`React.PropsWithChildren`\\nalchemy accounts provider props\\n\\n### props.config\\n\\n`AlchemyAccountsConfig`\\nthe acccount config generated using `createConfig`\\n\\n### props.queryClient\\n\\n`QueryClient`\\nthe react-query query client to use\\n\\n### props.uiConfig\\n\\n`AlchemyAccountsUIConfig`\\noptional UI configuration\\n\\n### props.children\\n\\n`React.ReactNode | undefined`\\nreact components that should have this accounts context\\n\\n## Returns\\n\\n`React.JSX.Element`\\nThe element to wrap your application in for Alchemy Accounts context.\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#alchemyaccountprovider\",\"html\":\"\\n

Provider for Alchemy accounts.

\\n\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#alchemyaccountprovider\",\"isPage\":true,\"text\":\"\\nProvider for Alchemy accounts.\\n\",\"title\":\"AlchemyAccountProvider\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#import\",\"html\":\"\\n
import { AlchemyAccountProvider } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AlchemyAccountProvider } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"AlchemyAccountProvider\"]},{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#usage\",\"html\":\"\\n
import { AlchemyAccountProvider, createConfig } from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\nimport { QueryClient, QueryClientProvider } from "@tanstack/react-query";\\n \\nconst config = createConfig({\\n  apiKey: "your-api-key",\\n  chain: sepolia,\\n});\\n \\nconst queryClient = new QueryClient();\\n \\nfunction App({ children }: React.PropsWithChildren) {\\n  return (\\n    <QueryClientProvider queryClient={queryClient}>\\n      <AlchemyAccountProvider config={config} queryClient={queryClient}>\\n        {children}\\n      </AlchemyAccountProvider>\\n    </QueryClientProvider>\\n  );\\n}
\\n\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyAccountProvider, createConfig } from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\nimport { QueryClient, QueryClientProvider } from "@tanstack/react-query";\\n \\nconst config = createConfig({\\n apiKey: "your-api-key",\\n chain: sepolia,\\n});\\n \\nconst queryClient = new QueryClient();\\n \\nfunction App({ children }: React.PropsWithChildren) {\\n return (\\n <QueryClientProvider queryClient={queryClient}>\\n <AlchemyAccountProvider config={config} queryClient={queryClient}>\\n {children}\\n </AlchemyAccountProvider>\\n </QueryClientProvider>\\n );\\n}\\n\",\"title\":\"Usage\",\"titles\":[\"AlchemyAccountProvider\"]},{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"AlchemyAccountProvider\"]},{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#props\",\"html\":\"\\n

React.PropsWithChildren<AlchemyAccountsProviderProps>\\nalchemy accounts provider props

\\n\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#props\",\"isPage\":false,\"text\":\"\\nReact.PropsWithChildren<AlchemyAccountsProviderProps>\\nalchemy accounts provider props\\n\",\"title\":\"props\",\"titles\":[\"AlchemyAccountProvider\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#propsconfig\",\"html\":\"\\n

AlchemyAccountsConfig\\nthe acccount config generated using createConfig

\\n\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#propsconfig\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfig\\nthe acccount config generated using createConfig\\n\",\"title\":\"props.config\",\"titles\":[\"AlchemyAccountProvider\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#propsqueryclient\",\"html\":\"\\n

QueryClient\\nthe react-query query client to use

\\n\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#propsqueryclient\",\"isPage\":false,\"text\":\"\\nQueryClient\\nthe react-query query client to use\\n\",\"title\":\"props.queryClient\",\"titles\":[\"AlchemyAccountProvider\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#propsuiconfig\",\"html\":\"\\n

AlchemyAccountsUIConfig\\noptional UI configuration

\\n\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#propsuiconfig\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsUIConfig\\noptional UI configuration\\n\",\"title\":\"props.uiConfig\",\"titles\":[\"AlchemyAccountProvider\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#propschildren\",\"html\":\"\\n

React.ReactNode | undefined\\nreact components that should have this accounts context

\\n\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#propschildren\",\"isPage\":false,\"text\":\"\\nReact.ReactNode | undefined\\nreact components that should have this accounts context\\n\",\"title\":\"props.children\",\"titles\":[\"AlchemyAccountProvider\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/components/AlchemyAccountProvider#returns\",\"html\":\"\\n

React.JSX.Element\\nThe element to wrap your application in for Alchemy Accounts context.

\",\"id\":\"pages/reference/account-kit/react/components/AlchemyAccountProvider.mdx#returns\",\"isPage\":false,\"text\":\"\\nReact.JSX.Element\\nThe element to wrap your application in for Alchemy Accounts context.\",\"title\":\"Returns\",\"titles\":[\"AlchemyAccountProvider\"]}]}],[\"index.0c64c0c95e3a9715c4aaa45b1e0225d8722d64c996e4905ed95463d39f00d881\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: isAlchemySmartAccountClient\\ndescription: Overview of the isAlchemySmartAccountClient method\\n---\\n\\n# isAlchemySmartAccountClient\\n\\nChecks if a given client is an Alchemy Smart Account Client. The goal of this check is to ensure that the client supports certain RPC methods.\\n\\n## Import\\n\\n```ts\\nimport { isAlchemySmartAccountClient } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { isAlchemySmartAccountClient } from \\\"@account-kit/infra\\\";\\n\\nif (isAlchemySmartAccountClient(client)) {\\n // do things with the client as an Alchemy Smart Account Client\\n}\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance to be checked\\n\\n## Returns\\n\\n`boolean`\\n`true` if the client is an Alchemy Smart Account Client, otherwise `false`\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/isAlchemySmartAccountClient#isalchemysmartaccountclient\",\"html\":\"\\n

Checks if a given client is an Alchemy Smart Account Client. The goal of this check is to ensure that the client supports certain RPC methods.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/isAlchemySmartAccountClient.mdx#isalchemysmartaccountclient\",\"isPage\":true,\"text\":\"\\nChecks if a given client is an Alchemy Smart Account Client. The goal of this check is to ensure that the client supports certain RPC methods.\\n\",\"title\":\"isAlchemySmartAccountClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/isAlchemySmartAccountClient#import\",\"html\":\"\\n
import { isAlchemySmartAccountClient } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/isAlchemySmartAccountClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { isAlchemySmartAccountClient } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"isAlchemySmartAccountClient\"]},{\"href\":\"/reference/account-kit/infra/functions/isAlchemySmartAccountClient#usage\",\"html\":\"\\n
import { isAlchemySmartAccountClient } from "@account-kit/infra";\\n \\nif (isAlchemySmartAccountClient(client)) {\\n  // do things with the client as an Alchemy Smart Account Client\\n}
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/isAlchemySmartAccountClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { isAlchemySmartAccountClient } from "@account-kit/infra";\\n \\nif (isAlchemySmartAccountClient(client)) {\\n // do things with the client as an Alchemy Smart Account Client\\n}\\n\",\"title\":\"Usage\",\"titles\":[\"isAlchemySmartAccountClient\"]},{\"href\":\"/reference/account-kit/infra/functions/isAlchemySmartAccountClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/isAlchemySmartAccountClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"isAlchemySmartAccountClient\"]},{\"href\":\"/reference/account-kit/infra/functions/isAlchemySmartAccountClient#client\",\"html\":\"\\n

Client<TTransport, TChain, TAccount>\\nThe client instance to be checked

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/isAlchemySmartAccountClient.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<TTransport, TChain, TAccount>\\nThe client instance to be checked\\n\",\"title\":\"client\",\"titles\":[\"isAlchemySmartAccountClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/isAlchemySmartAccountClient#returns\",\"html\":\"\\n

boolean\\ntrue if the client is an Alchemy Smart Account Client, otherwise false

\",\"id\":\"pages/reference/account-kit/infra/functions/isAlchemySmartAccountClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nboolean\\ntrue if the client is an Alchemy Smart Account Client, otherwise false\",\"title\":\"Returns\",\"titles\":[\"isAlchemySmartAccountClient\"]}]}],[\"index.844b60b680c57e05548be6d770975f27e01466f660b9c2005c0dfefda10c7cd5\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getDefaultUserOperationFeeOptions\\ndescription: Overview of the getDefaultUserOperationFeeOptions method\\n---\\n\\n# getDefaultUserOperationFeeOptions\\n\\nRetrieves the default user operation fee options for a given chain. Adjusts fees for specific chains like Arbitrum and Optimism.\\n\\n## Import\\n\\n```ts\\nimport { getDefaultUserOperationFeeOptions } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { getDefaultUserOperationFeeOptions } from \\\"@account-kit/infra\\\";\\nimport { arbitrum } from \\\"@account-kit/infra\\\";\\n\\nconst feeOpts = getDefaultUserOperationFeeOptions(arbitrum);\\n```\\n\\n## Parameters\\n\\n### chain\\n\\n`Chain`\\nThe blockchain chain for which to get the fee options\\n\\n## Returns\\n\\n`UserOperationFeeOptions`\\nAn object containing the default fee options for user operations on the specified chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions#getdefaultuseroperationfeeoptions\",\"html\":\"\\n

Retrieves the default user operation fee options for a given chain. Adjusts fees for specific chains like Arbitrum and Optimism.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions.mdx#getdefaultuseroperationfeeoptions\",\"isPage\":true,\"text\":\"\\nRetrieves the default user operation fee options for a given chain. Adjusts fees for specific chains like Arbitrum and Optimism.\\n\",\"title\":\"getDefaultUserOperationFeeOptions\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions#import\",\"html\":\"\\n
import { getDefaultUserOperationFeeOptions } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { getDefaultUserOperationFeeOptions } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"getDefaultUserOperationFeeOptions\"]},{\"href\":\"/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions#usage\",\"html\":\"\\n
import { getDefaultUserOperationFeeOptions } from "@account-kit/infra";\\nimport { arbitrum } from "@account-kit/infra";\\n \\nconst feeOpts = getDefaultUserOperationFeeOptions(arbitrum);
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { getDefaultUserOperationFeeOptions } from "@account-kit/infra";\\nimport { arbitrum } from "@account-kit/infra";\\n \\nconst feeOpts = getDefaultUserOperationFeeOptions(arbitrum);\\n\",\"title\":\"Usage\",\"titles\":[\"getDefaultUserOperationFeeOptions\"]},{\"href\":\"/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getDefaultUserOperationFeeOptions\"]},{\"href\":\"/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions#chain\",\"html\":\"\\n

Chain\\nThe blockchain chain for which to get the fee options

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nThe blockchain chain for which to get the fee options\\n\",\"title\":\"chain\",\"titles\":[\"getDefaultUserOperationFeeOptions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions#returns\",\"html\":\"\\n

UserOperationFeeOptions\\nAn object containing the default fee options for user operations on the specified chain

\",\"id\":\"pages/reference/account-kit/infra/functions/getDefaultUserOperationFeeOptions.mdx#returns\",\"isPage\":false,\"text\":\"\\nUserOperationFeeOptions\\nAn object containing the default fee options for user operations on the specified chain\",\"title\":\"Returns\",\"titles\":[\"getDefaultUserOperationFeeOptions\"]}]}],[\"index.0883529b136134c0fc2a5f429f73f13ed23f30f4db735be2c398a0d83942104b\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: simulateUserOperationChanges\\ndescription: Overview of the simulateUserOperationChanges method\\n---\\n\\n# simulateUserOperationChanges\\n\\nSimulates user operation changes including asset changes for a specified user operation and returns the resulting state changes.\\n\\n## Import\\n\\n```ts\\nimport { simulateUserOperationChanges } from \\\"@account-kit/infra\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { simulateUserOperationChanges, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient(...);\\nconst response = await simulateUserOperationChanges(client, {\\nuo: ...\\n});\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`Client`\\nThe client instance used to send the simulation request\\n\\n### args\\n\\n`SendUserOperationParameters`\\nThe parameters of the user operation including the account and other overrides\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the response of the simulation showing the asset changes\\n\",\"document\":[{\"href\":\"/reference/account-kit/infra/functions/simulateUserOperationChanges#simulateuseroperationchanges\",\"html\":\"\\n

Simulates user operation changes including asset changes for a specified user operation and returns the resulting state changes.

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/simulateUserOperationChanges.mdx#simulateuseroperationchanges\",\"isPage\":true,\"text\":\"\\nSimulates user operation changes including asset changes for a specified user operation and returns the resulting state changes.\\n\",\"title\":\"simulateUserOperationChanges\",\"titles\":[]},{\"href\":\"/reference/account-kit/infra/functions/simulateUserOperationChanges#import\",\"html\":\"\\n
import { simulateUserOperationChanges } from "@account-kit/infra";
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/simulateUserOperationChanges.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { simulateUserOperationChanges } from "@account-kit/infra";\\n\",\"title\":\"Import\",\"titles\":[\"simulateUserOperationChanges\"]},{\"href\":\"/reference/account-kit/infra/functions/simulateUserOperationChanges#usage\",\"html\":\"\\n
import { simulateUserOperationChanges, createAlchemyPublicRpcClient } from "@account-kit/infra";\\n \\nconst client = createAlchemyPublicRpcClient(...);\\nconst response = await simulateUserOperationChanges(client, {\\nuo: ...\\n});
\\n\",\"id\":\"pages/reference/account-kit/infra/functions/simulateUserOperationChanges.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { simulateUserOperationChanges, createAlchemyPublicRpcClient } from "@account-kit/infra";\\n \\nconst client = createAlchemyPublicRpcClient(...);\\nconst response = await simulateUserOperationChanges(client, {\\nuo: ...\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"simulateUserOperationChanges\"]},{\"href\":\"/reference/account-kit/infra/functions/simulateUserOperationChanges#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/infra/functions/simulateUserOperationChanges.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"simulateUserOperationChanges\"]},{\"href\":\"/reference/account-kit/infra/functions/simulateUserOperationChanges#client\",\"html\":\"\\n

Client<Transport, TChain, TAccount, AlchemyRpcSchema>\\nThe client instance used to send the simulation request

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/simulateUserOperationChanges.mdx#client\",\"isPage\":false,\"text\":\"\\nClient<Transport, TChain, TAccount, AlchemyRpcSchema>\\nThe client instance used to send the simulation request\\n\",\"title\":\"client\",\"titles\":[\"simulateUserOperationChanges\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/simulateUserOperationChanges#args\",\"html\":\"\\n

SendUserOperationParameters<TAccount>\\nThe parameters of the user operation including the account and other overrides

\\n\",\"id\":\"pages/reference/account-kit/infra/functions/simulateUserOperationChanges.mdx#args\",\"isPage\":false,\"text\":\"\\nSendUserOperationParameters<TAccount>\\nThe parameters of the user operation including the account and other overrides\\n\",\"title\":\"args\",\"titles\":[\"simulateUserOperationChanges\",\"Parameters\"]},{\"href\":\"/reference/account-kit/infra/functions/simulateUserOperationChanges#returns\",\"html\":\"\\n

Promise<SimulateUserOperationAssetChangesResponse>\\nA promise that resolves to the response of the simulation showing the asset changes

\",\"id\":\"pages/reference/account-kit/infra/functions/simulateUserOperationChanges.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SimulateUserOperationAssetChangesResponse>\\nA promise that resolves to the response of the simulation showing the asset changes\",\"title\":\"Returns\",\"titles\":[\"simulateUserOperationChanges\"]}]}],[\"index.0530772cb87839cad9853549b70c7ac9a05b251fbe942942e889a986f5c2c430\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: AuthCard\\ndescription: Overview of the AuthCard method\\n---\\n\\n# AuthCard\\n\\nReact component containing an Auth view with configured auth methods\\nand options based on the config passed to the AlchemyAccountProvider\\n\\n## Import\\n\\n```ts\\nimport { AuthCard } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nimport { AuthCard, useAlchemyAccountContext } from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithAuthCard() {\\n // assumes you've passed in a UI config to the Account Provider\\n // you can also directly set the properties on the AuthCard component\\n const { uiConfig } = useAlchemyAccountContext();\\n\\n return ;\\n}\\n```\\n\\n## Parameters\\n\\n### props\\n\\n`AuthCardProps`\\nCard Props\\n\\n## Returns\\n\\n`JSX.Element`\\na react component containing the AuthCard\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/components/AuthCard#authcard\",\"html\":\"\\n

React component containing an Auth view with configured auth methods\\nand options based on the config passed to the AlchemyAccountProvider

\\n\",\"id\":\"pages/reference/account-kit/react/components/AuthCard.mdx#authcard\",\"isPage\":true,\"text\":\"\\nReact component containing an Auth view with configured auth methods\\nand options based on the config passed to the AlchemyAccountProvider\\n\",\"title\":\"AuthCard\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/components/AuthCard#import\",\"html\":\"\\n
import { AuthCard } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/components/AuthCard.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AuthCard } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"AuthCard\"]},{\"href\":\"/reference/account-kit/react/components/AuthCard#usage\",\"html\":\"\\n
import { AuthCard, useAlchemyAccountContext } from "@account-kit/react";\\n \\nfunction ComponentWithAuthCard() {\\n  // assumes you've passed in a UI config to the Account Provider\\n  // you can also directly set the properties on the AuthCard component\\n  const { uiConfig } = useAlchemyAccountContext();\\n \\n  return <AuthCard {...uiConfig!.auth} />;\\n}
\\n\",\"id\":\"pages/reference/account-kit/react/components/AuthCard.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AuthCard, useAlchemyAccountContext } from "@account-kit/react";\\n \\nfunction ComponentWithAuthCard() {\\n // assumes you've passed in a UI config to the Account Provider\\n // you can also directly set the properties on the AuthCard component\\n const { uiConfig } = useAlchemyAccountContext();\\n \\n return <AuthCard {...uiConfig!.auth} />;\\n}\\n\",\"title\":\"Usage\",\"titles\":[\"AuthCard\"]},{\"href\":\"/reference/account-kit/react/components/AuthCard#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/components/AuthCard.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"AuthCard\"]},{\"href\":\"/reference/account-kit/react/components/AuthCard#props\",\"html\":\"\\n

AuthCardProps\\nCard Props

\\n\",\"id\":\"pages/reference/account-kit/react/components/AuthCard.mdx#props\",\"isPage\":false,\"text\":\"\\nAuthCardProps\\nCard Props\\n\",\"title\":\"props\",\"titles\":[\"AuthCard\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/components/AuthCard#returns\",\"html\":\"\\n

JSX.Element\\na react component containing the AuthCard

\",\"id\":\"pages/reference/account-kit/react/components/AuthCard.mdx#returns\",\"isPage\":false,\"text\":\"\\nJSX.Element\\na react component containing the AuthCard\",\"title\":\"Returns\",\"titles\":[\"AuthCard\"]}]}],[\"index.ea2e12148a6eceda76d65e593fd306aeab68bc6859e6a8979c80ad1a0cbc7f70\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createConfig\\ndescription: Overview of the createConfig method\\n---\\n\\n# createConfig\\n\\nWraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\\n\\n## Import\\n\\n```ts\\nimport { createConfig } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\";\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n};\\n\\nconst config = createConfig(\\n {\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n },\\n uiConfig\\n);\\n\\nexport const queryClient = new QueryClient();\\n```\\n\\n## Parameters\\n\\n### props\\n\\n`CreateConfigProps`\\nfor creating an alchemy account config\\n\\n### ui\\n\\n`AlchemyAccountsUIConfig`\\n(optional) configuration to use for the Auth Components UI\\n\\n## Returns\\n\\n`AlchemyAccountsConfigWithUI`\\nan alchemy account config object containing the core and client store, as well as the UI config\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/functions/createConfig#createconfig\",\"html\":\"\\n

Wraps the createConfig that is exported from @aa-sdk/core to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).

\\n\",\"id\":\"pages/reference/account-kit/react/functions/createConfig.mdx#createconfig\",\"isPage\":true,\"text\":\"\\nWraps the createConfig that is exported from @aa-sdk/core to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\\n\",\"title\":\"createConfig\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/functions/createConfig#import\",\"html\":\"\\n
import { createConfig } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/functions/createConfig.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { createConfig } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"createConfig\"]},{\"href\":\"/reference/account-kit/react/functions/createConfig#usage\",\"html\":\"\\n
import { sepolia } from "@account-kit/infra";\\nimport { AlchemyAccountsUIConfig, createConfig } from "@account-kit/react";\\nimport { QueryClient } from "@tanstack/react-query";\\n \\nconst uiConfig: AlchemyAccountsUIConfig = {\\n  illustrationStyle: "linear",\\n  auth: {\\n    sections: [[{ type: "email" }], [{ type: "passkey" }]],\\n    addPasskeyOnSignup: true,\\n  },\\n};\\n \\nconst config = createConfig(\\n  {\\n    rpcUrl: "/api/rpc",\\n    chain: sepolia,\\n    ssr: true,\\n  },\\n  uiConfig\\n);\\n \\nexport const queryClient = new QueryClient();
\\n\",\"id\":\"pages/reference/account-kit/react/functions/createConfig.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { sepolia } from "@account-kit/infra";\\nimport { AlchemyAccountsUIConfig, createConfig } from "@account-kit/react";\\nimport { QueryClient } from "@tanstack/react-query";\\n \\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: "linear",\\n auth: {\\n sections: [[{ type: "email" }], [{ type: "passkey" }]],\\n addPasskeyOnSignup: true,\\n },\\n};\\n \\nconst config = createConfig(\\n {\\n rpcUrl: "/api/rpc",\\n chain: sepolia,\\n ssr: true,\\n },\\n uiConfig\\n);\\n \\nexport const queryClient = new QueryClient();\\n\",\"title\":\"Usage\",\"titles\":[\"createConfig\"]},{\"href\":\"/reference/account-kit/react/functions/createConfig#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/functions/createConfig.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createConfig\"]},{\"href\":\"/reference/account-kit/react/functions/createConfig#props\",\"html\":\"\\n

CreateConfigProps\\nfor creating an alchemy account config

\\n\",\"id\":\"pages/reference/account-kit/react/functions/createConfig.mdx#props\",\"isPage\":false,\"text\":\"\\nCreateConfigProps\\nfor creating an alchemy account config\\n\",\"title\":\"props\",\"titles\":[\"createConfig\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/functions/createConfig#ui\",\"html\":\"\\n

AlchemyAccountsUIConfig\\n(optional) configuration to use for the Auth Components UI

\\n\",\"id\":\"pages/reference/account-kit/react/functions/createConfig.mdx#ui\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsUIConfig\\n(optional) configuration to use for the Auth Components UI\\n\",\"title\":\"ui\",\"titles\":[\"createConfig\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/functions/createConfig#returns\",\"html\":\"\\n

AlchemyAccountsConfigWithUI\\nan alchemy account config object containing the core and client store, as well as the UI config

\",\"id\":\"pages/reference/account-kit/react/functions/createConfig.mdx#returns\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsConfigWithUI\\nan alchemy account config object containing the core and client store, as well as the UI config\",\"title\":\"Returns\",\"titles\":[\"createConfig\"]}]}],[\"index.927e620b217974b91b088037568d4187683e1c32de9368f46ea8eaf84c0929b4\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: AccountSigner\\ndescription: Overview of the AccountSigner method\\n---\\n\\n# AccountSigner\\n\\nCreates a new AccountSigner with the given ethers Provider and Smart Contract Account\\n:::note\\n`AccountSigner` extends `Signer`, see the docs for Signer for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { AccountSigner } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AccountSigner, EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { http } from \\\"viem\\\";\\n\\nconst account = await createLightAccount({\\n transport: http(\\\"https://rpc.testnet.aepps.com\\\"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n```\\n\\n## Parameters\\n\\n### provider\\n\\n`EthersProviderAdapter`\\nthe ethers provider to use\\n\\n### account\\n\\n`TAccount`\\nthe smart contract account that will be used to sign user ops and send them\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/constructor#accountsigner\",\"html\":\"\\n

Creates a new AccountSigner with the given ethers Provider and Smart Contract Account

\\n\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/constructor.mdx#accountsigner\",\"isPage\":true,\"text\":\"\\nCreates a new AccountSigner with the given ethers Provider and Smart Contract Account\\nAccountSigner extends Signer, see the docs for Signer for all supported methods.\\n\",\"title\":\"AccountSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/constructor#import\",\"html\":\"\\n
import { AccountSigner } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"AccountSigner\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/constructor#usage\",\"html\":\"\\n
import { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n  transport: http("https://rpc.testnet.aepps.com"),\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/constructor.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n transport: http("https://rpc.testnet.aepps.com"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n\",\"title\":\"Usage\",\"titles\":[\"AccountSigner\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"AccountSigner\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/constructor#provider\",\"html\":\"\\n

EthersProviderAdapter\\nthe ethers provider to use

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/constructor.mdx#provider\",\"isPage\":false,\"text\":\"\\nEthersProviderAdapter\\nthe ethers provider to use\\n\",\"title\":\"provider\",\"titles\":[\"AccountSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/constructor#account\",\"html\":\"\\n

TAccount\\nthe smart contract account that will be used to sign user ops and send them

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/constructor.mdx#account\",\"isPage\":false,\"text\":\"\\nTAccount\\nthe smart contract account that will be used to sign user ops and send them\",\"title\":\"account\",\"titles\":[\"AccountSigner\",\"Parameters\"]}]}],[\"index.0383fd1e5e80064b1807349b4516603149cbf652c43a707d888728c5bb7e2991\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: getBundlerClient\\ndescription: Overview of the getBundlerClient method\\n---\\n\\n# getBundlerClient\\n\\nRetrieves the BundlerClient instance from the provider.\\n\\n## Import\\n\\n```ts\\nimport { AccountSigner } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AccountSigner, EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { http } from \\\"viem\\\";\\n\\nconst account = await createLightAccount({\\n transport: http(\\\"https://rpc.testnet.aepps.com\\\"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n\\nconst bundler = signer.getBundlerClient();\\n```\\n\\n## Returns\\n\\n`BundlerClient`\\nThe BundlerClient instance\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/getBundlerClient#getbundlerclient\",\"html\":\"\\n

Retrieves the BundlerClient instance from the provider.

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/getBundlerClient.mdx#getbundlerclient\",\"isPage\":true,\"text\":\"\\nRetrieves the BundlerClient instance from the provider.\\n\",\"title\":\"getBundlerClient\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/getBundlerClient#import\",\"html\":\"\\n
import { AccountSigner } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/getBundlerClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"getBundlerClient\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/getBundlerClient#usage\",\"html\":\"\\n
import { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n  transport: http("https://rpc.testnet.aepps.com"),\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nconst bundler = signer.getBundlerClient();
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/getBundlerClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n transport: http("https://rpc.testnet.aepps.com"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nconst bundler = signer.getBundlerClient();\\n\",\"title\":\"Usage\",\"titles\":[\"getBundlerClient\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/getBundlerClient#returns\",\"html\":\"\\n

BundlerClient<Transport>\\nThe BundlerClient instance

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/getBundlerClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nBundlerClient<Transport>\\nThe BundlerClient instance\",\"title\":\"Returns\",\"titles\":[\"getBundlerClient\"]}]}],[\"index.8c053ad3ece8c58d46517a642cf972499cb2c252beae4197325e6ddb22fcc157\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: connect\\ndescription: Overview of the connect method\\n---\\n\\n# connect\\n\\nSets the provider for the account signer and returns the updated account signer instance.\\nNote: this is not necessary since the Provider is required by the constructor. This is useful\\nif you want to change the provider after the account signer has been created.\\n\\n## Import\\n\\n```ts\\nimport { AccountSigner } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AccountSigner, EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { http } from \\\"viem\\\";\\n\\nconst account = await createLightAccount({\\n transport: http(\\\"https://rpc.testnet.aepps.com\\\"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n\\nsigner.connect(provider);\\n```\\n\\n## Parameters\\n\\n### provider\\n\\n`EthersProviderAdapter`\\nthe provider to be set for the account signer\\n\\n## Returns\\n\\n`AccountSigner`\\nthe updated account signer instance\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/connect#connect\",\"html\":\"\\n

Sets the provider for the account signer and returns the updated account signer instance.\\nNote: this is not necessary since the Provider is required by the constructor. This is useful\\nif you want to change the provider after the account signer has been created.

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/connect.mdx#connect\",\"isPage\":true,\"text\":\"\\nSets the provider for the account signer and returns the updated account signer instance.\\nNote: this is not necessary since the Provider is required by the constructor. This is useful\\nif you want to change the provider after the account signer has been created.\\n\",\"title\":\"connect\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/connect#import\",\"html\":\"\\n
import { AccountSigner } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/connect.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"connect\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/connect#usage\",\"html\":\"\\n
import { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n  transport: http("https://rpc.testnet.aepps.com"),\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nsigner.connect(provider);
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/connect.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n transport: http("https://rpc.testnet.aepps.com"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nsigner.connect(provider);\\n\",\"title\":\"Usage\",\"titles\":[\"connect\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/connect#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/connect.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"connect\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/connect#provider\",\"html\":\"\\n

EthersProviderAdapter\\nthe provider to be set for the account signer

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/connect.mdx#provider\",\"isPage\":false,\"text\":\"\\nEthersProviderAdapter\\nthe provider to be set for the account signer\\n\",\"title\":\"provider\",\"titles\":[\"connect\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/connect#returns\",\"html\":\"\\n

AccountSigner<TAccount>\\nthe updated account signer instance

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/connect.mdx#returns\",\"isPage\":false,\"text\":\"\\nAccountSigner<TAccount>\\nthe updated account signer instance\",\"title\":\"Returns\",\"titles\":[\"connect\"]}]}],[\"index.23937773bb309f7cdedf5c9143eb8afb1ca03cba21effef4e3375251321c353b\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: getAddress\\ndescription: Overview of the getAddress method\\n---\\n\\n# getAddress\\n\\nReturns the account address if the account exists.\\n\\n## Import\\n\\n```ts\\nimport { AccountSigner } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AccountSigner, EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { http } from \\\"viem\\\";\\n\\nconst account = await createLightAccount({\\n transport: http(\\\"https://rpc.testnet.aepps.com\\\"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n\\nconst address = await signer.getAddress();\\n```\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to the account address\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/getAddress#getaddress\",\"html\":\"\\n

Returns the account address if the account exists.

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/getAddress.mdx#getaddress\",\"isPage\":true,\"text\":\"\\nReturns the account address if the account exists.\\n\",\"title\":\"getAddress\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/getAddress#import\",\"html\":\"\\n
import { AccountSigner } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/getAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"getAddress\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/getAddress#usage\",\"html\":\"\\n
import { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n  transport: http("https://rpc.testnet.aepps.com"),\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nconst address = await signer.getAddress();
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/getAddress.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n transport: http("https://rpc.testnet.aepps.com"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nconst address = await signer.getAddress();\\n\",\"title\":\"Usage\",\"titles\":[\"getAddress\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/getAddress#returns\",\"html\":\"\\n

Promise<string>\\na promise that resolves to the account address

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/getAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string>\\na promise that resolves to the account address\",\"title\":\"Returns\",\"titles\":[\"getAddress\"]}]}],[\"index.c63b317ea51c1b7fb31f572feea77f19f93b6444e346b3eec4ddac394876557b\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: signTransaction\\ndescription: Overview of the signTransaction method\\n---\\n\\n# signTransaction\\n\\nThrows an error indicating that transaction signing is not supported and advises to use `sendUserOperation` instead.\\n\\n## Import\\n\\n```ts\\nimport { AccountSigner } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Parameters\\n\\n### \\\\_transaction\\n\\n`Deferrable`\\nThe transaction request\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signTransaction#signtransaction\",\"html\":\"\\n

Throws an error indicating that transaction signing is not supported and advises to use sendUserOperation instead.

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signTransaction.mdx#signtransaction\",\"isPage\":true,\"text\":\"\\nThrows an error indicating that transaction signing is not supported and advises to use sendUserOperation instead.\\n\",\"title\":\"signTransaction\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signTransaction#import\",\"html\":\"\\n
import { AccountSigner } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signTransaction.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"signTransaction\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signTransaction#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signTransaction.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signTransaction\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signTransaction#_transaction\",\"html\":\"\\n

Deferrable<TransactionRequest>\\nThe transaction request

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signTransaction.mdx#_transaction\",\"isPage\":false,\"text\":\"\\nDeferrable<TransactionRequest>\\nThe transaction request\",\"title\":\"_transaction\",\"titles\":[\"signTransaction\",\"Parameters\"]}]}],[\"index.f99a3c751fedf03022d9b546f00ac895ad319d6c9add2f5362a12bacfe76c77a\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: signMessage\\ndescription: Overview of the signMessage method\\n---\\n\\n# signMessage\\n\\nSigns a message using the associated account.\\n\\n## Import\\n\\n```ts\\nimport { AccountSigner } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AccountSigner, EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { http } from \\\"viem\\\";\\n\\nconst account = await createLightAccount({\\n transport: http(\\\"https://rpc.testnet.aepps.com\\\"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n\\nconst message = await signer.signMessage(\\\"hello\\\");\\n```\\n\\n## Parameters\\n\\n### message\\n\\n`string | Uint8Array`\\nthe message to be signed\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to the signed message\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signMessage#signmessage\",\"html\":\"\\n

Signs a message using the associated account.

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signMessage.mdx#signmessage\",\"isPage\":true,\"text\":\"\\nSigns a message using the associated account.\\n\",\"title\":\"signMessage\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signMessage#import\",\"html\":\"\\n
import { AccountSigner } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signMessage.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signMessage#usage\",\"html\":\"\\n
import { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n  transport: http("https://rpc.testnet.aepps.com"),\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nconst message = await signer.signMessage("hello");
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signMessage.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n transport: http("https://rpc.testnet.aepps.com"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nconst message = await signer.signMessage("hello");\\n\",\"title\":\"Usage\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signMessage#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signMessage.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signMessage#message\",\"html\":\"\\n

string | Uint8Array\\nthe message to be signed

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signMessage.mdx#message\",\"isPage\":false,\"text\":\"\\nstring | Uint8Array\\nthe message to be signed\\n\",\"title\":\"message\",\"titles\":[\"signMessage\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/signMessage#returns\",\"html\":\"\\n

Promise<string>\\na promise that resolves to the signed message

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/signMessage.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string>\\na promise that resolves to the signed message\",\"title\":\"Returns\",\"titles\":[\"signMessage\"]}]}],[\"index.e770c2443c4928f0a9af14470be21ec796dfbf629e2cda9e7268ac774e59479f\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: sendTransaction\\ndescription: Overview of the sendTransaction method\\n---\\n\\n# sendTransaction\\n\\nSends a transaction using the account provider and returns the transaction response.\\n\\n## Import\\n\\n```ts\\nimport { AccountSigner } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AccountSigner, EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { http } from \\\"viem\\\";\\n\\nconst account = await createLightAccount({\\n transport: http(\\\"https://rpc.testnet.aepps.com\\\"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n\\nconst tx = await signer.sendTransaction({\\n to: \\\"0x1234567890123456789012345678901234567890\\\",\\n value: \\\"0x0\\\",\\n data: \\\"0x\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### transaction\\n\\n`Deferrable`\\nthe transaction request to be sent\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to the transaction response\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction#sendtransaction\",\"html\":\"\\n

Sends a transaction using the account provider and returns the transaction response.

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction.mdx#sendtransaction\",\"isPage\":true,\"text\":\"\\nSends a transaction using the account provider and returns the transaction response.\\n\",\"title\":\"sendTransaction\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction#import\",\"html\":\"\\n
import { AccountSigner } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"sendTransaction\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction#usage\",\"html\":\"\\n
import { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n  transport: http("https://rpc.testnet.aepps.com"),\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nconst tx = await signer.sendTransaction({\\n  to: "0x1234567890123456789012345678901234567890",\\n  value: "0x0",\\n  data: "0x",\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\nimport { http } from "viem";\\n \\nconst account = await createLightAccount({\\n transport: http("https://rpc.testnet.aepps.com"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter();\\nconst signer = new AccountSigner(provider, account);\\n \\nconst tx = await signer.sendTransaction({\\n to: "0x1234567890123456789012345678901234567890",\\n value: "0x0",\\n data: "0x",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"sendTransaction\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"sendTransaction\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction#transaction\",\"html\":\"\\n

Deferrable<TransactionRequest>\\nthe transaction request to be sent

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction.mdx#transaction\",\"isPage\":false,\"text\":\"\\nDeferrable<TransactionRequest>\\nthe transaction request to be sent\\n\",\"title\":\"transaction\",\"titles\":[\"sendTransaction\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction#returns\",\"html\":\"\\n

Promise<TransactionResponse>\\na promise that resolves to the transaction response

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/AccountSigner/sendTransaction.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<TransactionResponse>\\na promise that resolves to the transaction response\",\"title\":\"Returns\",\"titles\":[\"sendTransaction\"]}]}],[\"index.6cb48236853015262ced2d5a3c758acbf03e65b154065522a2c0bbda72fb0d9b\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useAccount\\ndescription: Overview of the useAccount method\\n---\\n\\n# useAccount\\n\\nHook to subscribe to account state and interactions, including creation, connection, and status monitoring. It synchronizes with external store updates and provides status-dependent results.\\nThe supported account types are: LightAccount, MultiOwnerLightAccount, and MultiOwnerModularAccount.\\n\\n## Import\\n\\n```ts\\nimport { useAccount } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useAccount } from \\\"@account-kit/react\\\";\\n\\nconst { account, address, isLoadingAccount } = useAccount({\\n type: \\\"LightAccount\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`UseAccountProps`\\nThe parameters required for account management, including account type, specific account parameters, and optional mutation arguments\\n\\n## Returns\\n\\n`UseAccountResult`\\nAn object containing the account information, address, and loading state\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useAccount#useaccount\",\"html\":\"\\n

Hook to subscribe to account state and interactions, including creation, connection, and status monitoring. It synchronizes with external store updates and provides status-dependent results.\\nThe supported account types are: LightAccount, MultiOwnerLightAccount, and MultiOwnerModularAccount.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAccount.mdx#useaccount\",\"isPage\":true,\"text\":\"\\nHook to subscribe to account state and interactions, including creation, connection, and status monitoring. It synchronizes with external store updates and provides status-dependent results.\\nThe supported account types are: LightAccount, MultiOwnerLightAccount, and MultiOwnerModularAccount.\\n\",\"title\":\"useAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useAccount#import\",\"html\":\"\\n
import { useAccount } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useAccount } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useAccount\"]},{\"href\":\"/reference/account-kit/react/hooks/useAccount#usage\",\"html\":\"\\n
import { useAccount } from "@account-kit/react";\\n \\nconst { account, address, isLoadingAccount } = useAccount({\\n  type: "LightAccount",\\n});
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useAccount } from "@account-kit/react";\\n \\nconst { account, address, isLoadingAccount } = useAccount({\\n type: "LightAccount",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"useAccount\"]},{\"href\":\"/reference/account-kit/react/hooks/useAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useAccount\"]},{\"href\":\"/reference/account-kit/react/hooks/useAccount#params\",\"html\":\"\\n

UseAccountProps<TAccount>\\nThe parameters required for account management, including account type, specific account parameters, and optional mutation arguments

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAccount.mdx#params\",\"isPage\":false,\"text\":\"\\nUseAccountProps<TAccount>\\nThe parameters required for account management, including account type, specific account parameters, and optional mutation arguments\\n\",\"title\":\"params\",\"titles\":[\"useAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useAccount#returns\",\"html\":\"\\n

UseAccountResult<TAccount>\\nAn object containing the account information, address, and loading state

\",\"id\":\"pages/reference/account-kit/react/hooks/useAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseAccountResult<TAccount>\\nAn object containing the account information, address, and loading state\",\"title\":\"Returns\",\"titles\":[\"useAccount\"]}]}],[\"index.fc95188b4eae342536e0f81f333be6127dee532828abefc8c0e034aa0aaecfd7\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useAddPasskey\\ndescription: Overview of the useAddPasskey method\\n---\\n\\n# useAddPasskey\\n\\nA custom hook to handle the addition of a passkey, which includes executing a mutation with optional parameters.\\n\\n## Import\\n\\n```ts\\nimport { useAddPasskey } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useAddPasskey } from \\\"@account-kit/react\\\";\\n\\nconst { addPasskey, isAddingPasskey, error } = useAddPasskey({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\\n\\n## Parameters\\n\\n### mutationArgs\\n\\n`UseAddPasskeyMutationArgs`\\nOptional arguments for the mutation used for adding a passkey\\n\\n## Returns\\n\\n`UseAddPasskeyResult`\\nAn object containing the `addPasskey` function, a boolean `isAddingPasskey` to track the mutation status, and any error encountered\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useAddPasskey#useaddpasskey\",\"html\":\"\\n

A custom hook to handle the addition of a passkey, which includes executing a mutation with optional parameters.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAddPasskey.mdx#useaddpasskey\",\"isPage\":true,\"text\":\"\\nA custom hook to handle the addition of a passkey, which includes executing a mutation with optional parameters.\\n\",\"title\":\"useAddPasskey\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useAddPasskey#import\",\"html\":\"\\n
import { useAddPasskey } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAddPasskey.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useAddPasskey } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useAddPasskey\"]},{\"href\":\"/reference/account-kit/react/hooks/useAddPasskey#usage\",\"html\":\"\\n
import { useAddPasskey } from "@account-kit/react";\\n \\nconst { addPasskey, isAddingPasskey, error } = useAddPasskey({\\n  // these are optional\\n  onSuccess: () => {\\n    // do something on success\\n  },\\n  onError: (error) => console.error(error),\\n});
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAddPasskey.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useAddPasskey } from "@account-kit/react";\\n \\nconst { addPasskey, isAddingPasskey, error } = useAddPasskey({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"useAddPasskey\"]},{\"href\":\"/reference/account-kit/react/hooks/useAddPasskey#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAddPasskey.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useAddPasskey\"]},{\"href\":\"/reference/account-kit/react/hooks/useAddPasskey#mutationargs\",\"html\":\"\\n

UseAddPasskeyMutationArgs\\nOptional arguments for the mutation used for adding a passkey

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAddPasskey.mdx#mutationargs\",\"isPage\":false,\"text\":\"\\nUseAddPasskeyMutationArgs\\nOptional arguments for the mutation used for adding a passkey\\n\",\"title\":\"mutationArgs\",\"titles\":[\"useAddPasskey\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useAddPasskey#returns\",\"html\":\"\\n

UseAddPasskeyResult\\nAn object containing the addPasskey function, a boolean isAddingPasskey to track the mutation status, and any error encountered

\",\"id\":\"pages/reference/account-kit/react/hooks/useAddPasskey.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseAddPasskeyResult\\nAn object containing the addPasskey function, a boolean isAddingPasskey to track the mutation status, and any error encountered\",\"title\":\"Returns\",\"titles\":[\"useAddPasskey\"]}]}],[\"index.5d915d417f3f09bb385475237894780b1f6a39b6245958fb0af076675ac40ec2\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: useAlchemyAccountContext\\ndescription: Overview of the useAlchemyAccountContext method\\n---\\n\\n# useAlchemyAccountContext\\n\\nInternal Only hook used to access the alchemy account context.\\nThis hook is meant to be consumed by other hooks exported by this package.\\n\\n## Import\\n\\n```ts\\nimport { useAlchemyAccountContext } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nimport { useAlchemyAccountContext } from \\\"@account-kit/react\\\";\\n\\nconst { config, queryClient } = useAlchemyAccountContext();\\n```\\n\\n## Parameters\\n\\n### override\\n\\n`AlchemyAccountContextProps`\\noptional context override that can be used to return a custom context\\n\\n## Returns\\n\\n`AlchemyAccountContextProps`\\nThe alchemy account context if one exists\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useAlchemyAccountContext#usealchemyaccountcontext\",\"html\":\"\\n

Internal Only hook used to access the alchemy account context.\\nThis hook is meant to be consumed by other hooks exported by this package.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAlchemyAccountContext.mdx#usealchemyaccountcontext\",\"isPage\":true,\"text\":\"\\nInternal Only hook used to access the alchemy account context.\\nThis hook is meant to be consumed by other hooks exported by this package.\\n\",\"title\":\"useAlchemyAccountContext\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useAlchemyAccountContext#import\",\"html\":\"\\n
import { useAlchemyAccountContext } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAlchemyAccountContext.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useAlchemyAccountContext } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useAlchemyAccountContext\"]},{\"href\":\"/reference/account-kit/react/hooks/useAlchemyAccountContext#usage\",\"html\":\"\\n
import { useAlchemyAccountContext } from "@account-kit/react";\\n \\nconst { config, queryClient } = useAlchemyAccountContext();
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAlchemyAccountContext.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useAlchemyAccountContext } from "@account-kit/react";\\n \\nconst { config, queryClient } = useAlchemyAccountContext();\\n\",\"title\":\"Usage\",\"titles\":[\"useAlchemyAccountContext\"]},{\"href\":\"/reference/account-kit/react/hooks/useAlchemyAccountContext#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAlchemyAccountContext.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useAlchemyAccountContext\"]},{\"href\":\"/reference/account-kit/react/hooks/useAlchemyAccountContext#override\",\"html\":\"\\n

AlchemyAccountContextProps\\noptional context override that can be used to return a custom context

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAlchemyAccountContext.mdx#override\",\"isPage\":false,\"text\":\"\\nAlchemyAccountContextProps\\noptional context override that can be used to return a custom context\\n\",\"title\":\"override\",\"titles\":[\"useAlchemyAccountContext\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useAlchemyAccountContext#returns\",\"html\":\"\\n

AlchemyAccountContextProps\\nThe alchemy account context if one exists

\",\"id\":\"pages/reference/account-kit/react/hooks/useAlchemyAccountContext.mdx#returns\",\"isPage\":false,\"text\":\"\\nAlchemyAccountContextProps\\nThe alchemy account context if one exists\",\"title\":\"Returns\",\"titles\":[\"useAlchemyAccountContext\"]}]}],[\"index.5142c7ef5302823e4ebf5015bc88a38cc31b8b6e09e241f622cf015a9e5dfa90\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useAuthenticate\\ndescription: Overview of the useAuthenticate method\\n---\\n\\n# useAuthenticate\\n\\nProvides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\\n\\n## Import\\n\\n```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\\n\\n## Parameters\\n\\n### mutationArgs\\n\\n`UseAuthenticateMutationArgs`\\nOptional mutation arguments to configure the authentication mutation\\n\\n## Returns\\n\\n`UseAuthenticateResult`\\nAn object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useAuthenticate#useauthenticate\",\"html\":\"\\n

Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthenticate.mdx#useauthenticate\",\"isPage\":true,\"text\":\"\\nProvides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\\n\",\"title\":\"useAuthenticate\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useAuthenticate#import\",\"html\":\"\\n
import { useAuthenticate } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthenticate.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useAuthenticate } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useAuthenticate\"]},{\"href\":\"/reference/account-kit/react/hooks/useAuthenticate#usage\",\"html\":\"\\n
import { useAuthenticate } from "@account-kit/react";\\n \\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n  // these are optional\\n  onSuccess: () => {\\n    // do something on success\\n  },\\n  onError: (error) => console.error(error),\\n});
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthenticate.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useAuthenticate } from "@account-kit/react";\\n \\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"useAuthenticate\"]},{\"href\":\"/reference/account-kit/react/hooks/useAuthenticate#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthenticate.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useAuthenticate\"]},{\"href\":\"/reference/account-kit/react/hooks/useAuthenticate#mutationargs\",\"html\":\"\\n

UseAuthenticateMutationArgs\\nOptional mutation arguments to configure the authentication mutation

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthenticate.mdx#mutationargs\",\"isPage\":false,\"text\":\"\\nUseAuthenticateMutationArgs\\nOptional mutation arguments to configure the authentication mutation\\n\",\"title\":\"mutationArgs\",\"titles\":[\"useAuthenticate\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useAuthenticate#returns\",\"html\":\"\\n

UseAuthenticateResult\\nAn object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication

\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthenticate.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseAuthenticateResult\\nAn object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\",\"title\":\"Returns\",\"titles\":[\"useAuthenticate\"]}]}],[\"index.296deaf0103fc231f1751b9f9bbd2292952250d049facd05264ebcbfcceec4c4\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useAuthModal\\ndescription: Overview of the useAuthModal method\\n---\\n\\n# useAuthModal\\n\\nA hook that returns the open and close functions for the Auth Modal if uiConfig\\nis enabled on the Account Provider\\n\\n## Import\\n\\n```ts\\nimport { useAuthModal } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nimport { useAuthModal } from \\\"@account-kit/react\\\";\\n\\nconst ComponentWithAuthModal = () => {\\n const { openAuthModal } = useAuthModal();\\n\\n return (\\n
\\n \\n
\\n );\\n};\\n```\\n\\n## Returns\\n\\n`UseAuthModalResult`\\nan object containing methods for opening or closing the auth modal\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useAuthModal#useauthmodal\",\"html\":\"\\n

A hook that returns the open and close functions for the Auth Modal if uiConfig\\nis enabled on the Account Provider

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthModal.mdx#useauthmodal\",\"isPage\":true,\"text\":\"\\nA hook that returns the open and close functions for the Auth Modal if uiConfig\\nis enabled on the Account Provider\\n\",\"title\":\"useAuthModal\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useAuthModal#import\",\"html\":\"\\n
import { useAuthModal } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthModal.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useAuthModal } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useAuthModal\"]},{\"href\":\"/reference/account-kit/react/hooks/useAuthModal#usage\",\"html\":\"\\n
import { useAuthModal } from "@account-kit/react";\\n \\nconst ComponentWithAuthModal = () => {\\n  const { openAuthModal } = useAuthModal();\\n \\n  return (\\n    <div>\\n      <button onClick={openAuthModal}>Login</button>\\n    </div>\\n  );\\n};
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthModal.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useAuthModal } from "@account-kit/react";\\n \\nconst ComponentWithAuthModal = () => {\\n const { openAuthModal } = useAuthModal();\\n \\n return (\\n <div>\\n <button onClick={openAuthModal}>Login</button>\\n </div>\\n );\\n};\\n\",\"title\":\"Usage\",\"titles\":[\"useAuthModal\"]},{\"href\":\"/reference/account-kit/react/hooks/useAuthModal#returns\",\"html\":\"\\n

UseAuthModalResult\\nan object containing methods for opening or closing the auth modal

\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthModal.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseAuthModalResult\\nan object containing methods for opening or closing the auth modal\",\"title\":\"Returns\",\"titles\":[\"useAuthModal\"]}]}],[\"index.9ea3ede77bf75da1815d8d8f6736705718492a1a31679985c1ae52bbbb2fcd25\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useAuthError\\ndescription: Overview of the useAuthError method\\n---\\n\\n# useAuthError\\n\\nReturns the error returned from the current auth step, if it exists\\n\\n## Import\\n\\n```ts\\nimport { useAuthError } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nimport { useAuthError } from \\\"@account-kit/react\\\";\\n\\nconst error = useAuthError();\\n\\nif (error) {\\n console.error(\\\"Error occurred during auth step\\\", error);\\n}\\n```\\n\\n## Returns\\n\\n`UseAuthErrorResult`\\nthe current Error object\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useAuthError#useautherror\",\"html\":\"\\n

Returns the error returned from the current auth step, if it exists

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthError.mdx#useautherror\",\"isPage\":true,\"text\":\"\\nReturns the error returned from the current auth step, if it exists\\n\",\"title\":\"useAuthError\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useAuthError#import\",\"html\":\"\\n
import { useAuthError } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthError.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useAuthError } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useAuthError\"]},{\"href\":\"/reference/account-kit/react/hooks/useAuthError#usage\",\"html\":\"\\n
import { useAuthError } from "@account-kit/react";\\n \\nconst error = useAuthError();\\n \\nif (error) {\\n  console.error("Error occurred during auth step", error);\\n}
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthError.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useAuthError } from "@account-kit/react";\\n \\nconst error = useAuthError();\\n \\nif (error) {\\n console.error("Error occurred during auth step", error);\\n}\\n\",\"title\":\"Usage\",\"titles\":[\"useAuthError\"]},{\"href\":\"/reference/account-kit/react/hooks/useAuthError#returns\",\"html\":\"\\n

UseAuthErrorResult\\nthe current Error object

\",\"id\":\"pages/reference/account-kit/react/hooks/useAuthError.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseAuthErrorResult\\nthe current Error object\",\"title\":\"Returns\",\"titles\":[\"useAuthError\"]}]}],[\"index.d9aeb9b8543ed7f7726c23380b4bcb3b781c14e2567eec987b811113ab63ba50\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useClientActions\\ndescription: Overview of the useClientActions method\\n---\\n\\n# useClientActions\\n\\nA hook that allows you to leverage client decorators to execute actions\\nand await them in your UX. This is particularly useful for using Plugins\\nwith Modular Accounts.\\n\\n## Import\\n\\n```ts\\nimport { useClientActions } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nconst Foo = () => {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { executeAction } = useClientActions({\\n client,\\n pluginActions: sessionKeyPluginActions,\\n });\\n\\n executeAction({\\n functionName: \\\"isAccountSessionKey\\\",\\n args: [{ key: \\\"0x0\\\" }],\\n });\\n};\\n```\\n\\n## Parameters\\n\\n### args\\n\\n`UseClientActionsProps`\\nthe hooks arguments highlighted below\\n\\n### args.client\\n\\n`SmartAccountClient`\\nthe smart account client returned from useSmartAccountClient\\n\\n### args.actions\\n\\n`object`\\nthe smart account client decorator you want to execute actions from\\n\\n## Returns\\n\\n`UseClientActionsResult`\\nan object containing methods to execute the actions as well loading and error states\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useClientActions#useclientactions\",\"html\":\"\\n

A hook that allows you to leverage client decorators to execute actions\\nand await them in your UX. This is particularly useful for using Plugins\\nwith Modular Accounts.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useClientActions.mdx#useclientactions\",\"isPage\":true,\"text\":\"\\nA hook that allows you to leverage client decorators to execute actions\\nand await them in your UX. This is particularly useful for using Plugins\\nwith Modular Accounts.\\n\",\"title\":\"useClientActions\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useClientActions#import\",\"html\":\"\\n
import { useClientActions } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useClientActions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useClientActions } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useClientActions\"]},{\"href\":\"/reference/account-kit/react/hooks/useClientActions#usage\",\"html\":\"\\n
const Foo = () => {\\n  const { client } = useSmartAccountClient({\\n    type: "MultiOwnerModularAccount",\\n  });\\n  const { executeAction } = useClientActions({\\n    client,\\n    pluginActions: sessionKeyPluginActions,\\n  });\\n \\n  executeAction({\\n    functionName: "isAccountSessionKey",\\n    args: [{ key: "0x0" }],\\n  });\\n};
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useClientActions.mdx#usage\",\"isPage\":false,\"text\":\"\\nconst Foo = () => {\\n const { client } = useSmartAccountClient({\\n type: "MultiOwnerModularAccount",\\n });\\n const { executeAction } = useClientActions({\\n client,\\n pluginActions: sessionKeyPluginActions,\\n });\\n \\n executeAction({\\n functionName: "isAccountSessionKey",\\n args: [{ key: "0x0" }],\\n });\\n};\\n\",\"title\":\"Usage\",\"titles\":[\"useClientActions\"]},{\"href\":\"/reference/account-kit/react/hooks/useClientActions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useClientActions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useClientActions\"]},{\"href\":\"/reference/account-kit/react/hooks/useClientActions#args\",\"html\":\"\\n

UseClientActionsProps<TTransport, TChain, TActions>\\nthe hooks arguments highlighted below

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useClientActions.mdx#args\",\"isPage\":false,\"text\":\"\\nUseClientActionsProps<TTransport, TChain, TActions>\\nthe hooks arguments highlighted below\\n\",\"title\":\"args\",\"titles\":[\"useClientActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useClientActions#argsclient\",\"html\":\"\\n

SmartAccountClient\\nthe smart account client returned from useSmartAccountClient

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useClientActions.mdx#argsclient\",\"isPage\":false,\"text\":\"\\nSmartAccountClient\\nthe smart account client returned from useSmartAccountClient\\n\",\"title\":\"args.client\",\"titles\":[\"useClientActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useClientActions#argsactions\",\"html\":\"\\n

object\\nthe smart account client decorator you want to execute actions from

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useClientActions.mdx#argsactions\",\"isPage\":false,\"text\":\"\\nobject\\nthe smart account client decorator you want to execute actions from\\n\",\"title\":\"args.actions\",\"titles\":[\"useClientActions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useClientActions#returns\",\"html\":\"\\n

UseClientActionsResult<TActions>\\nan object containing methods to execute the actions as well loading and error states

\",\"id\":\"pages/reference/account-kit/react/hooks/useClientActions.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseClientActionsResult<TActions>\\nan object containing methods to execute the actions as well loading and error states\",\"title\":\"Returns\",\"titles\":[\"useClientActions\"]}]}],[\"index.ad69b2b1f35de7d65b787111565b3c0d2d3c9fae71c7f54ce77af418ac333253\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: useBundlerClient\\ndescription: Overview of the useBundlerClient method\\n---\\n\\n# useBundlerClient\\n\\nCustom hook to get a bundler client using the Alchemy account context.\\nIt uses `useSyncExternalStore` to watch for any changes in the bundler client configuration and provides the updated bundler client.\\n\\n## Import\\n\\n```ts\\nimport { useBundlerClient } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useBundlerClient } from \\\"@account-kit/react\\\";\\n\\nconst bundlerClient = useBundlerClient();\\n```\\n\\n## Returns\\n\\n`BundlerClient`\\nThe bundler client based on the current Alchemy account configuration\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useBundlerClient#usebundlerclient\",\"html\":\"\\n

Custom hook to get a bundler client using the Alchemy account context.\\nIt uses useSyncExternalStore to watch for any changes in the bundler client configuration and provides the updated bundler client.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useBundlerClient.mdx#usebundlerclient\",\"isPage\":true,\"text\":\"\\nCustom hook to get a bundler client using the Alchemy account context.\\nIt uses useSyncExternalStore to watch for any changes in the bundler client configuration and provides the updated bundler client.\\n\",\"title\":\"useBundlerClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useBundlerClient#import\",\"html\":\"\\n
import { useBundlerClient } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useBundlerClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useBundlerClient } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useBundlerClient\"]},{\"href\":\"/reference/account-kit/react/hooks/useBundlerClient#usage\",\"html\":\"\\n
import { useBundlerClient } from "@account-kit/react";\\n \\nconst bundlerClient = useBundlerClient();
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useBundlerClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useBundlerClient } from "@account-kit/react";\\n \\nconst bundlerClient = useBundlerClient();\\n\",\"title\":\"Usage\",\"titles\":[\"useBundlerClient\"]},{\"href\":\"/reference/account-kit/react/hooks/useBundlerClient#returns\",\"html\":\"\\n

BundlerClient\\nThe bundler client based on the current Alchemy account configuration

\",\"id\":\"pages/reference/account-kit/react/hooks/useBundlerClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nBundlerClient\\nThe bundler client based on the current Alchemy account configuration\",\"title\":\"Returns\",\"titles\":[\"useBundlerClient\"]}]}],[\"index.623900ffe9060319b56c3bd241181b8fc8bd2f62e368dafd4987d4e3f62b8a03\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useChain\\ndescription: Overview of the useChain method\\n---\\n\\n# useChain\\n\\nA hook that returns the current chain as well as a function to set the chain.\\nNote: when calling `setChain` the chain that's passed in must be defined in\\nyour initial `createConfig` call.\\n\\n## Import\\n\\n```ts\\nimport { useChain } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nimport { useChain } from \\\"@account-kit/react\\\";\\n// Assuming the chain sepolia is defined in your initial createConfig call\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nfunction ComponentUsingChain() {\\n const { chain, setChain, isSettingChain } = useChain();\\n\\n return (\\n
\\n

Current Chain: {chain.id}

\\n setChain({ chain: sepolia })}\\n disabled={isSettingChain}\\n >\\n Set Chain\\n \\n
\\n );\\n}\\n```\\n\\n## Parameters\\n\\n### mutationArgs\\n\\n`UseChainParams`\\noptional properties which contain mutation arg overrides\\n\\n## Returns\\n\\n`UseChainResult`\\nan object containing the current chain and a function to set the chain as well as loading state of setting the chain\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useChain#usechain\",\"html\":\"\\n

A hook that returns the current chain as well as a function to set the chain.\\nNote: when calling setChain the chain that's passed in must be defined in\\nyour initial createConfig call.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useChain.mdx#usechain\",\"isPage\":true,\"text\":\"\\nA hook that returns the current chain as well as a function to set the chain.\\nNote: when calling setChain the chain that's passed in must be defined in\\nyour initial createConfig call.\\n\",\"title\":\"useChain\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useChain#import\",\"html\":\"\\n
import { useChain } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useChain.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useChain } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useChain\"]},{\"href\":\"/reference/account-kit/react/hooks/useChain#usage\",\"html\":\"\\n
import { useChain } from "@account-kit/react";\\n// Assuming the chain sepolia is defined in your initial createConfig call\\nimport { sepolia } from "@account-kit/infra";\\n \\nfunction ComponentUsingChain() {\\n  const { chain, setChain, isSettingChain } = useChain();\\n \\n  return (\\n    <div>\\n      <p>Current Chain: {chain.id}</p>\\n      <button\\n        onClick={() => setChain({ chain: sepolia })}\\n        disabled={isSettingChain}\\n      >\\n        Set Chain\\n      </button>\\n    </div>\\n  );\\n}
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useChain.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useChain } from "@account-kit/react";\\n// Assuming the chain sepolia is defined in your initial createConfig call\\nimport { sepolia } from "@account-kit/infra";\\n \\nfunction ComponentUsingChain() {\\n const { chain, setChain, isSettingChain } = useChain();\\n \\n return (\\n <div>\\n <p>Current Chain: {chain.id}</p>\\n <button\\n onClick={() => setChain({ chain: sepolia })}\\n disabled={isSettingChain}\\n >\\n Set Chain\\n </button>\\n </div>\\n );\\n}\\n\",\"title\":\"Usage\",\"titles\":[\"useChain\"]},{\"href\":\"/reference/account-kit/react/hooks/useChain#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useChain.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useChain\"]},{\"href\":\"/reference/account-kit/react/hooks/useChain#mutationargs\",\"html\":\"\\n

UseChainParams\\noptional properties which contain mutation arg overrides

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useChain.mdx#mutationargs\",\"isPage\":false,\"text\":\"\\nUseChainParams\\noptional properties which contain mutation arg overrides\\n\",\"title\":\"mutationArgs\",\"titles\":[\"useChain\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useChain#returns\",\"html\":\"\\n

UseChainResult\\nan object containing the current chain and a function to set the chain as well as loading state of setting the chain

\",\"id\":\"pages/reference/account-kit/react/hooks/useChain.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseChainResult\\nan object containing the current chain and a function to set the chain as well as loading state of setting the chain\",\"title\":\"Returns\",\"titles\":[\"useChain\"]}]}],[\"index.d711e42934b4c6378781a697b701d3ce900d1c376d3bfbdb0cd98b2bb91c4379\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: useConnection\\ndescription: Overview of the useConnection method\\n---\\n\\n# useConnection\\n\\nA hook that returns the current connection\\n\\n## Import\\n\\n```ts\\nimport { useConnection } from \\\"@account-kit/react\\\";\\n```\\n\\n## Returns\\n\\n`Connection`\\nthe current connection\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useConnection#useconnection\",\"html\":\"\\n

A hook that returns the current connection

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useConnection.mdx#useconnection\",\"isPage\":true,\"text\":\"\\nA hook that returns the current connection\\n\",\"title\":\"useConnection\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useConnection#import\",\"html\":\"\\n
import { useConnection } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useConnection.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useConnection } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useConnection\"]},{\"href\":\"/reference/account-kit/react/hooks/useConnection#returns\",\"html\":\"\\n

Connection\\nthe current connection

\",\"id\":\"pages/reference/account-kit/react/hooks/useConnection.mdx#returns\",\"isPage\":false,\"text\":\"\\nConnection\\nthe current connection\",\"title\":\"Returns\",\"titles\":[\"useConnection\"]}]}],[\"index.acf7d30cbad202ff4f63d8e64721c2e76c7424503a086134292a9ba926adde6e\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useDropAndReplaceUserOperation\\ndescription: Overview of the useDropAndReplaceUserOperation method\\n---\\n\\n# useDropAndReplaceUserOperation\\n\\nCustom hook that handles the drop and replace user operation for a given client and mutation arguments.\\n\\n## Import\\n\\n```ts\\nimport { useDropAndReplaceUserOperation } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nimport {\\n useDropAndReplaceUserOperation,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nexport function ComponentWithDropAndReplaceUO() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperationAsync, isSendingUserOperation } =\\n useSendUserOperation({\\n client,\\n });\\n const { dropAndReplaceUserOperation, isDroppingAndReplacingUserOperation } =\\n useDropAndReplaceUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n {\\n const { request } = await sendUserOperationAsync({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n });\\n\\n dropAndReplaceUserOperation({\\n uoToDrop: request,\\n });\\n }}\\n disabled={isSendingUserOperation || isDroppingAndReplacingUserOperation}\\n >\\n {isSendingUserOperation\\n ? \\\"Sending...\\\"\\n : isDroppingAndReplacingUserOperation\\n ? \\\"Replacing...\\\"\\n : \\\"Send then Replace UO\\\"}\\n \\n
\\n );\\n}\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`UseDropAndReplaceUserOperationArgs`\\nThe configuration parameters including the client and other mutation arguments\\n\\n## Returns\\n\\n`UseDropAndReplaceUserOperationResult`\\nThe result containing the mutation function, result data, loading state, and any error\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useDropAndReplaceUserOperation#usedropandreplaceuseroperation\",\"html\":\"\\n

Custom hook that handles the drop and replace user operation for a given client and mutation arguments.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useDropAndReplaceUserOperation.mdx#usedropandreplaceuseroperation\",\"isPage\":true,\"text\":\"\\nCustom hook that handles the drop and replace user operation for a given client and mutation arguments.\\n\",\"title\":\"useDropAndReplaceUserOperation\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useDropAndReplaceUserOperation#import\",\"html\":\"\\n
import { useDropAndReplaceUserOperation } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useDropAndReplaceUserOperation.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useDropAndReplaceUserOperation } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useDropAndReplaceUserOperation\"]},{\"href\":\"/reference/account-kit/react/hooks/useDropAndReplaceUserOperation#usage\",\"html\":\"\\n
import {\\n  useDropAndReplaceUserOperation,\\n  useSendUserOperation,\\n  useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nexport function ComponentWithDropAndReplaceUO() {\\n  const { client } = useSmartAccountClient({\\n    type: "MultiOwnerModularAccount",\\n  });\\n  const { sendUserOperationAsync, isSendingUserOperation } =\\n    useSendUserOperation({\\n      client,\\n    });\\n  const { dropAndReplaceUserOperation, isDroppingAndReplacingUserOperation } =\\n    useDropAndReplaceUserOperation({\\n      client,\\n      onSuccess: ({ hash, request }) => {\\n        // [optional] Do something with the hash and request\\n      },\\n      onError: (error) => {\\n        // [optional] Do something with the error\\n      },\\n      // [optional] ...additional mutationArgs\\n    });\\n \\n  return (\\n    <div>\\n      <button\\n        onClick={async () => {\\n          const { request } = await sendUserOperationAsync({\\n            uo: {\\n              target: "0xTARGET_ADDRESS",\\n              data: "0x",\\n              value: 0n,\\n            },\\n          });\\n \\n          dropAndReplaceUserOperation({\\n            uoToDrop: request,\\n          });\\n        }}\\n        disabled={isSendingUserOperation || isDroppingAndReplacingUserOperation}\\n      >\\n        {isSendingUserOperation\\n          ? "Sending..."\\n          : isDroppingAndReplacingUserOperation\\n          ? "Replacing..."\\n          : "Send then Replace UO"}\\n      </button>\\n    </div>\\n  );\\n}
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useDropAndReplaceUserOperation.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport {\\n useDropAndReplaceUserOperation,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nexport function ComponentWithDropAndReplaceUO() {\\n const { client } = useSmartAccountClient({\\n type: "MultiOwnerModularAccount",\\n });\\n const { sendUserOperationAsync, isSendingUserOperation } =\\n useSendUserOperation({\\n client,\\n });\\n const { dropAndReplaceUserOperation, isDroppingAndReplacingUserOperation } =\\n useDropAndReplaceUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n \\n return (\\n <div>\\n <button\\n onClick={async () => {\\n const { request } = await sendUserOperationAsync({\\n uo: {\\n target: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: 0n,\\n },\\n });\\n \\n dropAndReplaceUserOperation({\\n uoToDrop: request,\\n });\\n }}\\n disabled={isSendingUserOperation || isDroppingAndReplacingUserOperation}\\n >\\n {isSendingUserOperation\\n ? "Sending..."\\n : isDroppingAndReplacingUserOperation\\n ? "Replacing..."\\n : "Send then Replace UO"}\\n </button>\\n </div>\\n );\\n}\\n\",\"title\":\"Usage\",\"titles\":[\"useDropAndReplaceUserOperation\"]},{\"href\":\"/reference/account-kit/react/hooks/useDropAndReplaceUserOperation#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useDropAndReplaceUserOperation.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useDropAndReplaceUserOperation\"]},{\"href\":\"/reference/account-kit/react/hooks/useDropAndReplaceUserOperation#config\",\"html\":\"\\n

UseDropAndReplaceUserOperationArgs<TEntryPointVersion, TAccount>\\nThe configuration parameters including the client and other mutation arguments

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useDropAndReplaceUserOperation.mdx#config\",\"isPage\":false,\"text\":\"\\nUseDropAndReplaceUserOperationArgs<TEntryPointVersion, TAccount>\\nThe configuration parameters including the client and other mutation arguments\\n\",\"title\":\"config\",\"titles\":[\"useDropAndReplaceUserOperation\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useDropAndReplaceUserOperation#returns\",\"html\":\"\\n

UseDropAndReplaceUserOperationResult<TEntryPointVersion, TAccount>\\nThe result containing the mutation function, result data, loading state, and any error

\",\"id\":\"pages/reference/account-kit/react/hooks/useDropAndReplaceUserOperation.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseDropAndReplaceUserOperationResult<TEntryPointVersion, TAccount>\\nThe result containing the mutation function, result data, loading state, and any error\",\"title\":\"Returns\",\"titles\":[\"useDropAndReplaceUserOperation\"]}]}],[\"index.14611a6e6e486a69188bda0e04c2121b6f5a3a6f9817137da0f8394191b52987\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: useConnect\\ndescription: Overview of the useConnect method\\n---\\n\\n# useConnect\\n\\nRe-exported wagmi hook for connecting an EOA. This hook\\nuses the internal wagmi config though so that the state\\nis in sync with the rest of the Alchemy Account hook state\\n\\n## Import\\n\\n```ts\\nimport { useConnect } from \\\"@account-kit/react\\\";\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`UseMutationParameters`\\nmutation parameters to use for the connect mutation\\n\\n## Returns\\n\\n`UseConnectReturnType`\\nthe wagmi useConnect return type\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useConnect#useconnect\",\"html\":\"\\n

Re-exported wagmi hook for connecting an EOA. This hook\\nuses the internal wagmi config though so that the state\\nis in sync with the rest of the Alchemy Account hook state

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useConnect.mdx#useconnect\",\"isPage\":true,\"text\":\"\\nRe-exported wagmi hook for connecting an EOA. This hook\\nuses the internal wagmi config though so that the state\\nis in sync with the rest of the Alchemy Account hook state\\n\",\"title\":\"useConnect\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useConnect#import\",\"html\":\"\\n
import { useConnect } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useConnect.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useConnect } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useConnect\"]},{\"href\":\"/reference/account-kit/react/hooks/useConnect#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useConnect.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useConnect\"]},{\"href\":\"/reference/account-kit/react/hooks/useConnect#params\",\"html\":\"\\n

UseMutationParameters\\nmutation parameters to use for the connect mutation

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useConnect.mdx#params\",\"isPage\":false,\"text\":\"\\nUseMutationParameters\\nmutation parameters to use for the connect mutation\\n\",\"title\":\"params\",\"titles\":[\"useConnect\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useConnect#returns\",\"html\":\"\\n

UseConnectReturnType\\nthe wagmi useConnect return type

\",\"id\":\"pages/reference/account-kit/react/hooks/useConnect.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseConnectReturnType\\nthe wagmi useConnect return type\",\"title\":\"Returns\",\"titles\":[\"useConnect\"]}]}],[\"index.9d4207cf7cb7cab553f4a2959a497cd1a31843e4294c547bf1c2a5b6480852e7\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useExportAccount\\ndescription: Overview of the useExportAccount method\\n---\\n\\n# useExportAccount\\n\\nA hook use to export the private key for an account. It returns the mutation functions to kick off the export process, as well as a component to render the account recovery details in an iframe.\\n\\n## Import\\n\\n```ts\\nimport { useExportAccount } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useExportAccount } from \\\"@account-kit/react\\\";\\n\\nconst {\\n exportAccount,\\n isExported,\\n isExporting,\\n error,\\n ExportAccountComponent,\\n} = useExportAccount({\\n params: {\\n iframeContainerId: \\\"my-iframe-container\\\",\\n },\\n});\\n```\\n\\n## Parameters\\n\\n### args\\n\\n`UseExportAccountMutationArgs`\\nOptional arguments for the mutation and export parameters\\n\\n## Returns\\n\\n`UseExportAccountResult`\\nAn object containing the export state, possible error, and the export account function and component\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useExportAccount#useexportaccount\",\"html\":\"\\n

A hook use to export the private key for an account. It returns the mutation functions to kick off the export process, as well as a component to render the account recovery details in an iframe.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useExportAccount.mdx#useexportaccount\",\"isPage\":true,\"text\":\"\\nA hook use to export the private key for an account. It returns the mutation functions to kick off the export process, as well as a component to render the account recovery details in an iframe.\\n\",\"title\":\"useExportAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useExportAccount#import\",\"html\":\"\\n
import { useExportAccount } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useExportAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useExportAccount } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useExportAccount\"]},{\"href\":\"/reference/account-kit/react/hooks/useExportAccount#usage\",\"html\":\"\\n
import { useExportAccount } from "@account-kit/react";\\n \\nconst {\\n  exportAccount,\\n  isExported,\\n  isExporting,\\n  error,\\n  ExportAccountComponent,\\n} = useExportAccount({\\n  params: {\\n    iframeContainerId: "my-iframe-container",\\n  },\\n});
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useExportAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useExportAccount } from "@account-kit/react";\\n \\nconst {\\n exportAccount,\\n isExported,\\n isExporting,\\n error,\\n ExportAccountComponent,\\n} = useExportAccount({\\n params: {\\n iframeContainerId: "my-iframe-container",\\n },\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"useExportAccount\"]},{\"href\":\"/reference/account-kit/react/hooks/useExportAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useExportAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useExportAccount\"]},{\"href\":\"/reference/account-kit/react/hooks/useExportAccount#args\",\"html\":\"\\n

UseExportAccountMutationArgs\\nOptional arguments for the mutation and export parameters

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useExportAccount.mdx#args\",\"isPage\":false,\"text\":\"\\nUseExportAccountMutationArgs\\nOptional arguments for the mutation and export parameters\\n\",\"title\":\"args\",\"titles\":[\"useExportAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useExportAccount#returns\",\"html\":\"\\n

UseExportAccountResult\\nAn object containing the export state, possible error, and the export account function and component

\",\"id\":\"pages/reference/account-kit/react/hooks/useExportAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseExportAccountResult\\nAn object containing the export state, possible error, and the export account function and component\",\"title\":\"Returns\",\"titles\":[\"useExportAccount\"]}]}],[\"index.95882ffc775afa631fae3c0664d23c9fd05d7b500f8c6592f0d1cd3ede39d864\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useLogout\\ndescription: Overview of the useLogout method\\n---\\n\\n# useLogout\\n\\nProvides a hook to log out a user, disconnecting the signer and triggering the disconnectAsync function.\\n\\n## Import\\n\\n```ts\\nimport { useLogout } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useLogout } from \\\"@account-kit/react\\\";\\n\\nconst { logout, isLoggingOut, error } = useLogout({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\\n\\n## Parameters\\n\\n### mutationArgs\\n\\n`UseLogoutMutationArgs`\\noptional arguments to customize the mutation behavior\\n\\n## Returns\\n\\n`UseLogoutResult`\\nan object containing the logout function, a boolean indicating if logout is in progress, and any error encountered during logout\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useLogout#uselogout\",\"html\":\"\\n

Provides a hook to log out a user, disconnecting the signer and triggering the disconnectAsync function.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useLogout.mdx#uselogout\",\"isPage\":true,\"text\":\"\\nProvides a hook to log out a user, disconnecting the signer and triggering the disconnectAsync function.\\n\",\"title\":\"useLogout\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useLogout#import\",\"html\":\"\\n
import { useLogout } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useLogout.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useLogout } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useLogout\"]},{\"href\":\"/reference/account-kit/react/hooks/useLogout#usage\",\"html\":\"\\n
import { useLogout } from "@account-kit/react";\\n \\nconst { logout, isLoggingOut, error } = useLogout({\\n  // these are optional\\n  onSuccess: () => {\\n    // do something on success\\n  },\\n  onError: (error) => console.error(error),\\n});
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useLogout.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useLogout } from "@account-kit/react";\\n \\nconst { logout, isLoggingOut, error } = useLogout({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"useLogout\"]},{\"href\":\"/reference/account-kit/react/hooks/useLogout#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useLogout.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useLogout\"]},{\"href\":\"/reference/account-kit/react/hooks/useLogout#mutationargs\",\"html\":\"\\n

UseLogoutMutationArgs\\noptional arguments to customize the mutation behavior

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useLogout.mdx#mutationargs\",\"isPage\":false,\"text\":\"\\nUseLogoutMutationArgs\\noptional arguments to customize the mutation behavior\\n\",\"title\":\"mutationArgs\",\"titles\":[\"useLogout\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useLogout#returns\",\"html\":\"\\n

UseLogoutResult\\nan object containing the logout function, a boolean indicating if logout is in progress, and any error encountered during logout

\",\"id\":\"pages/reference/account-kit/react/hooks/useLogout.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseLogoutResult\\nan object containing the logout function, a boolean indicating if logout is in progress, and any error encountered during logout\",\"title\":\"Returns\",\"titles\":[\"useLogout\"]}]}],[\"index.8f5bae8af5191af9c746727d8fb0a595e50ffd2073863b3278d49e9de7a21b0a\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useSendTransaction\\ndescription: Overview of the useSendTransaction method\\n---\\n\\n# useSendTransaction\\n\\nSend a TX request as a user operation and wait for it to be mined\\n\\n## Import\\n\\n```ts\\nimport { useSendTransaction } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nimport { useSendTransaction, useSmartAccountClient } from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendTransaction() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n\\n const { sendTransaction, isSendingTransaction } = useSendTransaction({\\n client,\\n onSuccess: (hash) => {\\n // [optional] Do something with the hash\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendTransaction({\\n to: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n account: \\\"0xACCOUNT_ADDRESS\\\",\\n chain: sepolia,\\n // ... other parameters\\n })\\n }\\n disabled={isSendingTransaction}\\n >\\n {isSendingTransaction ? \\\"Sending...\\\" : \\\"Send Txn\\\"}\\n \\n
\\n );\\n}\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`UseSendTransactionArgs`\\n\\n- parameters for sending a transaction\\n\\n ## Returns\\n\\n `UseSendTransactionResult`\\n functions and state for sending txs\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useSendTransaction#usesendtransaction\",\"html\":\"\\n

Send a TX request as a user operation and wait for it to be mined

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransaction.mdx#usesendtransaction\",\"isPage\":true,\"text\":\"\\nSend a TX request as a user operation and wait for it to be mined\\n\",\"title\":\"useSendTransaction\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransaction#import\",\"html\":\"\\n
import { useSendTransaction } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransaction.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useSendTransaction } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useSendTransaction\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransaction#usage\",\"html\":\"\\n
import { useSendTransaction, useSmartAccountClient } from "@account-kit/react";\\n \\nfunction ComponentWithSendTransaction() {\\n  const { client } = useSmartAccountClient({\\n    type: "MultiOwnerModularAccount",\\n  });\\n \\n  const { sendTransaction, isSendingTransaction } = useSendTransaction({\\n    client,\\n    onSuccess: (hash) => {\\n      // [optional] Do something with the hash\\n    },\\n    onError: (error) => {\\n      // [optional] Do something with the error\\n    },\\n    // [optional] ...additional mutationArgs\\n  });\\n \\n  return (\\n    <div>\\n      <button\\n        onClick={() =>\\n          sendTransaction({\\n            to: "0xTARGET_ADDRESS",\\n            data: "0x",\\n            value: 0n,\\n            account: "0xACCOUNT_ADDRESS",\\n            chain: sepolia,\\n            // ... other parameters\\n          })\\n        }\\n        disabled={isSendingTransaction}\\n      >\\n        {isSendingTransaction ? "Sending..." : "Send Txn"}\\n      </button>\\n    </div>\\n  );\\n}
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransaction.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useSendTransaction, useSmartAccountClient } from "@account-kit/react";\\n \\nfunction ComponentWithSendTransaction() {\\n const { client } = useSmartAccountClient({\\n type: "MultiOwnerModularAccount",\\n });\\n \\n const { sendTransaction, isSendingTransaction } = useSendTransaction({\\n client,\\n onSuccess: (hash) => {\\n // [optional] Do something with the hash\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n \\n return (\\n <div>\\n <button\\n onClick={() =>\\n sendTransaction({\\n to: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: 0n,\\n account: "0xACCOUNT_ADDRESS",\\n chain: sepolia,\\n // ... other parameters\\n })\\n }\\n disabled={isSendingTransaction}\\n >\\n {isSendingTransaction ? "Sending..." : "Send Txn"}\\n </button>\\n </div>\\n );\\n}\\n\",\"title\":\"Usage\",\"titles\":[\"useSendTransaction\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransaction#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransaction.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useSendTransaction\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransaction#params\",\"html\":\"\\n

UseSendTransactionArgs

\\n
    \\n
  • \\n

    parameters for sending a transaction

    \\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransaction.mdx#params\",\"isPage\":false,\"text\":\"\\nUseSendTransactionArgs\\n\\n\\nparameters for sending a transaction\\n\",\"title\":\"params\",\"titles\":[\"useSendTransaction\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransaction#returns\",\"html\":\"\\n

    UseSendTransactionResult\\nfunctions and state for sending txs

    \\n
  • \\n
\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransaction.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseSendTransactionResult\\nfunctions and state for sending txs\\n\\n\",\"title\":\"Returns\",\"titles\":[\"useSendTransaction\"]}]}],[\"index.73c50e65b4f18490eac1d6e6b8d68ed2d820b05e4c9ff0f27b685d29e91689d8\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useSendTransactions\\ndescription: Overview of the useSendTransactions method\\n---\\n\\n# useSendTransactions\\n\\nAllows you to send a batch of transactions as a single user operation and await\\nthe transaction to be mined.\\n\\n## Import\\n\\n```ts\\nimport { useSendTransactions } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx twoslash\\nimport { useSendTransactions, useSmartAccountClient } from \\\"@account-kit/react\\\";\\nimport { toHex } from \\\"viem\\\";\\n\\nfunction ComponentWithSendTransactions() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n\\n const { sendTransactions, isSendingTransactions } = useSendTransactions({\\n client,\\n onSuccess: (hash) => {\\n // [optional] Do something with the hash\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendTransactions({\\n requests: [\\n {\\n from: \\\"0xACCOUNT_ADDRESS\\\",\\n to: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: toHex(0n),\\n },\\n ],\\n // ... other parameters (account, context, overrides)\\n })\\n }\\n disabled={isSendingTransactions}\\n >\\n {isSendingTransactions ? \\\"Sending...\\\" : \\\"Send Txns\\\"}\\n \\n
\\n );\\n}\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`UseSendTransactionsArgs`\\nparameters for sending transactions\\n\\n## Returns\\n\\n`UseSendTransactionsResult`\\na collection of functions and state for sending transactions\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useSendTransactions#usesendtransactions\",\"html\":\"\\n

Allows you to send a batch of transactions as a single user operation and await\\nthe transaction to be mined.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransactions.mdx#usesendtransactions\",\"isPage\":true,\"text\":\"\\nAllows you to send a batch of transactions as a single user operation and await\\nthe transaction to be mined.\\n\",\"title\":\"useSendTransactions\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransactions#import\",\"html\":\"\\n
import { useSendTransactions } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransactions.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useSendTransactions } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useSendTransactions\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransactions#usage\",\"html\":\"\\n
import { useSendTransactions, useSmartAccountClient } from "@account-kit/react";\\nimport { toHex } from "viem";\\n \\nfunction ComponentWithSendTransactions() {\\n  const { client } = useSmartAccountClient({\\n    type: "MultiOwnerModularAccount",\\n  });\\n \\n  const { sendTransactions, isSendingTransactions } = useSendTransactions({\\n    client,\\n    onSuccess: (hash) => {\\n      // [optional] Do something with the hash\\n    },\\n    onError: (error) => {\\n      // [optional] Do something with the error\\n    },\\n    // [optional] ...additional mutationArgs\\n  });\\n \\n  return (\\n    <div>\\n      <button\\n        onClick={() =>\\n          sendTransactions({\\n            requests: [\\n              {\\n                from: "0xACCOUNT_ADDRESS",\\n                to: "0xTARGET_ADDRESS",\\n                data: "0x",\\n                value: toHex(0n),\\n              },\\n            ],\\n            // ... other parameters (account, context, overrides)\\n          })\\n        }\\n        disabled={isSendingTransactions}\\n      >\\n        {isSendingTransactions ? "Sending..." : "Send Txns"}\\n      </button>\\n    </div>\\n  );\\n}
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransactions.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useSendTransactions, useSmartAccountClient } from "@account-kit/react";\\nimport { toHex } from "viem";\\n \\nfunction ComponentWithSendTransactions() {\\n const { client } = useSmartAccountClient({\\n type: "MultiOwnerModularAccount",\\n });\\n \\n const { sendTransactions, isSendingTransactions } = useSendTransactions({\\n client,\\n onSuccess: (hash) => {\\n // [optional] Do something with the hash\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n \\n return (\\n <div>\\n <button\\n onClick={() =>\\n sendTransactions({\\n requests: [\\n {\\n from: "0xACCOUNT_ADDRESS",\\n to: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: toHex(0n),\\n },\\n ],\\n // ... other parameters (account, context, overrides)\\n })\\n }\\n disabled={isSendingTransactions}\\n >\\n {isSendingTransactions ? "Sending..." : "Send Txns"}\\n </button>\\n </div>\\n );\\n}\\n\",\"title\":\"Usage\",\"titles\":[\"useSendTransactions\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransactions#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransactions.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useSendTransactions\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransactions#params\",\"html\":\"\\n

UseSendTransactionsArgs<TAccount>\\nparameters for sending transactions

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransactions.mdx#params\",\"isPage\":false,\"text\":\"\\nUseSendTransactionsArgs<TAccount>\\nparameters for sending transactions\\n\",\"title\":\"params\",\"titles\":[\"useSendTransactions\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendTransactions#returns\",\"html\":\"\\n

UseSendTransactionsResult<TAccount, TContext, TEntryPointVersion>\\na collection of functions and state for sending transactions

\",\"id\":\"pages/reference/account-kit/react/hooks/useSendTransactions.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseSendTransactionsResult<TAccount, TContext, TEntryPointVersion>\\na collection of functions and state for sending transactions\",\"title\":\"Returns\",\"titles\":[\"useSendTransactions\"]}]}],[\"index.e27b8c99f390eab0b3e72ec1abf0ff91e856c7df49bd6b7af115e0cc80dfb785\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useSendUserOperation\\ndescription: Overview of the useSendUserOperation method\\n---\\n\\n# useSendUserOperation\\n\\nA hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\\n\\n## Import\\n\\n```ts\\nimport { useSendUserOperation } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`UseSendUserOperationArgs`\\nthe parameters for the hook including the client, a flag to wait for tx mining, and mutation args\\n\\n## Returns\\n\\n`UseSendUserOperationResult`\\nfunctions and state for sending UOs\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useSendUserOperation#usesenduseroperation\",\"html\":\"\\n

A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendUserOperation.mdx#usesenduseroperation\",\"isPage\":true,\"text\":\"\\nA hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\\n\",\"title\":\"useSendUserOperation\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useSendUserOperation#import\",\"html\":\"\\n
import { useSendUserOperation } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendUserOperation.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useSendUserOperation } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useSendUserOperation\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendUserOperation#usage\",\"html\":\"\\n
import {\\n  useSendUserOperation,\\n  useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nfunction ComponentWithSendUserOperation() {\\n  const { client } = useSmartAccountClient({\\n    type: "MultiOwnerModularAccount",\\n  });\\n  const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n    client,\\n    onSuccess: ({ hash, request }) => {\\n      // [optional] Do something with the hash and request\\n    },\\n    onError: (error) => {\\n      // [optional] Do something with the error\\n    },\\n    // [optional] ...additional mutationArgs\\n  });\\n \\n  return (\\n    <div>\\n      <button\\n        onClick={() =>\\n          sendUserOperation({\\n            uo: {\\n              target: "0xTARGET_ADDRESS",\\n              data: "0x",\\n              value: 0n,\\n            },\\n          })\\n        }\\n        disabled={isSendingUserOperation}\\n      >\\n        {isSendingUserOperation ? "Sending..." : "Send UO"}\\n      </button>\\n    </div>\\n  );\\n}
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendUserOperation.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: "MultiOwnerModularAccount",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n \\n return (\\n <div>\\n <button\\n onClick={() =>\\n sendUserOperation({\\n uo: {\\n target: "0xTARGET_ADDRESS",\\n data: "0x",\\n value: 0n,\\n },\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? "Sending..." : "Send UO"}\\n </button>\\n </div>\\n );\\n}\\n\",\"title\":\"Usage\",\"titles\":[\"useSendUserOperation\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendUserOperation#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendUserOperation.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useSendUserOperation\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendUserOperation#params\",\"html\":\"\\n

UseSendUserOperationArgs<TEntryPointVersion, TAccount>\\nthe parameters for the hook including the client, a flag to wait for tx mining, and mutation args

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSendUserOperation.mdx#params\",\"isPage\":false,\"text\":\"\\nUseSendUserOperationArgs<TEntryPointVersion, TAccount>\\nthe parameters for the hook including the client, a flag to wait for tx mining, and mutation args\\n\",\"title\":\"params\",\"titles\":[\"useSendUserOperation\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useSendUserOperation#returns\",\"html\":\"\\n

UseSendUserOperationResult<TEntryPointVersion, TAccount>\\nfunctions and state for sending UOs

\",\"id\":\"pages/reference/account-kit/react/hooks/useSendUserOperation.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseSendUserOperationResult<TEntryPointVersion, TAccount>\\nfunctions and state for sending UOs\",\"title\":\"Returns\",\"titles\":[\"useSendUserOperation\"]}]}],[\"index.2395415984378aadb90ed9403efad73a75fe558f42bf58abfd6edabc588f0fc6\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useSignMessage\\ndescription: Overview of the useSignMessage method\\n---\\n\\n# useSignMessage\\n\\nCustom hook to sign a message using the provided client.\\n\\n## Import\\n\\n```ts\\nimport { useSignMessage } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useSignMessage, useSmartAccountClient } from \\\"@account-kit/react\\\";\\n\\nconst { client } = useSmartAccountClient({ type: \\\"LightAccount\\\" });\\nconst {\\n signMessage,\\n signMessageAsync,\\n signedMessage,\\n isSigningMessage,\\n error,\\n} = useSignMessage({\\n client,\\n // these are optional\\n onSuccess: (result) => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`UseSignMessageArgs`\\nThe configuration arguments for the hook, including the client and additional mutation arguments\\n\\n## Returns\\n\\n`UseSignMessageResult`\\nAn object containing methods and state for signing messages\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useSignMessage#usesignmessage\",\"html\":\"\\n

Custom hook to sign a message using the provided client.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignMessage.mdx#usesignmessage\",\"isPage\":true,\"text\":\"\\nCustom hook to sign a message using the provided client.\\n\",\"title\":\"useSignMessage\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useSignMessage#import\",\"html\":\"\\n
import { useSignMessage } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignMessage.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useSignMessage } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useSignMessage\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignMessage#usage\",\"html\":\"\\n
import { useSignMessage, useSmartAccountClient } from "@account-kit/react";\\n \\nconst { client } = useSmartAccountClient({ type: "LightAccount" });\\nconst {\\n  signMessage,\\n  signMessageAsync,\\n  signedMessage,\\n  isSigningMessage,\\n  error,\\n} = useSignMessage({\\n  client,\\n  // these are optional\\n  onSuccess: (result) => {\\n    // do something on success\\n  },\\n  onError: (error) => console.error(error),\\n});
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignMessage.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useSignMessage, useSmartAccountClient } from "@account-kit/react";\\n \\nconst { client } = useSmartAccountClient({ type: "LightAccount" });\\nconst {\\n signMessage,\\n signMessageAsync,\\n signedMessage,\\n isSigningMessage,\\n error,\\n} = useSignMessage({\\n client,\\n // these are optional\\n onSuccess: (result) => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"useSignMessage\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignMessage#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignMessage.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useSignMessage\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignMessage#config\",\"html\":\"\\n

UseSignMessageArgs\\nThe configuration arguments for the hook, including the client and additional mutation arguments

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignMessage.mdx#config\",\"isPage\":false,\"text\":\"\\nUseSignMessageArgs\\nThe configuration arguments for the hook, including the client and additional mutation arguments\\n\",\"title\":\"config\",\"titles\":[\"useSignMessage\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignMessage#returns\",\"html\":\"\\n

UseSignMessageResult\\nAn object containing methods and state for signing messages

\",\"id\":\"pages/reference/account-kit/react/hooks/useSignMessage.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseSignMessageResult\\nAn object containing methods and state for signing messages\",\"title\":\"Returns\",\"titles\":[\"useSignMessage\"]}]}],[\"index.6a0a2209c4bfb70f5f812dfeb3348e26171d430dbc7d3146ec23a4f637481a9b\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: useSignerStatus\\ndescription: Overview of the useSignerStatus method\\n---\\n\\n# useSignerStatus\\n\\nHook to get the signer status, optionally using an override configuration.\\n\\n## Import\\n\\n```ts\\nimport { useSignerStatus } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useSignerStatus } from \\\"@account-kit/react\\\";\\n\\nconst signerStatus = useSignerStatus();\\n```\\n\\n## Parameters\\n\\n### override\\n\\n`AlchemyAccountContextProps`\\noptional configuration to override the default context\\n\\n## Returns\\n\\n`UseSignerStatusResult`\\nthe current state of the signer\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useSignerStatus#usesignerstatus\",\"html\":\"\\n

Hook to get the signer status, optionally using an override configuration.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignerStatus.mdx#usesignerstatus\",\"isPage\":true,\"text\":\"\\nHook to get the signer status, optionally using an override configuration.\\n\",\"title\":\"useSignerStatus\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useSignerStatus#import\",\"html\":\"\\n
import { useSignerStatus } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignerStatus.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useSignerStatus } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useSignerStatus\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignerStatus#usage\",\"html\":\"\\n
import { useSignerStatus } from "@account-kit/react";\\n \\nconst signerStatus = useSignerStatus();
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignerStatus.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useSignerStatus } from "@account-kit/react";\\n \\nconst signerStatus = useSignerStatus();\\n\",\"title\":\"Usage\",\"titles\":[\"useSignerStatus\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignerStatus#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignerStatus.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useSignerStatus\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignerStatus#override\",\"html\":\"\\n

AlchemyAccountContextProps\\noptional configuration to override the default context

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignerStatus.mdx#override\",\"isPage\":false,\"text\":\"\\nAlchemyAccountContextProps\\noptional configuration to override the default context\\n\",\"title\":\"override\",\"titles\":[\"useSignerStatus\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignerStatus#returns\",\"html\":\"\\n

UseSignerStatusResult\\nthe current state of the signer

\",\"id\":\"pages/reference/account-kit/react/hooks/useSignerStatus.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseSignerStatusResult\\nthe current state of the signer\",\"title\":\"Returns\",\"titles\":[\"useSignerStatus\"]}]}],[\"index.1e99420bafd89ce675b5e942de720133d42cda1b32e4986a409fe2f7fd69f651\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useSignTypedData\\ndescription: Overview of the useSignTypedData method\\n---\\n\\n# useSignTypedData\\n\\nHook for signing typed data, supporting both connected accounts and clients.\\n\\n## Import\\n\\n```ts\\nimport { useSignTypedData } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useSignTypedData, useSmartAccountClient } from \\\"@account-kit/react\\\";\\n\\nconst { client } = useSmartAccountClient({ type: \\\"LightAccount\\\" });\\nconst {\\n signTypedData,\\n signTypedDataAsync,\\n signedTypedData,\\n isSigningTypedData,\\n error,\\n} = useSignTypedData({\\n client,\\n // these are optional\\n onSuccess: (result) => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\\n\\n## Parameters\\n\\n### args\\n\\n`UseSignTypedDataArgs`\\nThe arguments for the hook, including client and mutation-related arguments\\n\\n## Returns\\n\\n`UseSignTypedDataResult`\\nAn object containing methods and state related to the sign typed data mutation process\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useSignTypedData#usesigntypeddata\",\"html\":\"\\n

Hook for signing typed data, supporting both connected accounts and clients.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignTypedData.mdx#usesigntypeddata\",\"isPage\":true,\"text\":\"\\nHook for signing typed data, supporting both connected accounts and clients.\\n\",\"title\":\"useSignTypedData\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useSignTypedData#import\",\"html\":\"\\n
import { useSignTypedData } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignTypedData.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useSignTypedData } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useSignTypedData\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignTypedData#usage\",\"html\":\"\\n
import { useSignTypedData, useSmartAccountClient } from "@account-kit/react";\\n \\nconst { client } = useSmartAccountClient({ type: "LightAccount" });\\nconst {\\n  signTypedData,\\n  signTypedDataAsync,\\n  signedTypedData,\\n  isSigningTypedData,\\n  error,\\n} = useSignTypedData({\\n  client,\\n  // these are optional\\n  onSuccess: (result) => {\\n    // do something on success\\n  },\\n  onError: (error) => console.error(error),\\n});
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignTypedData.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useSignTypedData, useSmartAccountClient } from "@account-kit/react";\\n \\nconst { client } = useSmartAccountClient({ type: "LightAccount" });\\nconst {\\n signTypedData,\\n signTypedDataAsync,\\n signedTypedData,\\n isSigningTypedData,\\n error,\\n} = useSignTypedData({\\n client,\\n // these are optional\\n onSuccess: (result) => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"useSignTypedData\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignTypedData#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignTypedData.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useSignTypedData\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignTypedData#args\",\"html\":\"\\n

UseSignTypedDataArgs\\nThe arguments for the hook, including client and mutation-related arguments

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSignTypedData.mdx#args\",\"isPage\":false,\"text\":\"\\nUseSignTypedDataArgs\\nThe arguments for the hook, including client and mutation-related arguments\\n\",\"title\":\"args\",\"titles\":[\"useSignTypedData\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useSignTypedData#returns\",\"html\":\"\\n

UseSignTypedDataResult\\nAn object containing methods and state related to the sign typed data mutation process

\",\"id\":\"pages/reference/account-kit/react/hooks/useSignTypedData.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseSignTypedDataResult\\nAn object containing methods and state related to the sign typed data mutation process\",\"title\":\"Returns\",\"titles\":[\"useSignTypedData\"]}]}],[\"index.0fad423fbc5cc600d4deaf46e25122792938991092b7c16272cab45049ee3d14\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: useSigner\\ndescription: Overview of the useSigner method\\n---\\n\\n# useSigner\\n\\nHook for accessing the current Alchemy signer within a React component. It uses a synchronous external store for updates.\\n\\n## Import\\n\\n```ts\\nimport { useSigner } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useSigner } from \\\"@account-kit/react\\\";\\n\\nconst signer = useSigner();\\n```\\n\\n## Returns\\n\\n`AlchemyWebSigner | null`\\nThe current Alchemy signer or null if none is available\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useSigner#usesigner\",\"html\":\"\\n

Hook for accessing the current Alchemy signer within a React component. It uses a synchronous external store for updates.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSigner.mdx#usesigner\",\"isPage\":true,\"text\":\"\\nHook for accessing the current Alchemy signer within a React component. It uses a synchronous external store for updates.\\n\",\"title\":\"useSigner\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useSigner#import\",\"html\":\"\\n
import { useSigner } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useSigner } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useSigner\"]},{\"href\":\"/reference/account-kit/react/hooks/useSigner#usage\",\"html\":\"\\n
import { useSigner } from "@account-kit/react";\\n \\nconst signer = useSigner();
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSigner.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useSigner } from "@account-kit/react";\\n \\nconst signer = useSigner();\\n\",\"title\":\"Usage\",\"titles\":[\"useSigner\"]},{\"href\":\"/reference/account-kit/react/hooks/useSigner#returns\",\"html\":\"\\n

AlchemyWebSigner | null\\nThe current Alchemy signer or null if none is available

\",\"id\":\"pages/reference/account-kit/react/hooks/useSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\nAlchemyWebSigner | null\\nThe current Alchemy signer or null if none is available\",\"title\":\"Returns\",\"titles\":[\"useSigner\"]}]}],[\"index.53b39be3a337ce5a5c3254e07400b63bf8261fb64b424aa3a669fa3868e02f47\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useSmartAccountClient\\ndescription: Overview of the useSmartAccountClient method\\n---\\n\\n# useSmartAccountClient\\n\\nUses the provided smart account client parameters to create or retrieve an existing smart account client, handling different types of accounts including LightAccount, MultiOwnerLightAccount, and MultiOwnerModularAccount.\\n\\n## Import\\n\\n```ts\\nimport { useSmartAccountClient } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useSmartAccountClient } from \\\"@account-kit/react\\\";\\n\\nconst { client, address, isLoadingClient } = useSmartAccountClient({\\ntype: \\\"LightAccount\\\",\\naccountParams: {...}, // optional params to further configure the account\\n});\\n```\\n\\n## Parameters\\n\\n### props\\n\\n`UseSmartAccountClientProps`\\nThe properties required to use the smart account client, including account parameters, type, and additional client parameters.\\n\\n## Returns\\n\\n`UseSmartAccountClientResult`\\nAn object containing the smart account client, the address, and a loading state.\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useSmartAccountClient#usesmartaccountclient\",\"html\":\"\\n

Uses the provided smart account client parameters to create or retrieve an existing smart account client, handling different types of accounts including LightAccount, MultiOwnerLightAccount, and MultiOwnerModularAccount.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSmartAccountClient.mdx#usesmartaccountclient\",\"isPage\":true,\"text\":\"\\nUses the provided smart account client parameters to create or retrieve an existing smart account client, handling different types of accounts including LightAccount, MultiOwnerLightAccount, and MultiOwnerModularAccount.\\n\",\"title\":\"useSmartAccountClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useSmartAccountClient#import\",\"html\":\"\\n
import { useSmartAccountClient } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSmartAccountClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useSmartAccountClient } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useSmartAccountClient\"]},{\"href\":\"/reference/account-kit/react/hooks/useSmartAccountClient#usage\",\"html\":\"\\n
import { useSmartAccountClient } from "@account-kit/react";\\n \\nconst { client, address, isLoadingClient } = useSmartAccountClient({\\ntype: "LightAccount",\\naccountParams: {...}, // optional params to further configure the account\\n});
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSmartAccountClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useSmartAccountClient } from "@account-kit/react";\\n \\nconst { client, address, isLoadingClient } = useSmartAccountClient({\\ntype: "LightAccount",\\naccountParams: {...}, // optional params to further configure the account\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"useSmartAccountClient\"]},{\"href\":\"/reference/account-kit/react/hooks/useSmartAccountClient#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSmartAccountClient.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useSmartAccountClient\"]},{\"href\":\"/reference/account-kit/react/hooks/useSmartAccountClient#props\",\"html\":\"\\n

UseSmartAccountClientProps\\nThe properties required to use the smart account client, including account parameters, type, and additional client parameters.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useSmartAccountClient.mdx#props\",\"isPage\":false,\"text\":\"\\nUseSmartAccountClientProps\\nThe properties required to use the smart account client, including account parameters, type, and additional client parameters.\\n\",\"title\":\"props\",\"titles\":[\"useSmartAccountClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useSmartAccountClient#returns\",\"html\":\"\\n

UseSmartAccountClientResult\\nAn object containing the smart account client, the address, and a loading state.

\",\"id\":\"pages/reference/account-kit/react/hooks/useSmartAccountClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseSmartAccountClientResult\\nAn object containing the smart account client, the address, and a loading state.\",\"title\":\"Returns\",\"titles\":[\"useSmartAccountClient\"]}]}],[\"index.f8b76c89903d66582e742ffd40059462c28f2dbe71e68dc3a4c6e99eb41f153e\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: connectToAccount\\ndescription: Overview of the connectToAccount method\\n---\\n\\n# connectToAccount\\n\\nConnects the Provider to an Account and returns a Signer\\n\\n## Import\\n\\n```ts\\nimport { EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Parameters\\n\\n### account\\n\\n`SmartContractAccount`\\n\\n- the account to connect to\\n\\n## Returns\\n\\n`AccountSigner`\\nan AccountSigner that can be used to sign and send user operations\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount#connecttoaccount\",\"html\":\"\\n

Connects the Provider to an Account and returns a Signer

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount.mdx#connecttoaccount\",\"isPage\":true,\"text\":\"\\nConnects the Provider to an Account and returns a Signer\\n\",\"title\":\"connectToAccount\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount#import\",\"html\":\"\\n
import { EthersProviderAdapter } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { EthersProviderAdapter } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"connectToAccount\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"connectToAccount\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount#account\",\"html\":\"\\n

SmartContractAccount

\\n
    \\n
  • the account to connect to
  • \\n
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount.mdx#account\",\"isPage\":false,\"text\":\"\\nSmartContractAccount\\n\\nthe account to connect to\\n\\n\",\"title\":\"account\",\"titles\":[\"connectToAccount\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount#returns\",\"html\":\"\\n

AccountSigner\\nan AccountSigner that can be used to sign and send user operations

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/connectToAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nAccountSigner\\nan AccountSigner that can be used to sign and send user operations\",\"title\":\"Returns\",\"titles\":[\"connectToAccount\"]}]}],[\"index.77ae364999c39ea2bff7c261d6c6350140780f59f48aa12205d5a4fd462ecb2c\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: useUser\\ndescription: Overview of the useUser method\\n---\\n\\n# useUser\\n\\nA React hook that returns the current user information, either from an External Owned Account (EOA) or from the client store. It uses the Alchemy account context and synchronizes with external store updates.\\n\\n## Import\\n\\n```ts\\nimport { useUser } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { useUser } from \\\"@account-kit/react\\\";\\n\\nconst user = useUser();\\n```\\n\\n## Returns\\n\\n`UseUserResult`\\nThe user information, including address, orgId, userId, and type. If the user is not connected, it returns null.\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useUser#useuser\",\"html\":\"\\n

A React hook that returns the current user information, either from an External Owned Account (EOA) or from the client store. It uses the Alchemy account context and synchronizes with external store updates.

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useUser.mdx#useuser\",\"isPage\":true,\"text\":\"\\nA React hook that returns the current user information, either from an External Owned Account (EOA) or from the client store. It uses the Alchemy account context and synchronizes with external store updates.\\n\",\"title\":\"useUser\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useUser#import\",\"html\":\"\\n
import { useUser } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useUser.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useUser } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useUser\"]},{\"href\":\"/reference/account-kit/react/hooks/useUser#usage\",\"html\":\"\\n
import { useUser } from "@account-kit/react";\\n \\nconst user = useUser();
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useUser.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { useUser } from "@account-kit/react";\\n \\nconst user = useUser();\\n\",\"title\":\"Usage\",\"titles\":[\"useUser\"]},{\"href\":\"/reference/account-kit/react/hooks/useUser#returns\",\"html\":\"\\n

UseUserResult\\nThe user information, including address, orgId, userId, and type. If the user is not connected, it returns null.

\",\"id\":\"pages/reference/account-kit/react/hooks/useUser.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseUserResult\\nThe user information, including address, orgId, userId, and type. If the user is not connected, it returns null.\",\"title\":\"Returns\",\"titles\":[\"useUser\"]}]}],[\"index.f9a40f87bb839076b3a93f61f959ec6c9a6a9a4baf7ff79c48af3ee0d17425a6\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: fromEthersProvider\\ndescription: Overview of the fromEthersProvider method\\n---\\n\\n# fromEthersProvider\\n\\nCreates an instance of EthersProviderAdapter from an ethers.js JsonRpcProvider.\\n\\n## Import\\n\\n```ts\\nimport { EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Parameters\\n\\n### provider\\n\\n`JsonRpcProvider`\\nthe ethers JSON RPC provider to convert\\n\\n### chain\\n\\n`Chain`\\nthe chain to connect to\\n\\n## Returns\\n\\n`EthersProviderAdapter`\\nan instance of EthersProviderAdapter\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider#fromethersprovider\",\"html\":\"\\n

Creates an instance of EthersProviderAdapter from an ethers.js JsonRpcProvider.

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider.mdx#fromethersprovider\",\"isPage\":true,\"text\":\"\\nCreates an instance of EthersProviderAdapter from an ethers.js JsonRpcProvider.\\n\",\"title\":\"fromEthersProvider\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider#import\",\"html\":\"\\n
import { EthersProviderAdapter } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { EthersProviderAdapter } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"fromEthersProvider\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"fromEthersProvider\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider#provider\",\"html\":\"\\n

JsonRpcProvider\\nthe ethers JSON RPC provider to convert

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider.mdx#provider\",\"isPage\":false,\"text\":\"\\nJsonRpcProvider\\nthe ethers JSON RPC provider to convert\\n\",\"title\":\"provider\",\"titles\":[\"fromEthersProvider\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider#chain\",\"html\":\"\\n

Chain\\nthe chain to connect to

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nthe chain to connect to\\n\",\"title\":\"chain\",\"titles\":[\"fromEthersProvider\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider#returns\",\"html\":\"\\n

EthersProviderAdapter\\nan instance of EthersProviderAdapter

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/fromEthersProvider.mdx#returns\",\"isPage\":false,\"text\":\"\\nEthersProviderAdapter\\nan instance of EthersProviderAdapter\",\"title\":\"Returns\",\"titles\":[\"fromEthersProvider\"]}]}],[\"index.da220fd5b8e3947da8a0f420d07c417a263597feda57788e1bd6e39e80c25cd9\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useWaitForUserOperationTransaction\\ndescription: Overview of the useWaitForUserOperationTransaction method\\n---\\n\\n# useWaitForUserOperationTransaction\\n\\nCustom hook to wait for a user operation transaction and manage its state (pending, error, result).\\n\\n## Import\\n\\n```ts\\nimport { useWaitForUserOperationTransaction } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport {\\n useWaitForUserOperationTransaction,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nconst { client } = useSmartAccountClient({ type: \\\"LightAccount\\\" });\\nconst {\\n waitForUserOperationTransaction,\\n waitForUserOperationTransactionResult,\\n isWaitingForUserOperationTransaction,\\n error,\\n} = useWaitForUserOperationTransaction({\\n client,\\n // these are optional\\n onSuccess: (result) => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`UseWaitForUserOperationTransactionArgs`\\nConfiguration object containing the client\\n\\n## Returns\\n\\n`UseWaitForUserOperationTransactionResult`\\nAn object containing methods and state related to waiting for a user operation transaction\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useWaitForUserOperationTransaction#usewaitforuseroperationtransaction\",\"html\":\"\\n

Custom hook to wait for a user operation transaction and manage its state (pending, error, result).

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useWaitForUserOperationTransaction.mdx#usewaitforuseroperationtransaction\",\"isPage\":true,\"text\":\"\\nCustom hook to wait for a user operation transaction and manage its state (pending, error, result).\\n\",\"title\":\"useWaitForUserOperationTransaction\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useWaitForUserOperationTransaction#import\",\"html\":\"\\n
import { useWaitForUserOperationTransaction } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useWaitForUserOperationTransaction.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useWaitForUserOperationTransaction } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useWaitForUserOperationTransaction\"]},{\"href\":\"/reference/account-kit/react/hooks/useWaitForUserOperationTransaction#usage\",\"html\":\"\\n
import {\\n  useWaitForUserOperationTransaction,\\n  useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nconst { client } = useSmartAccountClient({ type: "LightAccount" });\\nconst {\\n  waitForUserOperationTransaction,\\n  waitForUserOperationTransactionResult,\\n  isWaitingForUserOperationTransaction,\\n  error,\\n} = useWaitForUserOperationTransaction({\\n  client,\\n  // these are optional\\n  onSuccess: (result) => {\\n    // do something on success\\n  },\\n  onError: (error) => console.error(error),\\n});
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useWaitForUserOperationTransaction.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport {\\n useWaitForUserOperationTransaction,\\n useSmartAccountClient,\\n} from "@account-kit/react";\\n \\nconst { client } = useSmartAccountClient({ type: "LightAccount" });\\nconst {\\n waitForUserOperationTransaction,\\n waitForUserOperationTransactionResult,\\n isWaitingForUserOperationTransaction,\\n error,\\n} = useWaitForUserOperationTransaction({\\n client,\\n // these are optional\\n onSuccess: (result) => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"useWaitForUserOperationTransaction\"]},{\"href\":\"/reference/account-kit/react/hooks/useWaitForUserOperationTransaction#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useWaitForUserOperationTransaction.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"useWaitForUserOperationTransaction\"]},{\"href\":\"/reference/account-kit/react/hooks/useWaitForUserOperationTransaction#config\",\"html\":\"\\n

UseWaitForUserOperationTransactionArgs\\nConfiguration object containing the client

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useWaitForUserOperationTransaction.mdx#config\",\"isPage\":false,\"text\":\"\\nUseWaitForUserOperationTransactionArgs\\nConfiguration object containing the client\\n\",\"title\":\"config\",\"titles\":[\"useWaitForUserOperationTransaction\",\"Parameters\"]},{\"href\":\"/reference/account-kit/react/hooks/useWaitForUserOperationTransaction#returns\",\"html\":\"\\n

UseWaitForUserOperationTransactionResult\\nAn object containing methods and state related to waiting for a user operation transaction

\",\"id\":\"pages/reference/account-kit/react/hooks/useWaitForUserOperationTransaction.mdx#returns\",\"isPage\":false,\"text\":\"\\nUseWaitForUserOperationTransactionResult\\nAn object containing methods and state related to waiting for a user operation transaction\",\"title\":\"Returns\",\"titles\":[\"useWaitForUserOperationTransaction\"]}]}],[\"index.03268a8a53258eed45da3ac76e3e3bbc242e86e10affdb6a65e552ef6d966d0d\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: ClientOnlyPropertyError\\ndescription: Overview of the ClientOnlyPropertyError method\\n---\\n\\n# ClientOnlyPropertyError\\n\\nCreates a new ClientOnlyPropertyError\\n:::note\\n`ClientOnlyPropertyError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { ClientOnlyPropertyError } from \\\"@account-kit/core\\\";\\n```\\n\\n## Parameters\\n\\n### property\\n\\n`string`\\nthe name of the property that is only available on the client\\n\",\"document\":[{\"href\":\"/reference/account-kit/core/classes/ClientOnlyPropertyError/constructor#clientonlypropertyerror\",\"html\":\"\\n

Creates a new ClientOnlyPropertyError

\\n\\n\",\"id\":\"pages/reference/account-kit/core/classes/ClientOnlyPropertyError/constructor.mdx#clientonlypropertyerror\",\"isPage\":true,\"text\":\"\\nCreates a new ClientOnlyPropertyError\\nClientOnlyPropertyError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"ClientOnlyPropertyError\",\"titles\":[]},{\"href\":\"/reference/account-kit/core/classes/ClientOnlyPropertyError/constructor#import\",\"html\":\"\\n
import { ClientOnlyPropertyError } from "@account-kit/core";
\\n\",\"id\":\"pages/reference/account-kit/core/classes/ClientOnlyPropertyError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { ClientOnlyPropertyError } from "@account-kit/core";\\n\",\"title\":\"Import\",\"titles\":[\"ClientOnlyPropertyError\"]},{\"href\":\"/reference/account-kit/core/classes/ClientOnlyPropertyError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/core/classes/ClientOnlyPropertyError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"ClientOnlyPropertyError\"]},{\"href\":\"/reference/account-kit/core/classes/ClientOnlyPropertyError/constructor#property\",\"html\":\"\\n

string\\nthe name of the property that is only available on the client

\",\"id\":\"pages/reference/account-kit/core/classes/ClientOnlyPropertyError/constructor.mdx#property\",\"isPage\":false,\"text\":\"\\nstring\\nthe name of the property that is only available on the client\",\"title\":\"property\",\"titles\":[\"ClientOnlyPropertyError\",\"Parameters\"]}]}],[\"index.97c21558bdaa6636b14259bd7561c83ce1abdc71d340ca029d12e3645edd6380\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: send\\ndescription: Overview of the send method\\n---\\n\\n# send\\n\\nRewrites the send method to use the account provider's EIP-1193\\ncompliant request method\\n\\n## Import\\n\\n```ts\\nimport { EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Parameters\\n\\n### method\\n\\n`any`\\n\\n- the RPC method to call\\n\\n### params\\n\\n`any[]`\\n\\n- the params required by the RPC method\\n\\n## Returns\\n\\n`Promise`\\nthe result of the RPC call\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send#send\",\"html\":\"\\n

Rewrites the send method to use the account provider's EIP-1193\\ncompliant request method

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send.mdx#send\",\"isPage\":true,\"text\":\"\\nRewrites the send method to use the account provider's EIP-1193\\ncompliant request method\\n\",\"title\":\"send\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send#import\",\"html\":\"\\n
import { EthersProviderAdapter } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { EthersProviderAdapter } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"send\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"send\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send#method\",\"html\":\"\\n

any

\\n
    \\n
  • the RPC method to call
  • \\n
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send.mdx#method\",\"isPage\":false,\"text\":\"\\nany\\n\\nthe RPC method to call\\n\\n\",\"title\":\"method\",\"titles\":[\"send\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send#params\",\"html\":\"\\n

any[]

\\n
    \\n
  • the params required by the RPC method
  • \\n
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send.mdx#params\",\"isPage\":false,\"text\":\"\\nany[]\\n\\nthe params required by the RPC method\\n\\n\",\"title\":\"params\",\"titles\":[\"send\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send#returns\",\"html\":\"\\n

Promise<any>\\nthe result of the RPC call

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/send.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<any>\\nthe result of the RPC call\",\"title\":\"Returns\",\"titles\":[\"send\"]}]}],[\"index.d97f236f37388cb73e9c9c0296be71af2d5ef66a51b2004dc65ff949ff57365f\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: EthersProviderAdapter\\ndescription: Overview of the EthersProviderAdapter method\\n---\\n\\n# EthersProviderAdapter\\n\\nConfigures and initializes the account provider based on the given options.\\n:::note\\n`EthersProviderAdapter` extends `JsonRpcProvider`, see the docs for JsonRpcProvider for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AccountSigner, EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst account = await createLightAccount({\\n transport: http(\\\"https://rpc.testnet.aepps.com\\\"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\\nconst provider = new EthersProviderAdapter({\\n account,\\n chain: sepolia,\\n rpcProvider: \\\"https://eth-sepolia.g.alchemy.com/v2/your-api-key\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### opts\\n\\n`EthersProviderAdapterOpts`\\nThe options for setting up the ethers provider adapter\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor#ethersprovideradapter\",\"html\":\"\\n

Configures and initializes the account provider based on the given options.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor.mdx#ethersprovideradapter\",\"isPage\":true,\"text\":\"\\nConfigures and initializes the account provider based on the given options.\\nEthersProviderAdapter extends JsonRpcProvider, see the docs for JsonRpcProvider for all supported methods.\\n\",\"title\":\"EthersProviderAdapter\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor#import\",\"html\":\"\\n
import { EthersProviderAdapter } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { EthersProviderAdapter } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"EthersProviderAdapter\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor#usage\",\"html\":\"\\n
import { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n \\nconst account = await createLightAccount({\\n  transport: http("https://rpc.testnet.aepps.com"),\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter({\\n  account,\\n  chain: sepolia,\\n  rpcProvider: "https://eth-sepolia.g.alchemy.com/v2/your-api-key",\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n \\nconst account = await createLightAccount({\\n transport: http("https://rpc.testnet.aepps.com"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter({\\n account,\\n chain: sepolia,\\n rpcProvider: "https://eth-sepolia.g.alchemy.com/v2/your-api-key",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"EthersProviderAdapter\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"EthersProviderAdapter\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor#opts\",\"html\":\"\\n

EthersProviderAdapterOpts\\nThe options for setting up the ethers provider adapter

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/constructor.mdx#opts\",\"isPage\":false,\"text\":\"\\nEthersProviderAdapterOpts\\nThe options for setting up the ethers provider adapter\",\"title\":\"opts\",\"titles\":[\"EthersProviderAdapter\",\"Parameters\"]}]}],[\"index.a54a92075ffd674216bb60c486a489e0b24258fdc54adb7e74afcb192654cb5a\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: useUiConfig\\ndescription: Overview of the useUiConfig method\\n---\\n\\n# useUiConfig\\n\\nCustom hook to manage and update the UI configuration. This hook retrieves the UI config from the context, syncs it with the local state, and updates it if necessary.\\nNOTE: this hook is mainly meant to be used internally, but provides utility if you need your UI config to be dynamic\\n\\n## Import\\n\\n```ts\\nimport { useUiConfig } from \\\"@account-kit/react\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport {\\n createConfig,\\n useUiConfig,\\n DEFAULT_UI_CONFIG,\\n} from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst config = createConfig(\\n {\\n apiKey: \\\"you-api-key\\\",\\n chain: sepolia,\\n },\\n DEFAULT_UI_CONFIG\\n);\\n\\n// somewhere in a component...\\n\\nconst { updateConfig, ...uiConfig } = useUiConfig();\\n```\\n\\n## Returns\\n\\n`AlchemyAccountsUIConfigWithDefaults & {updateConfig: (partial: AlchemyAccountsUIConfig) => void}`\\nthe configuration object along with an update function\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/hooks/useUiConfig#useuiconfig\",\"html\":\"\\n

Custom hook to manage and update the UI configuration. This hook retrieves the UI config from the context, syncs it with the local state, and updates it if necessary.\\nNOTE: this hook is mainly meant to be used internally, but provides utility if you need your UI config to be dynamic

\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useUiConfig.mdx#useuiconfig\",\"isPage\":true,\"text\":\"\\nCustom hook to manage and update the UI configuration. This hook retrieves the UI config from the context, syncs it with the local state, and updates it if necessary.\\nNOTE: this hook is mainly meant to be used internally, but provides utility if you need your UI config to be dynamic\\n\",\"title\":\"useUiConfig\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/hooks/useUiConfig#import\",\"html\":\"\\n
import { useUiConfig } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useUiConfig.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { useUiConfig } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"useUiConfig\"]},{\"href\":\"/reference/account-kit/react/hooks/useUiConfig#usage\",\"html\":\"\\n
import {\\n  createConfig,\\n  useUiConfig,\\n  DEFAULT_UI_CONFIG,\\n} from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst config = createConfig(\\n  {\\n    apiKey: "you-api-key",\\n    chain: sepolia,\\n  },\\n  DEFAULT_UI_CONFIG\\n);\\n \\n// somewhere in a component...\\n \\nconst { updateConfig, ...uiConfig } = useUiConfig();
\\n\",\"id\":\"pages/reference/account-kit/react/hooks/useUiConfig.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport {\\n createConfig,\\n useUiConfig,\\n DEFAULT_UI_CONFIG,\\n} from "@account-kit/react";\\nimport { sepolia } from "@account-kit/infra";\\n \\nconst config = createConfig(\\n {\\n apiKey: "you-api-key",\\n chain: sepolia,\\n },\\n DEFAULT_UI_CONFIG\\n);\\n \\n// somewhere in a component...\\n \\nconst { updateConfig, ...uiConfig } = useUiConfig();\\n\",\"title\":\"Usage\",\"titles\":[\"useUiConfig\"]},{\"href\":\"/reference/account-kit/react/hooks/useUiConfig#returns\",\"html\":\"\\n

AlchemyAccountsUIConfigWithDefaults & {updateConfig: (partial: AlchemyAccountsUIConfig) => void}\\nthe configuration object along with an update function

\",\"id\":\"pages/reference/account-kit/react/hooks/useUiConfig.mdx#returns\",\"isPage\":false,\"text\":\"\\nAlchemyAccountsUIConfigWithDefaults & {updateConfig: (partial: AlchemyAccountsUIConfig) => void}\\nthe configuration object along with an update function\",\"title\":\"Returns\",\"titles\":[\"useUiConfig\"]}]}],[\"index.24ce1c5c1d48a2ed46c59d92e1446bc34a1ff7c3db207e9ec83e52bd1472a148\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: getBundlerClient\\ndescription: Overview of the getBundlerClient method\\n---\\n\\n# getBundlerClient\\n\\nCreates and returns a BundlerClient using the existing account provider's transport and chain.\\n\\n## Import\\n\\n```ts\\nimport { EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AccountSigner, EthersProviderAdapter } from \\\"@aa-sdk/ethers\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst account = await createLightAccount({\\n transport: http(\\\"https://rpc.testnet.aepps.com\\\"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n\\nconst provider = new EthersProviderAdapter({\\n account,\\n chain: sepolia,\\n rpcProvider: \\\"https://eth-sepolia.g.alchemy.com/v2/your-api-key\\\",\\n});\\n\\nconst bundlerClient = provider.getBundlerClient();\\n```\\n\\n## Returns\\n\\n`BundlerClient`\\nA bundler client configured with the existing account provider.\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/getBundlerClient#getbundlerclient\",\"html\":\"\\n

Creates and returns a BundlerClient using the existing account provider's transport and chain.

\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/getBundlerClient.mdx#getbundlerclient\",\"isPage\":true,\"text\":\"\\nCreates and returns a BundlerClient using the existing account provider's transport and chain.\\n\",\"title\":\"getBundlerClient\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/getBundlerClient#import\",\"html\":\"\\n
import { EthersProviderAdapter } from "@aa-sdk/ethers";
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/getBundlerClient.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { EthersProviderAdapter } from "@aa-sdk/ethers";\\n\",\"title\":\"Import\",\"titles\":[\"getBundlerClient\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/getBundlerClient#usage\",\"html\":\"\\n
import { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n \\nconst account = await createLightAccount({\\n  transport: http("https://rpc.testnet.aepps.com"),\\n  chain: sepolia,\\n  signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter({\\n  account,\\n  chain: sepolia,\\n  rpcProvider: "https://eth-sepolia.g.alchemy.com/v2/your-api-key",\\n});\\n \\nconst bundlerClient = provider.getBundlerClient();
\\n\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/getBundlerClient.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AccountSigner, EthersProviderAdapter } from "@aa-sdk/ethers";\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { sepolia } from "@account-kit/infra";\\nimport { createLightAccount } from "@account-kit/smart-contracts";\\n \\nconst account = await createLightAccount({\\n transport: http("https://rpc.testnet.aepps.com"),\\n chain: sepolia,\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n});\\n \\nconst provider = new EthersProviderAdapter({\\n account,\\n chain: sepolia,\\n rpcProvider: "https://eth-sepolia.g.alchemy.com/v2/your-api-key",\\n});\\n \\nconst bundlerClient = provider.getBundlerClient();\\n\",\"title\":\"Usage\",\"titles\":[\"getBundlerClient\"]},{\"href\":\"/reference/aa-sdk/ethers/classes/EthersProviderAdapter/getBundlerClient#returns\",\"html\":\"\\n

BundlerClient<Transport>\\nA bundler client configured with the existing account provider.

\",\"id\":\"pages/reference/aa-sdk/ethers/classes/EthersProviderAdapter/getBundlerClient.mdx#returns\",\"isPage\":false,\"text\":\"\\nBundlerClient<Transport>\\nA bundler client configured with the existing account provider.\",\"title\":\"Returns\",\"titles\":[\"getBundlerClient\"]}]}],[\"index.1c5d32f8c5ec93e9d8d069fecc58e24410d207e7d76fc63630969a627a9a577b\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: addContractAddressAccessEntry\\ndescription: Overview of the addContractAddressAccessEntry method\\n---\\n\\n# addContractAddressAccessEntry\\n\\nAdds a contract access entry to the internal list of contract address access entries.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.addContractAddressAccessEntry({\\n contractAddress: \\\"0x1234\\\",\\n isOnList: true,\\n checkSelectors: true,\\n});\\n```\\n\\n## Parameters\\n\\n### entry\\n\\n`ContractAccessEntry`\\nthe contract access entry to be added\\n\\n## Returns\\n\\n`SessionKeyPermissionsBuilder`\\nthe instance of the current class for chaining\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry#addcontractaddressaccessentry\",\"html\":\"\\n

Adds a contract access entry to the internal list of contract address access entries.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry.mdx#addcontractaddressaccessentry\",\"isPage\":true,\"text\":\"\\nAdds a contract access entry to the internal list of contract address access entries.\\n\",\"title\":\"addContractAddressAccessEntry\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry#import\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"addContractAddressAccessEntry\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry#usage\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.addContractAddressAccessEntry({\\n  contractAddress: "0x1234",\\n  isOnList: true,\\n  checkSelectors: true,\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.addContractAddressAccessEntry({\\n contractAddress: "0x1234",\\n isOnList: true,\\n checkSelectors: true,\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"addContractAddressAccessEntry\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"addContractAddressAccessEntry\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry#entry\",\"html\":\"\\n

ContractAccessEntry\\nthe contract access entry to be added

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry.mdx#entry\",\"isPage\":false,\"text\":\"\\nContractAccessEntry\\nthe contract access entry to be added\\n\",\"title\":\"entry\",\"titles\":[\"addContractAddressAccessEntry\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry#returns\",\"html\":\"\\n

SessionKeyPermissionsBuilder\\nthe instance of the current class for chaining

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractAddressAccessEntry.mdx#returns\",\"isPage\":false,\"text\":\"\\nSessionKeyPermissionsBuilder\\nthe instance of the current class for chaining\",\"title\":\"Returns\",\"titles\":[\"addContractAddressAccessEntry\"]}]}],[\"index.059a048dde021ad90d8641f5a15c1afaa40dadb7eb5d6d9b3e9eaa9d36204981\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: addErc20TokenSpendLimit\\ndescription: Overview of the addErc20TokenSpendLimit method\\n---\\n\\n# addErc20TokenSpendLimit\\n\\nAdds an ERC20 token spend limit to the list of limits and returns the updated object.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.addErc20TokenSpendLimit({\\n tokenAddress: \\\"0x1234\\\",\\n spendLimit: 1000000000000000000n,\\n refreshInterval: 3600,\\n});\\n```\\n\\n## Parameters\\n\\n### limit\\n\\n`Erc20TokenLimit`\\nThe ERC20 token spend limit to be added\\n\\n## Returns\\n\\n`object`\\nThe updated object with the new ERC20 token spend limit\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit#adderc20tokenspendlimit\",\"html\":\"\\n

Adds an ERC20 token spend limit to the list of limits and returns the updated object.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit.mdx#adderc20tokenspendlimit\",\"isPage\":true,\"text\":\"\\nAdds an ERC20 token spend limit to the list of limits and returns the updated object.\\n\",\"title\":\"addErc20TokenSpendLimit\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit#import\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"addErc20TokenSpendLimit\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit#usage\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.addErc20TokenSpendLimit({\\n  tokenAddress: "0x1234",\\n  spendLimit: 1000000000000000000n,\\n  refreshInterval: 3600,\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.addErc20TokenSpendLimit({\\n tokenAddress: "0x1234",\\n spendLimit: 1000000000000000000n,\\n refreshInterval: 3600,\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"addErc20TokenSpendLimit\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"addErc20TokenSpendLimit\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit#limit\",\"html\":\"\\n

Erc20TokenLimit\\nThe ERC20 token spend limit to be added

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit.mdx#limit\",\"isPage\":false,\"text\":\"\\nErc20TokenLimit\\nThe ERC20 token spend limit to be added\\n\",\"title\":\"limit\",\"titles\":[\"addErc20TokenSpendLimit\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit#returns\",\"html\":\"\\n

object\\nThe updated object with the new ERC20 token spend limit

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addErc20TokenSpendLimit.mdx#returns\",\"isPage\":false,\"text\":\"\\nobject\\nThe updated object with the new ERC20 token spend limit\",\"title\":\"Returns\",\"titles\":[\"addErc20TokenSpendLimit\"]}]}],[\"index.cf1c0b77c1072b162890cbcc39584624598ccb6d696e117b73912442871c619e\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: encode\\ndescription: Overview of the encode method\\n---\\n\\n# encode\\n\\nEncodes various function calls into an array of hexadecimal strings based on the provided permissions and limits.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setRequiredPaymaster(\\\"0x1234\\\");\\nconst encoded = builder.encode();\\n```\\n\\n## Returns\\n\\n`Hex[]`\\nAn array of encoded hexadecimal strings representing the function calls for setting access control, permissions, and limits.\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/encode#encode\",\"html\":\"\\n

Encodes various function calls into an array of hexadecimal strings based on the provided permissions and limits.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/encode.mdx#encode\",\"isPage\":true,\"text\":\"\\nEncodes various function calls into an array of hexadecimal strings based on the provided permissions and limits.\\n\",\"title\":\"encode\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/encode#import\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/encode.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"encode\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/encode#usage\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setRequiredPaymaster("0x1234");\\nconst encoded = builder.encode();
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/encode.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setRequiredPaymaster("0x1234");\\nconst encoded = builder.encode();\\n\",\"title\":\"Usage\",\"titles\":[\"encode\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/encode#returns\",\"html\":\"\\n

Hex[]\\nAn array of encoded hexadecimal strings representing the function calls for setting access control, permissions, and limits.

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/encode.mdx#returns\",\"isPage\":false,\"text\":\"\\nHex[]\\nAn array of encoded hexadecimal strings representing the function calls for setting access control, permissions, and limits.\",\"title\":\"Returns\",\"titles\":[\"encode\"]}]}],[\"index.23bf080f7672379e1244a175cd62fde2e12ba3dca648d63b65ef039e199e08da\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: addContractFunctionAccessEntry\\ndescription: Overview of the addContractFunctionAccessEntry method\\n---\\n\\n# addContractFunctionAccessEntry\\n\\nAdds a contract method entry to the `_contractMethodAccessEntrys` array.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.addContractAddressAccessEntry({\\n contractAddress: \\\"0x1234\\\",\\n methodSelector: \\\"0x45678\\\",\\n isOnList: true,\\n});\\n```\\n\\n## Parameters\\n\\n### entry\\n\\n`ContractMethodEntry`\\nThe contract method entry to be added\\n\\n## Returns\\n\\n`SessionKeyPermissionsBuilder`\\nThe instance of the class for method chaining\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry#addcontractfunctionaccessentry\",\"html\":\"\\n

Adds a contract method entry to the _contractMethodAccessEntrys array.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry.mdx#addcontractfunctionaccessentry\",\"isPage\":true,\"text\":\"\\nAdds a contract method entry to the _contractMethodAccessEntrys array.\\n\",\"title\":\"addContractFunctionAccessEntry\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry#import\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"addContractFunctionAccessEntry\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry#usage\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.addContractAddressAccessEntry({\\n  contractAddress: "0x1234",\\n  methodSelector: "0x45678",\\n  isOnList: true,\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.addContractAddressAccessEntry({\\n contractAddress: "0x1234",\\n methodSelector: "0x45678",\\n isOnList: true,\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"addContractFunctionAccessEntry\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"addContractFunctionAccessEntry\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry#entry\",\"html\":\"\\n

ContractMethodEntry\\nThe contract method entry to be added

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry.mdx#entry\",\"isPage\":false,\"text\":\"\\nContractMethodEntry\\nThe contract method entry to be added\\n\",\"title\":\"entry\",\"titles\":[\"addContractFunctionAccessEntry\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry#returns\",\"html\":\"\\n

SessionKeyPermissionsBuilder\\nThe instance of the class for method chaining

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/addContractFunctionAccessEntry.mdx#returns\",\"isPage\":false,\"text\":\"\\nSessionKeyPermissionsBuilder\\nThe instance of the class for method chaining\",\"title\":\"Returns\",\"titles\":[\"addContractFunctionAccessEntry\"]}]}],[\"index.c9f03fd93589bf9e5b35afbcaf7ea57e45be522c987b5a7acaee38ba87feccd6\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: SessionKeySigner\\ndescription: Overview of the SessionKeySigner method\\n---\\n\\n# SessionKeySigner\\n\\nInitializes a new instance of a session key signer with the provided configuration. This will set the `signerType`, `storageKey`, and `storageType`. It will also manage the session key, either fetching it from storage or generating a new one if it doesn't exist.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst signer = new SessionKeySigner();\\n```\\n\\n## Parameters\\n\\n### config\\\\_\\n\\n`SessionKeySignerConfig`\\nthe configuration for initializing the session key signer\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor#sessionkeysigner\",\"html\":\"\\n

Initializes a new instance of a session key signer with the provided configuration. This will set the signerType, storageKey, and storageType. It will also manage the session key, either fetching it from storage or generating a new one if it doesn't exist.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor.mdx#sessionkeysigner\",\"isPage\":true,\"text\":\"\\nInitializes a new instance of a session key signer with the provided configuration. This will set the signerType, storageKey, and storageType. It will also manage the session key, either fetching it from storage or generating a new one if it doesn't exist.\\n\",\"title\":\"SessionKeySigner\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor#import\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"SessionKeySigner\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor#usage\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();\\n\",\"title\":\"Usage\",\"titles\":[\"SessionKeySigner\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"SessionKeySigner\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor#config_\",\"html\":\"\\n

SessionKeySignerConfig\\nthe configuration for initializing the session key signer

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/constructor.mdx#config_\",\"isPage\":false,\"text\":\"\\nSessionKeySignerConfig\\nthe configuration for initializing the session key signer\",\"title\":\"config_\",\"titles\":[\"SessionKeySigner\",\"Parameters\"]}]}],[\"index.c0cccbbdd18ee253bfdf6908e8999b7146fb832b13ed85e8835e9667d48fe6b7\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: setRequiredPaymaster\\ndescription: Overview of the setRequiredPaymaster method\\n---\\n\\n# setRequiredPaymaster\\n\\nSets the required paymaster address.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setRequiredPaymaster(\\\"0x1234\\\");\\n```\\n\\n## Parameters\\n\\n### paymaster\\n\\n`Address`\\nthe address of the paymaster to be set\\n\\n## Returns\\n\\n`SessionKeyPermissionsBuilder`\\nthe current instance for method chaining\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster#setrequiredpaymaster\",\"html\":\"\\n

Sets the required paymaster address.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster.mdx#setrequiredpaymaster\",\"isPage\":true,\"text\":\"\\nSets the required paymaster address.\\n\",\"title\":\"setRequiredPaymaster\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster#import\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"setRequiredPaymaster\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster#usage\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setRequiredPaymaster("0x1234");
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setRequiredPaymaster("0x1234");\\n\",\"title\":\"Usage\",\"titles\":[\"setRequiredPaymaster\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"setRequiredPaymaster\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster#paymaster\",\"html\":\"\\n

Address\\nthe address of the paymaster to be set

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster.mdx#paymaster\",\"isPage\":false,\"text\":\"\\nAddress\\nthe address of the paymaster to be set\\n\",\"title\":\"paymaster\",\"titles\":[\"setRequiredPaymaster\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster#returns\",\"html\":\"\\n

SessionKeyPermissionsBuilder\\nthe current instance for method chaining

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setRequiredPaymaster.mdx#returns\",\"isPage\":false,\"text\":\"\\nSessionKeyPermissionsBuilder\\nthe current instance for method chaining\",\"title\":\"Returns\",\"titles\":[\"setRequiredPaymaster\"]}]}],[\"index.6aa258a0b6aabe72f6d3fafb24cb001be7f211eb77d0950c05c7b370ddc8e21e\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: setContractAccessControlType\\ndescription: Overview of the setContractAccessControlType method\\n---\\n\\n# setContractAccessControlType\\n\\nSets the access control type for the contract and returns the current instance for method chaining.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setContractAccessControlType(SessionKeyAccessListType.ALLOWLIST);\\n```\\n\\n## Parameters\\n\\n### aclType\\n\\n`SessionKeyAccessListType`\\nThe access control type for the session key\\n\\n## Returns\\n\\n`SessionKeyPermissionsBuilder`\\nThe current instance for method chaining\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType#setcontractaccesscontroltype\",\"html\":\"\\n

Sets the access control type for the contract and returns the current instance for method chaining.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType.mdx#setcontractaccesscontroltype\",\"isPage\":true,\"text\":\"\\nSets the access control type for the contract and returns the current instance for method chaining.\\n\",\"title\":\"setContractAccessControlType\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType#import\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"setContractAccessControlType\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType#usage\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setContractAccessControlType(SessionKeyAccessListType.ALLOWLIST);
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setContractAccessControlType(SessionKeyAccessListType.ALLOWLIST);\\n\",\"title\":\"Usage\",\"titles\":[\"setContractAccessControlType\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"setContractAccessControlType\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType#acltype\",\"html\":\"\\n

SessionKeyAccessListType\\nThe access control type for the session key

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType.mdx#acltype\",\"isPage\":false,\"text\":\"\\nSessionKeyAccessListType\\nThe access control type for the session key\\n\",\"title\":\"aclType\",\"titles\":[\"setContractAccessControlType\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType#returns\",\"html\":\"\\n

SessionKeyPermissionsBuilder\\nThe current instance for method chaining

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setContractAccessControlType.mdx#returns\",\"isPage\":false,\"text\":\"\\nSessionKeyPermissionsBuilder\\nThe current instance for method chaining\",\"title\":\"Returns\",\"titles\":[\"setContractAccessControlType\"]}]}],[\"index.5dde0db2cbacf6ac7699fbed35e1e4b987e5f519e4cc0e4d30bc0e3f9849ca7c\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: setNativeTokenSpendLimit\\ndescription: Overview of the setNativeTokenSpendLimit method\\n---\\n\\n# setNativeTokenSpendLimit\\n\\nSets the native token spend limit and returns the instance for chaining.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setNativeTokenSpendLimit({\\n spendLimit: 1000000000000000000n,\\n refreshInterval: 3600,\\n});\\n```\\n\\n## Parameters\\n\\n### limit\\n\\n`NativeTokenLimit`\\nThe limit to set for native token spending\\n\\n## Returns\\n\\n`SessionKeyPermissionsBuilder`\\nThe instance for chaining\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit#setnativetokenspendlimit\",\"html\":\"\\n

Sets the native token spend limit and returns the instance for chaining.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit.mdx#setnativetokenspendlimit\",\"isPage\":true,\"text\":\"\\nSets the native token spend limit and returns the instance for chaining.\\n\",\"title\":\"setNativeTokenSpendLimit\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit#import\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"setNativeTokenSpendLimit\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit#usage\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setNativeTokenSpendLimit({\\n  spendLimit: 1000000000000000000n,\\n  refreshInterval: 3600,\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setNativeTokenSpendLimit({\\n spendLimit: 1000000000000000000n,\\n refreshInterval: 3600,\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"setNativeTokenSpendLimit\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"setNativeTokenSpendLimit\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit#limit\",\"html\":\"\\n

NativeTokenLimit\\nThe limit to set for native token spending

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit.mdx#limit\",\"isPage\":false,\"text\":\"\\nNativeTokenLimit\\nThe limit to set for native token spending\\n\",\"title\":\"limit\",\"titles\":[\"setNativeTokenSpendLimit\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit#returns\",\"html\":\"\\n

SessionKeyPermissionsBuilder\\nThe instance for chaining

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setNativeTokenSpendLimit.mdx#returns\",\"isPage\":false,\"text\":\"\\nSessionKeyPermissionsBuilder\\nThe instance for chaining\",\"title\":\"Returns\",\"titles\":[\"setNativeTokenSpendLimit\"]}]}],[\"index.19c3a025f907b2cf71e6f1e5a3fa3609ec1251f0b692376e91bcafffa30aa6ef\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: setTimeRange\\ndescription: Overview of the setTimeRange method\\n---\\n\\n# setTimeRange\\n\\nSets the time range for an object and returns the object itself for chaining.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setTimeRange({\\n validFrom: Date.now(),\\n validUntil: Date.now() + 15 * 60 * 1000,\\n});\\n```\\n\\n## Parameters\\n\\n### timeRange\\n\\n`TimeRange`\\nThe time range to be set\\n\\n## Returns\\n\\n`SessionKeyPermissionsBuilder`\\nThe current object for method chaining\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange#settimerange\",\"html\":\"\\n

Sets the time range for an object and returns the object itself for chaining.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange.mdx#settimerange\",\"isPage\":true,\"text\":\"\\nSets the time range for an object and returns the object itself for chaining.\\n\",\"title\":\"setTimeRange\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange#import\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"setTimeRange\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange#usage\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setTimeRange({\\n  validFrom: Date.now(),\\n  validUntil: Date.now() + 15 * 60 * 1000,\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setTimeRange({\\n validFrom: Date.now(),\\n validUntil: Date.now() + 15 * 60 * 1000,\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"setTimeRange\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"setTimeRange\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange#timerange\",\"html\":\"\\n

TimeRange\\nThe time range to be set

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange.mdx#timerange\",\"isPage\":false,\"text\":\"\\nTimeRange\\nThe time range to be set\\n\",\"title\":\"timeRange\",\"titles\":[\"setTimeRange\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange#returns\",\"html\":\"\\n

SessionKeyPermissionsBuilder\\nThe current object for method chaining

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setTimeRange.mdx#returns\",\"isPage\":false,\"text\":\"\\nSessionKeyPermissionsBuilder\\nThe current object for method chaining\",\"title\":\"Returns\",\"titles\":[\"setTimeRange\"]}]}],[\"index.45f714ff85a6a5234338f7313cd029aed42cec9eabc445b7083d26d44f842719\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: setGasSpendLimit\\ndescription: Overview of the setGasSpendLimit method\\n---\\n\\n# setGasSpendLimit\\n\\nSets the gas spend limit and returns the current instance for method chaining.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeyPermissionsBuilder } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setGasSpendLimit({\\n spendLimit: 1000000000000000000n,\\n refreshInterval: 3600,\\n});\\n```\\n\\n## Parameters\\n\\n### limit\\n\\n`GasSpendLimit`\\n\\n- The gas spend limit to be set\\n\\n## Returns\\n\\n`SessionKeyPermissionsBuilder`\\nThe current instance for chaining\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit#setgasspendlimit\",\"html\":\"\\n

Sets the gas spend limit and returns the current instance for method chaining.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit.mdx#setgasspendlimit\",\"isPage\":true,\"text\":\"\\nSets the gas spend limit and returns the current instance for method chaining.\\n\",\"title\":\"setGasSpendLimit\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit#import\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"setGasSpendLimit\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit#usage\",\"html\":\"\\n
import { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setGasSpendLimit({\\n  spendLimit: 1000000000000000000n,\\n  refreshInterval: 3600,\\n});
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeyPermissionsBuilder } from "@account-kit/smart-contracts";\\n \\nconst builder = new SessionKeyPermissionsBuilder();\\nbuilder.setGasSpendLimit({\\n spendLimit: 1000000000000000000n,\\n refreshInterval: 3600,\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"setGasSpendLimit\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"setGasSpendLimit\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit#limit\",\"html\":\"\\n

GasSpendLimit

\\n
    \\n
  • The gas spend limit to be set
  • \\n
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit.mdx#limit\",\"isPage\":false,\"text\":\"\\nGasSpendLimit\\n\\nThe gas spend limit to be set\\n\\n\",\"title\":\"limit\",\"titles\":[\"setGasSpendLimit\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit#returns\",\"html\":\"\\n

SessionKeyPermissionsBuilder\\nThe current instance for chaining

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeyPermissionsBuilder/setGasSpendLimit.mdx#returns\",\"isPage\":false,\"text\":\"\\nSessionKeyPermissionsBuilder\\nThe current instance for chaining\",\"title\":\"Returns\",\"titles\":[\"setGasSpendLimit\"]}]}],[\"index.e354107338205342e5d043fd1f03cf578b518d0a5b23bdee050dae742c54c5be\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: generateNewKey\\ndescription: Overview of the generateNewKey method\\n---\\n\\n# generateNewKey\\n\\nGenerates a new private key and stores it in the storage.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst signer = new SessionKeySigner();\\nconst newSessionKey = signer.generateNewKey();\\n```\\n\\n## Returns\\n\\n`Address`\\nThe public address of the new key.\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/generateNewKey#generatenewkey\",\"html\":\"\\n

Generates a new private key and stores it in the storage.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/generateNewKey.mdx#generatenewkey\",\"isPage\":true,\"text\":\"\\nGenerates a new private key and stores it in the storage.\\n\",\"title\":\"generateNewKey\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/generateNewKey#import\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/generateNewKey.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"generateNewKey\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/generateNewKey#usage\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();\\nconst newSessionKey = signer.generateNewKey();
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/generateNewKey.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();\\nconst newSessionKey = signer.generateNewKey();\\n\",\"title\":\"Usage\",\"titles\":[\"generateNewKey\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/generateNewKey#returns\",\"html\":\"\\n

Address\\nThe public address of the new key.

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/generateNewKey.mdx#returns\",\"isPage\":false,\"text\":\"\\nAddress\\nThe public address of the new key.\",\"title\":\"Returns\",\"titles\":[\"generateNewKey\"]}]}],[\"index.6654ba80807f7bd9422959e53cd8b1cc5ec5bcf4e437b759bb399f63067565bf\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getAddress\\ndescription: Overview of the getAddress method\\n---\\n\\n# getAddress\\n\\nAn async function that retrieves the address using the inner object's `getAddress` method.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst signer = new SessionKeySigner();\\nconst sessionKeyAddress = await signer.getAddress();\\n```\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the address as a string\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/getAddress#getaddress\",\"html\":\"\\n

An async function that retrieves the address using the inner object's getAddress method.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/getAddress.mdx#getaddress\",\"isPage\":true,\"text\":\"\\nAn async function that retrieves the address using the inner object's getAddress method.\\n\",\"title\":\"getAddress\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/getAddress#import\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/getAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"getAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/getAddress#usage\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();\\nconst sessionKeyAddress = await signer.getAddress();
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/getAddress.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();\\nconst sessionKeyAddress = await signer.getAddress();\\n\",\"title\":\"Usage\",\"titles\":[\"getAddress\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/getAddress#returns\",\"html\":\"\\n

Promise<string>\\nA promise that resolves to the address as a string

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/getAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string>\\nA promise that resolves to the address as a string\",\"title\":\"Returns\",\"titles\":[\"getAddress\"]}]}],[\"index.2e68797d7fd14be27580e587d44a015392e331a4c6bce6c72057c3aeded55d88\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: signMessage\\ndescription: Overview of the signMessage method\\n---\\n\\n# signMessage\\n\\nSigns a message using the inner signer.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst signer = new SessionKeySigner();\\nconst sessionKeyAddress = await signer.signMessage(\\\"hello\\\");\\n```\\n\\n## Parameters\\n\\n### msg\\n\\n`SignableMessage`\\nThe message to sign\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the signed message\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage#signmessage\",\"html\":\"\\n

Signs a message using the inner signer.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage.mdx#signmessage\",\"isPage\":true,\"text\":\"\\nSigns a message using the inner signer.\\n\",\"title\":\"signMessage\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage#import\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage#usage\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();\\nconst sessionKeyAddress = await signer.signMessage("hello");
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();\\nconst sessionKeyAddress = await signer.signMessage("hello");\\n\",\"title\":\"Usage\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage#msg\",\"html\":\"\\n

SignableMessage\\nThe message to sign

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage.mdx#msg\",\"isPage\":false,\"text\":\"\\nSignableMessage\\nThe message to sign\\n\",\"title\":\"msg\",\"titles\":[\"signMessage\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage#returns\",\"html\":\"\\n

Promise<Hex>\\nA promise that resolves to the signed message

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signMessage.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Hex>\\nA promise that resolves to the signed message\",\"title\":\"Returns\",\"titles\":[\"signMessage\"]}]}],[\"index.6d6192e66b6a427e211bce24c356a0f5c4a44f422565401f03748a30fd29bc10\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: signTypedData\\ndescription: Overview of the signTypedData method\\n---\\n\\n# signTypedData\\n\\nSigns the provided typed data using the inner signer.\\n\\n## Import\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { SessionKeySigner } from \\\"@account-kit/smart-contracts\\\";\\n\\nconst signer = new SessionKeySigner();\\nconsole.log(\\n await signer.signTypedData({\\n types: {\\n Message: [{ name: \\\"content\\\", type: \\\"string\\\" }],\\n },\\n primaryType: \\\"Message\\\",\\n message: { content: \\\"Hello\\\" },\\n })\\n);\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`TypedDataDefinition`\\nThe parameters containing the typed data definition and primary type.\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the signed typed data as a string.\\n\",\"document\":[{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData#signtypeddata\",\"html\":\"\\n

Signs the provided typed data using the inner signer.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData.mdx#signtypeddata\",\"isPage\":true,\"text\":\"\\nSigns the provided typed data using the inner signer.\\n\",\"title\":\"signTypedData\",\"titles\":[]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData#import\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n\",\"title\":\"Import\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData#usage\",\"html\":\"\\n
import { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();\\nconsole.log(\\n  await signer.signTypedData({\\n    types: {\\n      Message: [{ name: "content", type: "string" }],\\n    },\\n    primaryType: "Message",\\n    message: { content: "Hello" },\\n  })\\n);
\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { SessionKeySigner } from "@account-kit/smart-contracts";\\n \\nconst signer = new SessionKeySigner();\\nconsole.log(\\n await signer.signTypedData({\\n types: {\\n Message: [{ name: "content", type: "string" }],\\n },\\n primaryType: "Message",\\n message: { content: "Hello" },\\n })\\n);\\n\",\"title\":\"Usage\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData#params\",\"html\":\"\\n

TypedDataDefinition<TTypedData, TPrimaryType>\\nThe parameters containing the typed data definition and primary type.

\\n\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData.mdx#params\",\"isPage\":false,\"text\":\"\\nTypedDataDefinition<TTypedData, TPrimaryType>\\nThe parameters containing the typed data definition and primary type.\\n\",\"title\":\"params\",\"titles\":[\"signTypedData\",\"Parameters\"]},{\"href\":\"/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData#returns\",\"html\":\"\\n

Promise<string>\\nA promise that resolves to the signed typed data as a string.

\",\"id\":\"pages/reference/account-kit/smart-contracts/classes/SessionKeySigner/signTypedData.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string>\\nA promise that resolves to the signed typed data as a string.\",\"title\":\"Returns\",\"titles\":[\"signTypedData\"]}]}],[\"index.2383a729c6dec3911acf44af0292dfd46cf97aa167c093e113eff023d619ee7a\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: AccountNotFoundError\\ndescription: Overview of the AccountNotFoundError method\\n---\\n\\n# AccountNotFoundError\\n\\nConstructor for initializing an error message indicating that an account could not be found to execute the specified action.\\n:::note\\n`AccountNotFoundError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { AccountNotFoundError } from \\\"@aa-sdk/core\\\";\\n```\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/AccountNotFoundError/constructor#accountnotfounderror\",\"html\":\"\\n

Constructor for initializing an error message indicating that an account could not be found to execute the specified action.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/AccountNotFoundError/constructor.mdx#accountnotfounderror\",\"isPage\":true,\"text\":\"\\nConstructor for initializing an error message indicating that an account could not be found to execute the specified action.\\nAccountNotFoundError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"AccountNotFoundError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/AccountNotFoundError/constructor#import\",\"html\":\"\\n
import { AccountNotFoundError } from "@aa-sdk/core";
\",\"id\":\"pages/reference/aa-sdk/core/classes/AccountNotFoundError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AccountNotFoundError } from "@aa-sdk/core";\",\"title\":\"Import\",\"titles\":[\"AccountNotFoundError\"]}]}],[\"index.2a57ce322fa212fe4cbcaa885f21ff7ad4084241a02b41ff26853718b46cb512\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: EntryPointNotFoundError\\ndescription: Overview of the EntryPointNotFoundError method\\n---\\n\\n# EntryPointNotFoundError\\n\\nConstructs an error message indicating that no default entry point exists for the given chain and entry point version.\\n:::note\\n`EntryPointNotFoundError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { EntryPointNotFoundError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### chain\\n\\n`Chain`\\nThe blockchain network for which the entry point is being queried\\n\\n### entryPointVersion\\n\\n`any`\\nThe version of the entry point for which no default exists\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor#entrypointnotfounderror\",\"html\":\"\\n

Constructs an error message indicating that no default entry point exists for the given chain and entry point version.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor.mdx#entrypointnotfounderror\",\"isPage\":true,\"text\":\"\\nConstructs an error message indicating that no default entry point exists for the given chain and entry point version.\\nEntryPointNotFoundError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"EntryPointNotFoundError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor#import\",\"html\":\"\\n
import { EntryPointNotFoundError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { EntryPointNotFoundError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"EntryPointNotFoundError\"]},{\"href\":\"/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"EntryPointNotFoundError\"]},{\"href\":\"/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor#chain\",\"html\":\"\\n

Chain\\nThe blockchain network for which the entry point is being queried

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nThe blockchain network for which the entry point is being queried\\n\",\"title\":\"chain\",\"titles\":[\"EntryPointNotFoundError\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor#entrypointversion\",\"html\":\"\\n

any\\nThe version of the entry point for which no default exists

\",\"id\":\"pages/reference/aa-sdk/core/classes/EntryPointNotFoundError/constructor.mdx#entrypointversion\",\"isPage\":false,\"text\":\"\\nany\\nThe version of the entry point for which no default exists\",\"title\":\"entryPointVersion\",\"titles\":[\"EntryPointNotFoundError\",\"Parameters\"]}]}],[\"index.e0b8956ec38fe374ae73eee825107effc43899aea406f0105df4740c715a6ba6\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: FailedToGetStorageSlotError\\ndescription: Overview of the FailedToGetStorageSlotError method\\n---\\n\\n# FailedToGetStorageSlotError\\n\\nCustom error message constructor for failing to get a specific storage slot.\\n:::note\\n`FailedToGetStorageSlotError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { FailedToGetStorageSlotError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### slot\\n\\n`string`\\nThe storage slot that failed to be accessed or retrieved\\n\\n### slotDescriptor\\n\\n`string`\\nA description of the storage slot, for additional context in the error message\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor#failedtogetstoragesloterror\",\"html\":\"\\n

Custom error message constructor for failing to get a specific storage slot.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor.mdx#failedtogetstoragesloterror\",\"isPage\":true,\"text\":\"\\nCustom error message constructor for failing to get a specific storage slot.\\nFailedToGetStorageSlotError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"FailedToGetStorageSlotError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor#import\",\"html\":\"\\n
import { FailedToGetStorageSlotError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { FailedToGetStorageSlotError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"FailedToGetStorageSlotError\"]},{\"href\":\"/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"FailedToGetStorageSlotError\"]},{\"href\":\"/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor#slot\",\"html\":\"\\n

string\\nThe storage slot that failed to be accessed or retrieved

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor.mdx#slot\",\"isPage\":false,\"text\":\"\\nstring\\nThe storage slot that failed to be accessed or retrieved\\n\",\"title\":\"slot\",\"titles\":[\"FailedToGetStorageSlotError\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor#slotdescriptor\",\"html\":\"\\n

string\\nA description of the storage slot, for additional context in the error message

\",\"id\":\"pages/reference/aa-sdk/core/classes/FailedToGetStorageSlotError/constructor.mdx#slotdescriptor\",\"isPage\":false,\"text\":\"\\nstring\\nA description of the storage slot, for additional context in the error message\",\"title\":\"slotDescriptor\",\"titles\":[\"FailedToGetStorageSlotError\",\"Parameters\"]}]}],[\"index.42d12dab351eb743c548b47d31e26bd10addde7b1b8f4d2045aef0dca35d3d1b\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: AccountRequiresOwnerError\\ndescription: Overview of the AccountRequiresOwnerError method\\n---\\n\\n# AccountRequiresOwnerError\\n\\nConstructs an error indicating that an account of the specified type requires an owner to execute.\\n:::note\\n`AccountRequiresOwnerError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { AccountRequiresOwnerError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### accountType\\n\\n`string`\\nThe type of account that requires an owner\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/AccountRequiresOwnerError/constructor#accountrequiresownererror\",\"html\":\"\\n

Constructs an error indicating that an account of the specified type requires an owner to execute.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/AccountRequiresOwnerError/constructor.mdx#accountrequiresownererror\",\"isPage\":true,\"text\":\"\\nConstructs an error indicating that an account of the specified type requires an owner to execute.\\nAccountRequiresOwnerError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"AccountRequiresOwnerError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/AccountRequiresOwnerError/constructor#import\",\"html\":\"\\n
import { AccountRequiresOwnerError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/AccountRequiresOwnerError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AccountRequiresOwnerError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"AccountRequiresOwnerError\"]},{\"href\":\"/reference/aa-sdk/core/classes/AccountRequiresOwnerError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/AccountRequiresOwnerError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"AccountRequiresOwnerError\"]},{\"href\":\"/reference/aa-sdk/core/classes/AccountRequiresOwnerError/constructor#accounttype\",\"html\":\"\\n

string\\nThe type of account that requires an owner

\",\"id\":\"pages/reference/aa-sdk/core/classes/AccountRequiresOwnerError/constructor.mdx#accounttype\",\"isPage\":false,\"text\":\"\\nstring\\nThe type of account that requires an owner\",\"title\":\"accountType\",\"titles\":[\"AccountRequiresOwnerError\",\"Parameters\"]}]}],[\"index.00c3f004ea0dbf65bcf94b82ec6f8e40f19a9a4f91237aa80b1e726a1aad3c72\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: InvalidEntryPointError\\ndescription: Overview of the InvalidEntryPointError method\\n---\\n\\n# InvalidEntryPointError\\n\\nConstructs an error indicating an invalid entry point version for a specific chain.\\n:::note\\n`InvalidEntryPointError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { InvalidEntryPointError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### chain\\n\\n`Chain`\\nThe chain object containing information about the blockchain\\n\\n### entryPointVersion\\n\\n`any`\\nThe entry point version that is invalid\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor#invalidentrypointerror\",\"html\":\"\\n

Constructs an error indicating an invalid entry point version for a specific chain.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor.mdx#invalidentrypointerror\",\"isPage\":true,\"text\":\"\\nConstructs an error indicating an invalid entry point version for a specific chain.\\nInvalidEntryPointError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"InvalidEntryPointError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor#import\",\"html\":\"\\n
import { InvalidEntryPointError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { InvalidEntryPointError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"InvalidEntryPointError\"]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"InvalidEntryPointError\"]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor#chain\",\"html\":\"\\n

Chain\\nThe chain object containing information about the blockchain

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nThe chain object containing information about the blockchain\\n\",\"title\":\"chain\",\"titles\":[\"InvalidEntryPointError\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor#entrypointversion\",\"html\":\"\\n

any\\nThe entry point version that is invalid

\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidEntryPointError/constructor.mdx#entrypointversion\",\"isPage\":false,\"text\":\"\\nany\\nThe entry point version that is invalid\",\"title\":\"entryPointVersion\",\"titles\":[\"InvalidEntryPointError\",\"Parameters\"]}]}],[\"index.c96a096a787bd2cd61dce08b6c227040ad2ea4b7154ebd466820be706e3c1db7\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: InvalidRpcUrlError\\ndescription: Overview of the InvalidRpcUrlError method\\n---\\n\\n# InvalidRpcUrlError\\n\\nCreates an instance of an error with a message indicating an invalid RPC URL.\\n:::note\\n`InvalidRpcUrlError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { InvalidRpcUrlError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### rpcUrl\\n\\n`string`\\nThe invalid RPC URL that caused the error\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/InvalidRpcUrlError/constructor#invalidrpcurlerror\",\"html\":\"\\n

Creates an instance of an error with a message indicating an invalid RPC URL.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidRpcUrlError/constructor.mdx#invalidrpcurlerror\",\"isPage\":true,\"text\":\"\\nCreates an instance of an error with a message indicating an invalid RPC URL.\\nInvalidRpcUrlError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"InvalidRpcUrlError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidRpcUrlError/constructor#import\",\"html\":\"\\n
import { InvalidRpcUrlError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidRpcUrlError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { InvalidRpcUrlError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"InvalidRpcUrlError\"]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidRpcUrlError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidRpcUrlError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"InvalidRpcUrlError\"]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidRpcUrlError/constructor#rpcurl\",\"html\":\"\\n

string\\nThe invalid RPC URL that caused the error

\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidRpcUrlError/constructor.mdx#rpcurl\",\"isPage\":false,\"text\":\"\\nstring\\nThe invalid RPC URL that caused the error\",\"title\":\"rpcUrl\",\"titles\":[\"InvalidRpcUrlError\",\"Parameters\"]}]}],[\"index.68b1723b145a6e0dde36b0cc97d444d523a9f9c81f96663a934f24492016a2ce\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: ChainNotFoundError\\ndescription: Overview of the ChainNotFoundError method\\n---\\n\\n# ChainNotFoundError\\n\\nInitializes a new instance of the error message with a default message indicating that no chain was supplied to the client.\\n:::note\\n`ChainNotFoundError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { ChainNotFoundError } from \\\"@aa-sdk/core\\\";\\n```\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/ChainNotFoundError/constructor#chainnotfounderror\",\"html\":\"\\n

Initializes a new instance of the error message with a default message indicating that no chain was supplied to the client.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/ChainNotFoundError/constructor.mdx#chainnotfounderror\",\"isPage\":true,\"text\":\"\\nInitializes a new instance of the error message with a default message indicating that no chain was supplied to the client.\\nChainNotFoundError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"ChainNotFoundError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/ChainNotFoundError/constructor#import\",\"html\":\"\\n
import { ChainNotFoundError } from "@aa-sdk/core";
\",\"id\":\"pages/reference/aa-sdk/core/classes/ChainNotFoundError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { ChainNotFoundError } from "@aa-sdk/core";\",\"title\":\"Import\",\"titles\":[\"ChainNotFoundError\"]}]}],[\"index.8d675115fbc208f6cb8301d845b178b882eeb09fe06b95f65ca2492ed19033d1\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: InvalidUserOperationError\\ndescription: Overview of the InvalidUserOperationError method\\n---\\n\\n# InvalidUserOperationError\\n\\nCreates an instance of InvalidUserOperationError.\\n\\nInvalidUserOperationError constructor\\n:::note\\n`InvalidUserOperationError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { InvalidUserOperationError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### uo\\n\\n`UserOperationStruct`\\nthe invalid user operation struct\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/InvalidUserOperationError/constructor#invaliduseroperationerror\",\"html\":\"\\n

Creates an instance of InvalidUserOperationError.

\\n

InvalidUserOperationError constructor

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidUserOperationError/constructor.mdx#invaliduseroperationerror\",\"isPage\":true,\"text\":\"\\nCreates an instance of InvalidUserOperationError.\\nInvalidUserOperationError constructor\\nInvalidUserOperationError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"InvalidUserOperationError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidUserOperationError/constructor#import\",\"html\":\"\\n
import { InvalidUserOperationError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidUserOperationError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { InvalidUserOperationError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"InvalidUserOperationError\"]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidUserOperationError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidUserOperationError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"InvalidUserOperationError\"]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidUserOperationError/constructor#uo\",\"html\":\"\\n

UserOperationStruct\\nthe invalid user operation struct

\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidUserOperationError/constructor.mdx#uo\",\"isPage\":false,\"text\":\"\\nUserOperationStruct\\nthe invalid user operation struct\",\"title\":\"uo\",\"titles\":[\"InvalidUserOperationError\",\"Parameters\"]}]}],[\"index.6143efce5105bf7ae65092a1d779cf41a79456abdbbe7e9e661d415e6a10c2e6\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: BatchExecutionNotSupportedError\\ndescription: Overview of the BatchExecutionNotSupportedError method\\n---\\n\\n# BatchExecutionNotSupportedError\\n\\nConstructs an error message indicating that batch execution is not supported by the specified account type.\\n:::note\\n`BatchExecutionNotSupportedError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { BatchExecutionNotSupportedError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### accountType\\n\\n`string`\\nthe type of account that does not support batch execution\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/BatchExecutionNotSupportedError/constructor#batchexecutionnotsupportederror\",\"html\":\"\\n

Constructs an error message indicating that batch execution is not supported by the specified account type.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/BatchExecutionNotSupportedError/constructor.mdx#batchexecutionnotsupportederror\",\"isPage\":true,\"text\":\"\\nConstructs an error message indicating that batch execution is not supported by the specified account type.\\nBatchExecutionNotSupportedError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"BatchExecutionNotSupportedError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/BatchExecutionNotSupportedError/constructor#import\",\"html\":\"\\n
import { BatchExecutionNotSupportedError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/BatchExecutionNotSupportedError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BatchExecutionNotSupportedError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"BatchExecutionNotSupportedError\"]},{\"href\":\"/reference/aa-sdk/core/classes/BatchExecutionNotSupportedError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/BatchExecutionNotSupportedError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"BatchExecutionNotSupportedError\"]},{\"href\":\"/reference/aa-sdk/core/classes/BatchExecutionNotSupportedError/constructor#accounttype\",\"html\":\"\\n

string\\nthe type of account that does not support batch execution

\",\"id\":\"pages/reference/aa-sdk/core/classes/BatchExecutionNotSupportedError/constructor.mdx#accounttype\",\"isPage\":false,\"text\":\"\\nstring\\nthe type of account that does not support batch execution\",\"title\":\"accountType\",\"titles\":[\"BatchExecutionNotSupportedError\",\"Parameters\"]}]}],[\"index.0cb76468321358f5f4309903b394284cec4f0b05381ac92d49aa45da6a71c089\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: DefaultFactoryNotDefinedError\\ndescription: Overview of the DefaultFactoryNotDefinedError method\\n---\\n\\n# DefaultFactoryNotDefinedError\\n\\nConstructs an error message indicating that no default factory was found for the given account type, chain, and entry point version.\\n:::note\\n`DefaultFactoryNotDefinedError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { DefaultFactoryNotDefinedError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### accountType\\n\\n`string`\\nthe type of account\\n\\n### chain\\n\\n`Chain`\\nthe blockchain chain\\n\\n### version\\n\\n`EntryPointVersion`\\nthe entry point version\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor#defaultfactorynotdefinederror\",\"html\":\"\\n

Constructs an error message indicating that no default factory was found for the given account type, chain, and entry point version.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor.mdx#defaultfactorynotdefinederror\",\"isPage\":true,\"text\":\"\\nConstructs an error message indicating that no default factory was found for the given account type, chain, and entry point version.\\nDefaultFactoryNotDefinedError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"DefaultFactoryNotDefinedError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor#import\",\"html\":\"\\n
import { DefaultFactoryNotDefinedError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { DefaultFactoryNotDefinedError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"DefaultFactoryNotDefinedError\"]},{\"href\":\"/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"DefaultFactoryNotDefinedError\"]},{\"href\":\"/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor#accounttype\",\"html\":\"\\n

string\\nthe type of account

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor.mdx#accounttype\",\"isPage\":false,\"text\":\"\\nstring\\nthe type of account\\n\",\"title\":\"accountType\",\"titles\":[\"DefaultFactoryNotDefinedError\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor#chain\",\"html\":\"\\n

Chain\\nthe blockchain chain

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor.mdx#chain\",\"isPage\":false,\"text\":\"\\nChain\\nthe blockchain chain\\n\",\"title\":\"chain\",\"titles\":[\"DefaultFactoryNotDefinedError\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor#version\",\"html\":\"\\n

EntryPointVersion\\nthe entry point version

\",\"id\":\"pages/reference/aa-sdk/core/classes/DefaultFactoryNotDefinedError/constructor.mdx#version\",\"isPage\":false,\"text\":\"\\nEntryPointVersion\\nthe entry point version\",\"title\":\"version\",\"titles\":[\"DefaultFactoryNotDefinedError\",\"Parameters\"]}]}],[\"index.66bc5d9caf7b830195bb869ca56c2d3a2b902e20b923991797576b4ca05ae8f6\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: info\\ndescription: Overview of the info method\\n---\\n\\n# info\\n\\nLogs an informational message to the console if the logging level is set to INFO.\\n\\n## Import\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n\\nLogger.info(\\\"Something is happening\\\");\\n```\\n\\n## Parameters\\n\\n### msg\\n\\n`string`\\nthe message to log\\n\\n### args\\n\\n`...any[]`\\nadditional arguments to log alongside the message\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/Logger/info#info\",\"html\":\"\\n

Logs an informational message to the console if the logging level is set to INFO.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/info.mdx#info\",\"isPage\":true,\"text\":\"\\nLogs an informational message to the console if the logging level is set to INFO.\\n\",\"title\":\"info\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/info#import\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/info.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"info\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/info#usage\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";\\n \\nLogger.info("Something is happening");
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/info.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n \\nLogger.info("Something is happening");\\n\",\"title\":\"Usage\",\"titles\":[\"info\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/info#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/info.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"info\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/info#msg\",\"html\":\"\\n

string\\nthe message to log

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/info.mdx#msg\",\"isPage\":false,\"text\":\"\\nstring\\nthe message to log\\n\",\"title\":\"msg\",\"titles\":[\"info\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/info#args\",\"html\":\"\\n

...any[]\\nadditional arguments to log alongside the message

\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/info.mdx#args\",\"isPage\":false,\"text\":\"\\n...any[]\\nadditional arguments to log alongside the message\",\"title\":\"args\",\"titles\":[\"info\",\"Parameters\"]}]}],[\"index.71d9a1e185d6f61a0342131ed34e003e08b21e9a0201663e42f1cfc970bccb91\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: GetCounterFactualAddressError\\ndescription: Overview of the GetCounterFactualAddressError method\\n---\\n\\n# GetCounterFactualAddressError\\n\\nConstructor for initializing an error message indicating the failure of fetching the counter-factual address.\\n:::note\\n`GetCounterFactualAddressError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { GetCounterFactualAddressError } from \\\"@aa-sdk/core\\\";\\n```\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/GetCounterFactualAddressError/constructor#getcounterfactualaddresserror\",\"html\":\"\\n

Constructor for initializing an error message indicating the failure of fetching the counter-factual address.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/GetCounterFactualAddressError/constructor.mdx#getcounterfactualaddresserror\",\"isPage\":true,\"text\":\"\\nConstructor for initializing an error message indicating the failure of fetching the counter-factual address.\\nGetCounterFactualAddressError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"GetCounterFactualAddressError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/GetCounterFactualAddressError/constructor#import\",\"html\":\"\\n
import { GetCounterFactualAddressError } from "@aa-sdk/core";
\",\"id\":\"pages/reference/aa-sdk/core/classes/GetCounterFactualAddressError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { GetCounterFactualAddressError } from "@aa-sdk/core";\",\"title\":\"Import\",\"titles\":[\"GetCounterFactualAddressError\"]}]}],[\"index.16bb156efa2868a18ba461f7e93b0dc4827453767b0c5ec31a53fe68902d2b83\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: IncompatibleClientError\\ndescription: Overview of the IncompatibleClientError method\\n---\\n\\n# IncompatibleClientError\\n\\nThrows an error when the client type does not match the expected client type.\\n:::note\\n`IncompatibleClientError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { IncompatibleClientError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### expectedClient\\n\\n`string`\\nThe expected type of the client.\\n\\n### method\\n\\n`string`\\nThe method that was called.\\n\\n### client\\n\\n`Client`\\nThe client instance.\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/IncompatibleClientError/constructor#incompatibleclienterror\",\"html\":\"\\n

Throws an error when the client type does not match the expected client type.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/IncompatibleClientError/constructor.mdx#incompatibleclienterror\",\"isPage\":true,\"text\":\"\\nThrows an error when the client type does not match the expected client type.\\nIncompatibleClientError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"IncompatibleClientError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/IncompatibleClientError/constructor#import\",\"html\":\"\\n
import { IncompatibleClientError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/IncompatibleClientError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { IncompatibleClientError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"IncompatibleClientError\"]},{\"href\":\"/reference/aa-sdk/core/classes/IncompatibleClientError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/IncompatibleClientError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"IncompatibleClientError\"]},{\"href\":\"/reference/aa-sdk/core/classes/IncompatibleClientError/constructor#expectedclient\",\"html\":\"\\n

string\\nThe expected type of the client.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/IncompatibleClientError/constructor.mdx#expectedclient\",\"isPage\":false,\"text\":\"\\nstring\\nThe expected type of the client.\\n\",\"title\":\"expectedClient\",\"titles\":[\"IncompatibleClientError\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/IncompatibleClientError/constructor#method\",\"html\":\"\\n

string\\nThe method that was called.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/IncompatibleClientError/constructor.mdx#method\",\"isPage\":false,\"text\":\"\\nstring\\nThe method that was called.\\n\",\"title\":\"method\",\"titles\":[\"IncompatibleClientError\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/IncompatibleClientError/constructor#client\",\"html\":\"\\n

Client\\nThe client instance.

\",\"id\":\"pages/reference/aa-sdk/core/classes/IncompatibleClientError/constructor.mdx#client\",\"isPage\":false,\"text\":\"\\nClient\\nThe client instance.\",\"title\":\"client\",\"titles\":[\"IncompatibleClientError\",\"Parameters\"]}]}],[\"index.4db44377bba8eef182a5135168f67f9a9b11727b0b6850a7ed099262eb8018c4\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: error\\ndescription: Overview of the error method\\n---\\n\\n# error\\n\\nLogs an error message to the console if the logging condition is met.\\n\\n## Import\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n\\nLogger.error(\\\"An error occurred while processing the request\\\");\\n```\\n\\n## Parameters\\n\\n### msg\\n\\n`string`\\nThe primary error message to be logged\\n\\n### args\\n\\n`...any[]`\\nAdditional arguments to be logged along with the error message\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/Logger/error#error\",\"html\":\"\\n

Logs an error message to the console if the logging condition is met.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/error.mdx#error\",\"isPage\":true,\"text\":\"\\nLogs an error message to the console if the logging condition is met.\\n\",\"title\":\"error\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/error#import\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/error.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"error\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/error#usage\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";\\n \\nLogger.error("An error occurred while processing the request");
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/error.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n \\nLogger.error("An error occurred while processing the request");\\n\",\"title\":\"Usage\",\"titles\":[\"error\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/error#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/error.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"error\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/error#msg\",\"html\":\"\\n

string\\nThe primary error message to be logged

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/error.mdx#msg\",\"isPage\":false,\"text\":\"\\nstring\\nThe primary error message to be logged\\n\",\"title\":\"msg\",\"titles\":[\"error\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/error#args\",\"html\":\"\\n

...any[]\\nAdditional arguments to be logged along with the error message

\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/error.mdx#args\",\"isPage\":false,\"text\":\"\\n...any[]\\nAdditional arguments to be logged along with the error message\",\"title\":\"args\",\"titles\":[\"error\",\"Parameters\"]}]}],[\"index.1a200890e7a7072b588fc441d2019e3ce6d709a2b2fe8f3e4867a391a8d49424\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: InvalidSignerTypeError\\ndescription: Overview of the InvalidSignerTypeError method\\n---\\n\\n# InvalidSignerTypeError\\n\\nConstructs an error message when an invalid signer type is passed to SmartAccountSigner.\\n:::note\\n`InvalidSignerTypeError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { InvalidSignerTypeError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### signerType\\n\\n`string`\\nAn optional parameter specifying the signer type. If not provided, a default error message will be used.\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/InvalidSignerTypeError/constructor#invalidsignertypeerror\",\"html\":\"\\n

Constructs an error message when an invalid signer type is passed to SmartAccountSigner.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidSignerTypeError/constructor.mdx#invalidsignertypeerror\",\"isPage\":true,\"text\":\"\\nConstructs an error message when an invalid signer type is passed to SmartAccountSigner.\\nInvalidSignerTypeError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"InvalidSignerTypeError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidSignerTypeError/constructor#import\",\"html\":\"\\n
import { InvalidSignerTypeError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidSignerTypeError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { InvalidSignerTypeError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"InvalidSignerTypeError\"]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidSignerTypeError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidSignerTypeError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"InvalidSignerTypeError\"]},{\"href\":\"/reference/aa-sdk/core/classes/InvalidSignerTypeError/constructor#signertype\",\"html\":\"\\n

string\\nAn optional parameter specifying the signer type. If not provided, a default error message will be used.

\",\"id\":\"pages/reference/aa-sdk/core/classes/InvalidSignerTypeError/constructor.mdx#signertype\",\"isPage\":false,\"text\":\"\\nstring\\nAn optional parameter specifying the signer type. If not provided, a default error message will be used.\",\"title\":\"signerType\",\"titles\":[\"InvalidSignerTypeError\",\"Parameters\"]}]}],[\"index.257056434931ff61cc96878e779c5520327d25f93276aaeea04ed1fbee085fbc\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: SignTransactionNotSupportedError\\ndescription: Overview of the SignTransactionNotSupportedError method\\n---\\n\\n# SignTransactionNotSupportedError\\n\\nThrows an error indicating that signing a transaction is not supported by smart contracts.\\n:::note\\n`SignTransactionNotSupportedError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { SignTransactionNotSupportedError } from \\\"@aa-sdk/core\\\";\\n```\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/SignTransactionNotSupportedError/constructor#signtransactionnotsupportederror\",\"html\":\"\\n

Throws an error indicating that signing a transaction is not supported by smart contracts.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/SignTransactionNotSupportedError/constructor.mdx#signtransactionnotsupportederror\",\"isPage\":true,\"text\":\"\\nThrows an error indicating that signing a transaction is not supported by smart contracts.\\nSignTransactionNotSupportedError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"SignTransactionNotSupportedError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/SignTransactionNotSupportedError/constructor#import\",\"html\":\"\\n
import { SignTransactionNotSupportedError } from "@aa-sdk/core";
\",\"id\":\"pages/reference/aa-sdk/core/classes/SignTransactionNotSupportedError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SignTransactionNotSupportedError } from "@aa-sdk/core";\",\"title\":\"Import\",\"titles\":[\"SignTransactionNotSupportedError\"]}]}],[\"index.4d02de016bfe402be37fe0cd328748f840746e88d62884ac91e541ef5c3e07e4\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: IncorrectAccountType\\ndescription: Overview of the IncorrectAccountType method\\n---\\n\\n# IncorrectAccountType\\n\\nConstructs an error object indicating that the expected account type does not match the actual account type.\\n:::note\\n`IncorrectAccountType` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { IncorrectAccountType } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### expected\\n\\n`string`\\nthe expected account type\\n\\n### actual\\n\\n`string`\\nthe actual account type that was received\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/IncorrectAccountType/constructor#incorrectaccounttype\",\"html\":\"\\n

Constructs an error object indicating that the expected account type does not match the actual account type.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/IncorrectAccountType/constructor.mdx#incorrectaccounttype\",\"isPage\":true,\"text\":\"\\nConstructs an error object indicating that the expected account type does not match the actual account type.\\nIncorrectAccountType extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"IncorrectAccountType\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/IncorrectAccountType/constructor#import\",\"html\":\"\\n
import { IncorrectAccountType } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/IncorrectAccountType/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { IncorrectAccountType } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"IncorrectAccountType\"]},{\"href\":\"/reference/aa-sdk/core/classes/IncorrectAccountType/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/IncorrectAccountType/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"IncorrectAccountType\"]},{\"href\":\"/reference/aa-sdk/core/classes/IncorrectAccountType/constructor#expected\",\"html\":\"\\n

string\\nthe expected account type

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/IncorrectAccountType/constructor.mdx#expected\",\"isPage\":false,\"text\":\"\\nstring\\nthe expected account type\\n\",\"title\":\"expected\",\"titles\":[\"IncorrectAccountType\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/IncorrectAccountType/constructor#actual\",\"html\":\"\\n

string\\nthe actual account type that was received

\",\"id\":\"pages/reference/aa-sdk/core/classes/IncorrectAccountType/constructor.mdx#actual\",\"isPage\":false,\"text\":\"\\nstring\\nthe actual account type that was received\",\"title\":\"actual\",\"titles\":[\"IncorrectAccountType\",\"Parameters\"]}]}],[\"index.4e0aa8952ae2ec077e7204341ab52b2d3ba79c37e0b9d8d352882fa0e840ed4d\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: FailedToFindTransactionError\\ndescription: Overview of the FailedToFindTransactionError method\\n---\\n\\n# FailedToFindTransactionError\\n\\nConstructs a new error message indicating a failure to find the transaction for the specified user operation hash.\\n:::note\\n`FailedToFindTransactionError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { FailedToFindTransactionError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### hash\\n\\n`Hex`\\nThe hexadecimal value representing the user operation hash.\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/FailedToFindTransactionError/constructor#failedtofindtransactionerror\",\"html\":\"\\n

Constructs a new error message indicating a failure to find the transaction for the specified user operation hash.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/FailedToFindTransactionError/constructor.mdx#failedtofindtransactionerror\",\"isPage\":true,\"text\":\"\\nConstructs a new error message indicating a failure to find the transaction for the specified user operation hash.\\nFailedToFindTransactionError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"FailedToFindTransactionError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/FailedToFindTransactionError/constructor#import\",\"html\":\"\\n
import { FailedToFindTransactionError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/FailedToFindTransactionError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { FailedToFindTransactionError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"FailedToFindTransactionError\"]},{\"href\":\"/reference/aa-sdk/core/classes/FailedToFindTransactionError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/FailedToFindTransactionError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"FailedToFindTransactionError\"]},{\"href\":\"/reference/aa-sdk/core/classes/FailedToFindTransactionError/constructor#hash\",\"html\":\"\\n

Hex\\nThe hexadecimal value representing the user operation hash.

\",\"id\":\"pages/reference/aa-sdk/core/classes/FailedToFindTransactionError/constructor.mdx#hash\",\"isPage\":false,\"text\":\"\\nHex\\nThe hexadecimal value representing the user operation hash.\",\"title\":\"hash\",\"titles\":[\"FailedToFindTransactionError\",\"Parameters\"]}]}],[\"index.5ea14f71dfacd2a3443b6d9c35121bdc8ec994f229078031f45638f32deb76d1\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: debug\\ndescription: Overview of the debug method\\n---\\n\\n# debug\\n\\nLogs a debug message to the console if the log level allows it.\\n\\n## Import\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n\\nLogger.debug(\\\"Something is happening\\\");\\n```\\n\\n## Parameters\\n\\n### msg\\n\\n`string`\\nThe message to log\\n\\n### args\\n\\n`...any[]`\\nAdditional arguments to pass to the console.debug method\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/Logger/debug#debug\",\"html\":\"\\n

Logs a debug message to the console if the log level allows it.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/debug.mdx#debug\",\"isPage\":true,\"text\":\"\\nLogs a debug message to the console if the log level allows it.\\n\",\"title\":\"debug\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/debug#import\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/debug.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"debug\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/debug#usage\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";\\n \\nLogger.debug("Something is happening");
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/debug.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n \\nLogger.debug("Something is happening");\\n\",\"title\":\"Usage\",\"titles\":[\"debug\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/debug#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/debug.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"debug\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/debug#msg\",\"html\":\"\\n

string\\nThe message to log

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/debug.mdx#msg\",\"isPage\":false,\"text\":\"\\nstring\\nThe message to log\\n\",\"title\":\"msg\",\"titles\":[\"debug\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/debug#args\",\"html\":\"\\n

...any[]\\nAdditional arguments to pass to the console.debug method

\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/debug.mdx#args\",\"isPage\":false,\"text\":\"\\n...any[]\\nAdditional arguments to pass to the console.debug method\",\"title\":\"args\",\"titles\":[\"debug\",\"Parameters\"]}]}],[\"index.c03b809fe0ca1c6e8ffd4c4b46371ad0ed5f8029516f0c482881f81d2bf851b1\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: setLogFilter\\ndescription: Overview of the setLogFilter method\\n---\\n\\n# setLogFilter\\n\\nSets the log filter pattern.\\n\\n## Import\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n\\nLogger.setLogFilter(\\\"error\\\");\\n```\\n\\n## Parameters\\n\\n### pattern\\n\\n`string`\\nThe pattern to set as the log filter\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogFilter#setlogfilter\",\"html\":\"\\n

Sets the log filter pattern.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogFilter.mdx#setlogfilter\",\"isPage\":true,\"text\":\"\\nSets the log filter pattern.\\n\",\"title\":\"setLogFilter\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogFilter#import\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogFilter.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"setLogFilter\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogFilter#usage\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";\\n \\nLogger.setLogFilter("error");
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogFilter.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n \\nLogger.setLogFilter("error");\\n\",\"title\":\"Usage\",\"titles\":[\"setLogFilter\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogFilter#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogFilter.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"setLogFilter\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogFilter#pattern\",\"html\":\"\\n

string\\nThe pattern to set as the log filter

\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogFilter.mdx#pattern\",\"isPage\":false,\"text\":\"\\nstring\\nThe pattern to set as the log filter\",\"title\":\"pattern\",\"titles\":[\"setLogFilter\",\"Parameters\"]}]}],[\"index.b0eb37e7be72d33ee54ccd921e2bbcb810abda18673cd4eadb1e4b249d9b7634\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: SmartAccountWithSignerRequiredError\\ndescription: Overview of the SmartAccountWithSignerRequiredError method\\n---\\n\\n# SmartAccountWithSignerRequiredError\\n\\nInitializes a new instance of the error class with a predefined error message indicating that a smart account requires a signer.\\n:::note\\n`SmartAccountWithSignerRequiredError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { SmartAccountWithSignerRequiredError } from \\\"@aa-sdk/core\\\";\\n```\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/SmartAccountWithSignerRequiredError/constructor#smartaccountwithsignerrequirederror\",\"html\":\"\\n

Initializes a new instance of the error class with a predefined error message indicating that a smart account requires a signer.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/SmartAccountWithSignerRequiredError/constructor.mdx#smartaccountwithsignerrequirederror\",\"isPage\":true,\"text\":\"\\nInitializes a new instance of the error class with a predefined error message indicating that a smart account requires a signer.\\nSmartAccountWithSignerRequiredError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"SmartAccountWithSignerRequiredError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/SmartAccountWithSignerRequiredError/constructor#import\",\"html\":\"\\n
import { SmartAccountWithSignerRequiredError } from "@aa-sdk/core";
\",\"id\":\"pages/reference/aa-sdk/core/classes/SmartAccountWithSignerRequiredError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { SmartAccountWithSignerRequiredError } from "@aa-sdk/core";\",\"title\":\"Import\",\"titles\":[\"SmartAccountWithSignerRequiredError\"]}]}],[\"index.61d5f0709220af4cca79f092759ac1805941a7cc8cf42d978b86e33d6f064e3c\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: warn\\ndescription: Overview of the warn method\\n---\\n\\n# warn\\n\\nLogs a warning message if the logging conditions are met.\\n\\n## Import\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n\\nLogger.warn(\\\"Careful...\\\");\\n```\\n\\n## Parameters\\n\\n### msg\\n\\n`string`\\nThe message to log as a warning\\n\\n### args\\n\\n`...any[]`\\nAdditional parameters to log along with the message\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/Logger/warn#warn\",\"html\":\"\\n

Logs a warning message if the logging conditions are met.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/warn.mdx#warn\",\"isPage\":true,\"text\":\"\\nLogs a warning message if the logging conditions are met.\\n\",\"title\":\"warn\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/warn#import\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/warn.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"warn\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/warn#usage\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";\\n \\nLogger.warn("Careful...");
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/warn.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n \\nLogger.warn("Careful...");\\n\",\"title\":\"Usage\",\"titles\":[\"warn\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/warn#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/warn.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"warn\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/warn#msg\",\"html\":\"\\n

string\\nThe message to log as a warning

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/warn.mdx#msg\",\"isPage\":false,\"text\":\"\\nstring\\nThe message to log as a warning\\n\",\"title\":\"msg\",\"titles\":[\"warn\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/warn#args\",\"html\":\"\\n

...any[]\\nAdditional parameters to log along with the message

\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/warn.mdx#args\",\"isPage\":false,\"text\":\"\\n...any[]\\nAdditional parameters to log along with the message\",\"title\":\"args\",\"titles\":[\"warn\",\"Parameters\"]}]}],[\"index.e130ac72ea3406a7e8921645d745c241256b8bb6c403a238c517acf49e45acb8\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: LocalAccountSigner\\ndescription: Overview of the LocalAccountSigner method\\n---\\n\\n# LocalAccountSigner\\n\\nA function to initialize an object with an inner parameter and derive a signerType from it.\\n\\n## Import\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { privateKeyToAccount, generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = new LocalAccountSigner(\\n privateKeyToAccount(generatePrivateKey())\\n);\\n```\\n\\n## Parameters\\n\\n### inner\\n\\n`T`\\nThe inner parameter containing the necessary data\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/constructor#localaccountsigner\",\"html\":\"\\n

A function to initialize an object with an inner parameter and derive a signerType from it.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/constructor.mdx#localaccountsigner\",\"isPage\":true,\"text\":\"\\nA function to initialize an object with an inner parameter and derive a signerType from it.\\n\",\"title\":\"LocalAccountSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/constructor#import\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"LocalAccountSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/constructor#usage\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { privateKeyToAccount, generatePrivateKey } from "viem";\\n \\nconst signer = new LocalAccountSigner(\\n  privateKeyToAccount(generatePrivateKey())\\n);
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/constructor.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { privateKeyToAccount, generatePrivateKey } from "viem";\\n \\nconst signer = new LocalAccountSigner(\\n privateKeyToAccount(generatePrivateKey())\\n);\\n\",\"title\":\"Usage\",\"titles\":[\"LocalAccountSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"LocalAccountSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/constructor#inner\",\"html\":\"\\n

T\\nThe inner parameter containing the necessary data

\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/constructor.mdx#inner\",\"isPage\":false,\"text\":\"\\nT\\nThe inner parameter containing the necessary data\",\"title\":\"inner\",\"titles\":[\"LocalAccountSigner\",\"Parameters\"]}]}],[\"index.6fb3f37e75518dd77ff928a979b23cf792517e8522f2b524d39be59c5913840b\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: setLogLevel\\ndescription: Overview of the setLogLevel method\\n---\\n\\n# setLogLevel\\n\\nSets the log level for logging purposes.\\n\\n## Import\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { Logger, LogLevel } from \\\"@aa-sdk/core\\\";\\nLogger.setLogLevel(LogLevel.DEBUG);\\n```\\n\\n## Parameters\\n\\n### logLevel\\n\\n`LogLevel`\\nThe desired log level\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogLevel#setloglevel\",\"html\":\"\\n

Sets the log level for logging purposes.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogLevel.mdx#setloglevel\",\"isPage\":true,\"text\":\"\\nSets the log level for logging purposes.\\n\",\"title\":\"setLogLevel\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogLevel#import\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogLevel.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"setLogLevel\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogLevel#usage\",\"html\":\"\\n
import { Logger, LogLevel } from "@aa-sdk/core";\\nLogger.setLogLevel(LogLevel.DEBUG);
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogLevel.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { Logger, LogLevel } from "@aa-sdk/core";\\nLogger.setLogLevel(LogLevel.DEBUG);\\n\",\"title\":\"Usage\",\"titles\":[\"setLogLevel\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogLevel#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogLevel.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"setLogLevel\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/setLogLevel#loglevel\",\"html\":\"\\n

LogLevel\\nThe desired log level

\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/setLogLevel.mdx#loglevel\",\"isPage\":false,\"text\":\"\\nLogLevel\\nThe desired log level\",\"title\":\"logLevel\",\"titles\":[\"setLogLevel\",\"Parameters\"]}]}],[\"index.7637f0ba51e0ac2cac6ce2f34d8c89a778f621b8e1ab26d7923ff18a2bcfe139\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: verbose\\ndescription: Overview of the verbose method\\n---\\n\\n# verbose\\n\\nLogs a message with additional arguments if the logging level permits it.\\n\\n## Import\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { Logger } from \\\"@aa-sdk/core\\\";\\n\\nLogger.verbose(\\\"Something is happening\\\");\\n```\\n\\n## Parameters\\n\\n### msg\\n\\n`string`\\nThe message to log\\n\\n### args\\n\\n`...any[]`\\nAdditional arguments to be logged\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/Logger/verbose#verbose\",\"html\":\"\\n

Logs a message with additional arguments if the logging level permits it.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/verbose.mdx#verbose\",\"isPage\":true,\"text\":\"\\nLogs a message with additional arguments if the logging level permits it.\\n\",\"title\":\"verbose\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/verbose#import\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/verbose.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"verbose\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/verbose#usage\",\"html\":\"\\n
import { Logger } from "@aa-sdk/core";\\n \\nLogger.verbose("Something is happening");
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/verbose.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { Logger } from "@aa-sdk/core";\\n \\nLogger.verbose("Something is happening");\\n\",\"title\":\"Usage\",\"titles\":[\"verbose\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/verbose#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/verbose.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"verbose\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/verbose#msg\",\"html\":\"\\n

string\\nThe message to log

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/verbose.mdx#msg\",\"isPage\":false,\"text\":\"\\nstring\\nThe message to log\\n\",\"title\":\"msg\",\"titles\":[\"verbose\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/Logger/verbose#args\",\"html\":\"\\n

...any[]\\nAdditional arguments to be logged

\",\"id\":\"pages/reference/aa-sdk/core/classes/Logger/verbose.mdx#args\",\"isPage\":false,\"text\":\"\\n...any[]\\nAdditional arguments to be logged\",\"title\":\"args\",\"titles\":[\"verbose\",\"Parameters\"]}]}],[\"index.948f7ef38e33da3349aedbf02ec7c6d71eabaefddbf06d1458006a822333bac5\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: privateKeyToAccountSigner\\ndescription: Overview of the privateKeyToAccountSigner method\\n---\\n\\n# privateKeyToAccountSigner\\n\\nCreates a `LocalAccountSigner` instance using the provided private key.\\n\\n## Import\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\\n\\n## Parameters\\n\\n### key\\n\\n`Hex`\\nThe private key in hexadecimal format\\n\\n## Returns\\n\\n`LocalAccountSigner`\\nAn instance of `LocalAccountSigner` initialized with the provided private key\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner#privatekeytoaccountsigner\",\"html\":\"\\n

Creates a LocalAccountSigner instance using the provided private key.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner.mdx#privatekeytoaccountsigner\",\"isPage\":true,\"text\":\"\\nCreates a LocalAccountSigner instance using the provided private key.\\n\",\"title\":\"privateKeyToAccountSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner#import\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"privateKeyToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner#usage\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n\",\"title\":\"Usage\",\"titles\":[\"privateKeyToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"privateKeyToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner#key\",\"html\":\"\\n

Hex\\nThe private key in hexadecimal format

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner.mdx#key\",\"isPage\":false,\"text\":\"\\nHex\\nThe private key in hexadecimal format\\n\",\"title\":\"key\",\"titles\":[\"privateKeyToAccountSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner#returns\",\"html\":\"\\n

LocalAccountSigner<PrivateKeyAccount>\\nAn instance of LocalAccountSigner initialized with the provided private key

\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/privateKeyToAccountSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\nLocalAccountSigner<PrivateKeyAccount>\\nAn instance of LocalAccountSigner initialized with the provided private key\",\"title\":\"Returns\",\"titles\":[\"privateKeyToAccountSigner\"]}]}],[\"index.a331b3c524398466cc8feb19eeec1d01b5fdd8eb22171c5a6ad7878c2d8dcada\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: mnemonicToAccountSigner\\ndescription: Overview of the mnemonicToAccountSigner method\\n---\\n\\n# mnemonicToAccountSigner\\n\\nCreates a LocalAccountSigner using the provided mnemonic key and optional HD options.\\n\\n## Import\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generateMnemonic } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generateMnemonic());\\n```\\n\\n## Parameters\\n\\n### key\\n\\n`string`\\nThe mnemonic key to derive the account from.\\n\\n### opts\\n\\n`HDOptions`\\nOptional HD options for deriving the account.\\n\\n## Returns\\n\\n`LocalAccountSigner`\\nA LocalAccountSigner object for the derived account.\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner#mnemonictoaccountsigner\",\"html\":\"\\n

Creates a LocalAccountSigner using the provided mnemonic key and optional HD options.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner.mdx#mnemonictoaccountsigner\",\"isPage\":true,\"text\":\"\\nCreates a LocalAccountSigner using the provided mnemonic key and optional HD options.\\n\",\"title\":\"mnemonicToAccountSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner#import\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"mnemonicToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner#usage\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generateMnemonic } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generateMnemonic());
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generateMnemonic } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generateMnemonic());\\n\",\"title\":\"Usage\",\"titles\":[\"mnemonicToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"mnemonicToAccountSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner#key\",\"html\":\"\\n

string\\nThe mnemonic key to derive the account from.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner.mdx#key\",\"isPage\":false,\"text\":\"\\nstring\\nThe mnemonic key to derive the account from.\\n\",\"title\":\"key\",\"titles\":[\"mnemonicToAccountSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner#opts\",\"html\":\"\\n

HDOptions\\nOptional HD options for deriving the account.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner.mdx#opts\",\"isPage\":false,\"text\":\"\\nHDOptions\\nOptional HD options for deriving the account.\\n\",\"title\":\"opts\",\"titles\":[\"mnemonicToAccountSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner#returns\",\"html\":\"\\n

LocalAccountSigner<HDAccount>\\nA LocalAccountSigner object for the derived account.

\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/mnemonicToAccountSigner.mdx#returns\",\"isPage\":false,\"text\":\"\\nLocalAccountSigner<HDAccount>\\nA LocalAccountSigner object for the derived account.\",\"title\":\"Returns\",\"titles\":[\"mnemonicToAccountSigner\"]}]}],[\"index.331646c983bc9fa33078b8f1b0c50e57418a2b82b32cde23c269cd4fced1a524\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getAddress\\ndescription: Overview of the getAddress method\\n---\\n\\n# getAddress\\n\\nReturns the address of the inner object in a specific hexadecimal format.\\n\\n## Import\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\nconst address = await signer.getAddress();\\n```\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the address in the format `0x{string}`\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/getAddress#getaddress\",\"html\":\"\\n

Returns the address of the inner object in a specific hexadecimal format.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/getAddress.mdx#getaddress\",\"isPage\":true,\"text\":\"\\nReturns the address of the inner object in a specific hexadecimal format.\\n\",\"title\":\"getAddress\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/getAddress#import\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/getAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"getAddress\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/getAddress#usage\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\nconst address = await signer.getAddress();
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/getAddress.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\nconst address = await signer.getAddress();\\n\",\"title\":\"Usage\",\"titles\":[\"getAddress\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/getAddress#returns\",\"html\":\"\\n

Promise<Hex>\\nA promise that resolves to the address in the format 0x{string}

\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/getAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Hex>\\nA promise that resolves to the address in the format 0x{string}\",\"title\":\"Returns\",\"titles\":[\"getAddress\"]}]}],[\"index.32029ded124fdf74e5f912a55b4459b1952d9a1f7ece6c695e864aa9bbfa35d4\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: signMessage\\ndescription: Overview of the signMessage method\\n---\\n\\n# signMessage\\n\\nSigns the provided message using the inner signMessage function.\\n\\n## Import\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\nconst signature = await signer.signMessage(\\\"Hello, world!\\\");\\n```\\n\\n## Parameters\\n\\n### message\\n\\n`string`\\nThe message to be signed\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the signed message\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage#signmessage\",\"html\":\"\\n

Signs the provided message using the inner signMessage function.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage.mdx#signmessage\",\"isPage\":true,\"text\":\"\\nSigns the provided message using the inner signMessage function.\\n\",\"title\":\"signMessage\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage#import\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage#usage\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\nconst signature = await signer.signMessage("Hello, world!");
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\nconst signature = await signer.signMessage("Hello, world!");\\n\",\"title\":\"Usage\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage#message\",\"html\":\"\\n

string\\nThe message to be signed

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage.mdx#message\",\"isPage\":false,\"text\":\"\\nstring\\nThe message to be signed\\n\",\"title\":\"message\",\"titles\":[\"signMessage\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage#returns\",\"html\":\"\\n

Promise<any>\\nA promise that resolves to the signed message

\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signMessage.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<any>\\nA promise that resolves to the signed message\",\"title\":\"Returns\",\"titles\":[\"signMessage\"]}]}],[\"index.fadda754abf5b43b4a73d96b6b6a7bf4b46cbe7ffc4885da7cc4c31e40787759\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: signTypedData\\ndescription: Overview of the signTypedData method\\n---\\n\\n# signTypedData\\n\\nSigns typed data using the given parameters.\\n\\n## Import\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\nconst signature = await signer.signTypedData({\\n domain: {},\\n types: {},\\n primaryType: \\\"\\\",\\n message: {},\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`TypedDataDefinition`\\nThe parameters defining the typed data and primary type\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the signed data in hexadecimal format\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData#signtypeddata\",\"html\":\"\\n

Signs typed data using the given parameters.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData.mdx#signtypeddata\",\"isPage\":true,\"text\":\"\\nSigns typed data using the given parameters.\\n\",\"title\":\"signTypedData\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData#import\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData#usage\",\"html\":\"\\n
import { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\nconst signature = await signer.signTypedData({\\n  domain: {},\\n  types: {},\\n  primaryType: "",\\n  message: {},\\n});
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { LocalAccountSigner } from "@aa-sdk/core";\\nimport { generatePrivateKey } from "viem";\\n \\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\nconst signature = await signer.signTypedData({\\n domain: {},\\n types: {},\\n primaryType: "",\\n message: {},\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData#params\",\"html\":\"\\n

TypedDataDefinition<TTypedData, TPrimaryType>\\nThe parameters defining the typed data and primary type

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData.mdx#params\",\"isPage\":false,\"text\":\"\\nTypedDataDefinition<TTypedData, TPrimaryType>\\nThe parameters defining the typed data and primary type\\n\",\"title\":\"params\",\"titles\":[\"signTypedData\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData#returns\",\"html\":\"\\n

Promise<Hex>\\nA promise that resolves to the signed data in hexadecimal format

\",\"id\":\"pages/reference/aa-sdk/core/classes/LocalAccountSigner/signTypedData.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Hex>\\nA promise that resolves to the signed data in hexadecimal format\",\"title\":\"Returns\",\"titles\":[\"signTypedData\"]}]}],[\"index.972dfdc0ad66576c6b9402da66666dba52857f9818f9b1d45a49bee31dd45a1e\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: TransactionMissingToParamError\\ndescription: Overview of the TransactionMissingToParamError method\\n---\\n\\n# TransactionMissingToParamError\\n\\nThrows an error indicating that a transaction is missing the `to` address in the request.\\n:::note\\n`TransactionMissingToParamError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { TransactionMissingToParamError } from \\\"@aa-sdk/core\\\";\\n```\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/TransactionMissingToParamError/constructor#transactionmissingtoparamerror\",\"html\":\"\\n

Throws an error indicating that a transaction is missing the to address in the request.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/TransactionMissingToParamError/constructor.mdx#transactionmissingtoparamerror\",\"isPage\":true,\"text\":\"\\nThrows an error indicating that a transaction is missing the to address in the request.\\nTransactionMissingToParamError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"TransactionMissingToParamError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/TransactionMissingToParamError/constructor#import\",\"html\":\"\\n
import { TransactionMissingToParamError } from "@aa-sdk/core";
\",\"id\":\"pages/reference/aa-sdk/core/classes/TransactionMissingToParamError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { TransactionMissingToParamError } from "@aa-sdk/core";\",\"title\":\"Import\",\"titles\":[\"TransactionMissingToParamError\"]}]}],[\"index.3263d1c94e35a15a4c4aec3137cbf5d5524b1462eefe94d607e38e956ac32f5f\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: UpgradeToAndCallNotSupportedError\\ndescription: Overview of the UpgradeToAndCallNotSupportedError method\\n---\\n\\n# UpgradeToAndCallNotSupportedError\\n\\nConstructs an error message indicating that `UpgradeToAndCall` is not supported by the specified account type.\\n:::note\\n`UpgradeToAndCallNotSupportedError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { UpgradeToAndCallNotSupportedError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### accountType\\n\\n`string`\\nThe type of account that does not support `UpgradeToAndCall`\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/UpgradeToAndCallNotSupportedError/constructor#upgradetoandcallnotsupportederror\",\"html\":\"\\n

Constructs an error message indicating that UpgradeToAndCall is not supported by the specified account type.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/UpgradeToAndCallNotSupportedError/constructor.mdx#upgradetoandcallnotsupportederror\",\"isPage\":true,\"text\":\"\\nConstructs an error message indicating that UpgradeToAndCall is not supported by the specified account type.\\nUpgradeToAndCallNotSupportedError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"UpgradeToAndCallNotSupportedError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/UpgradeToAndCallNotSupportedError/constructor#import\",\"html\":\"\\n
import { UpgradeToAndCallNotSupportedError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/UpgradeToAndCallNotSupportedError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { UpgradeToAndCallNotSupportedError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"UpgradeToAndCallNotSupportedError\"]},{\"href\":\"/reference/aa-sdk/core/classes/UpgradeToAndCallNotSupportedError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/UpgradeToAndCallNotSupportedError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"UpgradeToAndCallNotSupportedError\"]},{\"href\":\"/reference/aa-sdk/core/classes/UpgradeToAndCallNotSupportedError/constructor#accounttype\",\"html\":\"\\n

string\\nThe type of account that does not support UpgradeToAndCall

\",\"id\":\"pages/reference/aa-sdk/core/classes/UpgradeToAndCallNotSupportedError/constructor.mdx#accounttype\",\"isPage\":false,\"text\":\"\\nstring\\nThe type of account that does not support UpgradeToAndCall\",\"title\":\"accountType\",\"titles\":[\"UpgradeToAndCallNotSupportedError\",\"Parameters\"]}]}],[\"index.9c14711ff310bbb7ac85ee35eb69a40bc6f86bb06f334cd66ede2f88f9102ce8\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: UpgradesNotSupportedError\\ndescription: Overview of the UpgradesNotSupportedError method\\n---\\n\\n# UpgradesNotSupportedError\\n\\nError constructor for indicating that upgrades are not supported by the given account type.\\n:::note\\n`UpgradesNotSupportedError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { UpgradesNotSupportedError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### accountType\\n\\n`string`\\nThe type of account that does not support upgrades\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/UpgradesNotSupportedError/constructor#upgradesnotsupportederror\",\"html\":\"\\n

Error constructor for indicating that upgrades are not supported by the given account type.

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/UpgradesNotSupportedError/constructor.mdx#upgradesnotsupportederror\",\"isPage\":true,\"text\":\"\\nError constructor for indicating that upgrades are not supported by the given account type.\\nUpgradesNotSupportedError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"UpgradesNotSupportedError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/UpgradesNotSupportedError/constructor#import\",\"html\":\"\\n
import { UpgradesNotSupportedError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/UpgradesNotSupportedError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { UpgradesNotSupportedError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"UpgradesNotSupportedError\"]},{\"href\":\"/reference/aa-sdk/core/classes/UpgradesNotSupportedError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/UpgradesNotSupportedError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"UpgradesNotSupportedError\"]},{\"href\":\"/reference/aa-sdk/core/classes/UpgradesNotSupportedError/constructor#accounttype\",\"html\":\"\\n

string\\nThe type of account that does not support upgrades

\",\"id\":\"pages/reference/aa-sdk/core/classes/UpgradesNotSupportedError/constructor.mdx#accounttype\",\"isPage\":false,\"text\":\"\\nstring\\nThe type of account that does not support upgrades\",\"title\":\"accountType\",\"titles\":[\"UpgradesNotSupportedError\",\"Parameters\"]}]}],[\"index.544fcfeee079c1b31589850a8dad8b5d89ce034efa827963aa341d127617e3d5\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: WalletClientSigner\\ndescription: Overview of the WalletClientSigner method\\n---\\n\\n# WalletClientSigner\\n\\nInitializes a signer with a given wallet client and signer type.\\n\\n## Import\\n\\n```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\nimport { createWalletClient, custom } from \\\"viem\\\";\\nimport { mainnet } from \\\"viem/chains\\\";\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!),\\n});\\n\\nconst signer = new WalletClientSigner(client, \\\"wallet\\\");\\n```\\n\\n## Parameters\\n\\n### client\\n\\n`WalletClient`\\nThe wallet client to interact with\\n\\n### signerType\\n\\n`string`\\nThe type of signer; must be a valid signer type, otherwise an error will be thrown\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/constructor#walletclientsigner\",\"html\":\"\\n

Initializes a signer with a given wallet client and signer type.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/constructor.mdx#walletclientsigner\",\"isPage\":true,\"text\":\"\\nInitializes a signer with a given wallet client and signer type.\\n\",\"title\":\"WalletClientSigner\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/constructor#import\",\"html\":\"\\n
import { WalletClientSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { WalletClientSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"WalletClientSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/constructor#usage\",\"html\":\"\\n
import { WalletClientSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { mainnet } from "viem/chains";\\n \\nconst client = createWalletClient({\\n  chain: mainnet,\\n  transport: custom(window.ethereum!),\\n});\\n \\nconst signer = new WalletClientSigner(client, "wallet");
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/constructor.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { WalletClientSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { mainnet } from "viem/chains";\\n \\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!),\\n});\\n \\nconst signer = new WalletClientSigner(client, "wallet");\\n\",\"title\":\"Usage\",\"titles\":[\"WalletClientSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"WalletClientSigner\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/constructor#client\",\"html\":\"\\n

WalletClient\\nThe wallet client to interact with

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/constructor.mdx#client\",\"isPage\":false,\"text\":\"\\nWalletClient\\nThe wallet client to interact with\\n\",\"title\":\"client\",\"titles\":[\"WalletClientSigner\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/constructor#signertype\",\"html\":\"\\n

string\\nThe type of signer; must be a valid signer type, otherwise an error will be thrown

\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/constructor.mdx#signertype\",\"isPage\":false,\"text\":\"\\nstring\\nThe type of signer; must be a valid signer type, otherwise an error will be thrown\",\"title\":\"signerType\",\"titles\":[\"WalletClientSigner\",\"Parameters\"]}]}],[\"index.117eb0877422881e73b09bb75c084af9679e4e035bca8955d962a576a8b5cc02\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: signMessage\\ndescription: Overview of the signMessage method\\n---\\n\\n# signMessage\\n\\nSigns a message using the account's signing method.\\n\\n## Import\\n\\n```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\nimport { createWalletClient, custom } from \\\"viem\\\";\\nimport { mainnet } from \\\"viem/chains\\\";\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!),\\n});\\n\\nconst signer = new WalletClientSigner(client, \\\"wallet\\\");\\nconsole.log(await signer.signMessage(\\\"hello\\\"));\\n```\\n\\n## Parameters\\n\\n### message\\n\\n`string`\\nthe message string that needs to be signed\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to the signed message\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signMessage#signmessage\",\"html\":\"\\n

Signs a message using the account's signing method.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signMessage.mdx#signmessage\",\"isPage\":true,\"text\":\"\\nSigns a message using the account's signing method.\\n\",\"title\":\"signMessage\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signMessage#import\",\"html\":\"\\n
import { WalletClientSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signMessage.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { WalletClientSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signMessage#usage\",\"html\":\"\\n
import { WalletClientSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { mainnet } from "viem/chains";\\n \\nconst client = createWalletClient({\\n  chain: mainnet,\\n  transport: custom(window.ethereum!),\\n});\\n \\nconst signer = new WalletClientSigner(client, "wallet");\\nconsole.log(await signer.signMessage("hello"));
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signMessage.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { WalletClientSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { mainnet } from "viem/chains";\\n \\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!),\\n});\\n \\nconst signer = new WalletClientSigner(client, "wallet");\\nconsole.log(await signer.signMessage("hello"));\\n\",\"title\":\"Usage\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signMessage#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signMessage.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signMessage#message\",\"html\":\"\\n

string\\nthe message string that needs to be signed

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signMessage.mdx#message\",\"isPage\":false,\"text\":\"\\nstring\\nthe message string that needs to be signed\\n\",\"title\":\"message\",\"titles\":[\"signMessage\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signMessage#returns\",\"html\":\"\\n

Promise<string>\\na promise that resolves to the signed message

\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signMessage.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string>\\na promise that resolves to the signed message\",\"title\":\"Returns\",\"titles\":[\"signMessage\"]}]}],[\"index.c4edf46cf42627c1fad9ec7200d2b561c1ce9204a44cc4ee715cc76d821ae5bd\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: getAddress\\ndescription: Overview of the getAddress method\\n---\\n\\n# getAddress\\n\\nAsynchronously retrieves addresses from the inner object and returns the first address after applying the `getAddress` function.\\n\\n## Import\\n\\n```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\nimport { createWalletClient, custom } from \\\"viem\\\";\\nimport { mainnet } from \\\"viem/chains\\\";\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!),\\n});\\n\\nconst signer = new WalletClientSigner(client, \\\"wallet\\\");\\nconsole.log(await signer.getAddress());\\n```\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the first address after being processed by the `getAddress` function.\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/getAddress#getaddress\",\"html\":\"\\n

Asynchronously retrieves addresses from the inner object and returns the first address after applying the getAddress function.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/getAddress.mdx#getaddress\",\"isPage\":true,\"text\":\"\\nAsynchronously retrieves addresses from the inner object and returns the first address after applying the getAddress function.\\n\",\"title\":\"getAddress\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/getAddress#import\",\"html\":\"\\n
import { WalletClientSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/getAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { WalletClientSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"getAddress\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/getAddress#usage\",\"html\":\"\\n
import { WalletClientSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { mainnet } from "viem/chains";\\n \\nconst client = createWalletClient({\\n  chain: mainnet,\\n  transport: custom(window.ethereum!),\\n});\\n \\nconst signer = new WalletClientSigner(client, "wallet");\\nconsole.log(await signer.getAddress());
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/getAddress.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { WalletClientSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { mainnet } from "viem/chains";\\n \\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!),\\n});\\n \\nconst signer = new WalletClientSigner(client, "wallet");\\nconsole.log(await signer.getAddress());\\n\",\"title\":\"Usage\",\"titles\":[\"getAddress\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/getAddress#returns\",\"html\":\"\\n

Promise<string>\\nA promise that resolves to the first address after being processed by the getAddress function.

\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/getAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string>\\nA promise that resolves to the first address after being processed by the getAddress function.\",\"title\":\"Returns\",\"titles\":[\"getAddress\"]}]}],[\"index.57c061b9a7b511b7d7bf28baa08dd4cc1a018afc7030e4863a26cd86e6906896\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: WaitForUserOperationError\\ndescription: Overview of the WaitForUserOperationError method\\n---\\n\\n# WaitForUserOperationError\\n\\nundefined\\n:::note\\n`WaitForUserOperationError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { WaitForUserOperationError } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Parameters\\n\\n### request\\n\\n`UserOperationRequest`\\nthe user operation request that failed\\n\\n### error\\n\\n`Error`\\nthe underlying error that caused the failure\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor#waitforuseroperationerror\",\"html\":\"\\n

undefined

\\n\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor.mdx#waitforuseroperationerror\",\"isPage\":true,\"text\":\"\\nundefined\\nWaitForUserOperationError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"WaitForUserOperationError\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor#import\",\"html\":\"\\n
import { WaitForUserOperationError } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { WaitForUserOperationError } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"WaitForUserOperationError\"]},{\"href\":\"/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"WaitForUserOperationError\"]},{\"href\":\"/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor#request\",\"html\":\"\\n

UserOperationRequest\\nthe user operation request that failed

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor.mdx#request\",\"isPage\":false,\"text\":\"\\nUserOperationRequest\\nthe user operation request that failed\\n\",\"title\":\"request\",\"titles\":[\"WaitForUserOperationError\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor#error\",\"html\":\"\\n

Error\\nthe underlying error that caused the failure

\",\"id\":\"pages/reference/aa-sdk/core/classes/WaitForUserOperationError/constructor.mdx#error\",\"isPage\":false,\"text\":\"\\nError\\nthe underlying error that caused the failure\",\"title\":\"error\",\"titles\":[\"WaitForUserOperationError\",\"Parameters\"]}]}],[\"index.badfa8e7f951444e9ee27fa85451b87802e1aaac3a49900225930167dc0a4606\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: completeEmailAuth\\ndescription: Overview of the completeEmailAuth method\\n---\\n\\n# completeEmailAuth\\n\\nCompletes email auth for the user by injecting a credential bundle and retrieving the user information based on the provided organization ID. Emits events during the process.\\n\\n## Import\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n\\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: \\\"your-api-key\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"signer-iframe-container\\\",\\n },\\n});\\n\\nconst account = await client.completeEmailAuth({\\n orgId: \\\"user-org-id\\\",\\n bundle: \\\"bundle-from-email\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`{ bundle: string; orgId: string }`\\nThe configuration object for the authentication function containing the credential bundle to inject and the organization id associated with the user\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the authenticated user information\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth#completeemailauth\",\"html\":\"\\n

Completes email auth for the user by injecting a credential bundle and retrieving the user information based on the provided organization ID. Emits events during the process.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth.mdx#completeemailauth\",\"isPage\":true,\"text\":\"\\nCompletes email auth for the user by injecting a credential bundle and retrieving the user information based on the provided organization ID. Emits events during the process.\\n\",\"title\":\"completeEmailAuth\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth#import\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"completeEmailAuth\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth#usage\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n  connection: {\\n    apiKey: "your-api-key",\\n  },\\n  iframeConfig: {\\n    iframeContainerId: "signer-iframe-container",\\n  },\\n});\\n \\nconst account = await client.completeEmailAuth({\\n  orgId: "user-org-id",\\n  bundle: "bundle-from-email",\\n});
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: "your-api-key",\\n },\\n iframeConfig: {\\n iframeContainerId: "signer-iframe-container",\\n },\\n});\\n \\nconst account = await client.completeEmailAuth({\\n orgId: "user-org-id",\\n bundle: "bundle-from-email",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"completeEmailAuth\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"completeEmailAuth\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth#config\",\"html\":\"\\n

{ bundle: string; orgId: string }\\nThe configuration object for the authentication function containing the credential bundle to inject and the organization id associated with the user

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth.mdx#config\",\"isPage\":false,\"text\":\"\\n{ bundle: string; orgId: string }\\nThe configuration object for the authentication function containing the credential bundle to inject and the organization id associated with the user\\n\",\"title\":\"config\",\"titles\":[\"completeEmailAuth\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth#returns\",\"html\":\"\\n

Promise<User>\\nA promise that resolves to the authenticated user information

\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/completeEmailAuth.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<User>\\nA promise that resolves to the authenticated user information\",\"title\":\"Returns\",\"titles\":[\"completeEmailAuth\"]}]}],[\"index.4bf32bc1f3eff2753a79f9acee298490ee41add8f086a76af5079fe7531ec1d9\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: initEmailAuth\\ndescription: Overview of the initEmailAuth method\\n---\\n\\n# initEmailAuth\\n\\nBegin authenticating a user with their email and an expiration time for the authentication request. Initializes the iframe stamper to get the target public key.\\nThis method sends an email to the user to complete their login\\n\\n## Import\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n\\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: \\\"your-api-key\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"signer-iframe-container\\\",\\n },\\n});\\n\\nconst account = await client.initEmailAuth({ email: \\\"you@mail.com\\\" });\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`Omit`\\nThe parameters for email authentication, excluding the target public key\\n\\n## Returns\\n\\n`Promise`\\nThe response from the authentication request\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth#initemailauth\",\"html\":\"\\n

Begin authenticating a user with their email and an expiration time for the authentication request. Initializes the iframe stamper to get the target public key.\\nThis method sends an email to the user to complete their login

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth.mdx#initemailauth\",\"isPage\":true,\"text\":\"\\nBegin authenticating a user with their email and an expiration time for the authentication request. Initializes the iframe stamper to get the target public key.\\nThis method sends an email to the user to complete their login\\n\",\"title\":\"initEmailAuth\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth#import\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"initEmailAuth\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth#usage\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n  connection: {\\n    apiKey: "your-api-key",\\n  },\\n  iframeConfig: {\\n    iframeContainerId: "signer-iframe-container",\\n  },\\n});\\n \\nconst account = await client.initEmailAuth({ email: "you@mail.com" });
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: "your-api-key",\\n },\\n iframeConfig: {\\n iframeContainerId: "signer-iframe-container",\\n },\\n});\\n \\nconst account = await client.initEmailAuth({ email: "you@mail.com" });\\n\",\"title\":\"Usage\",\"titles\":[\"initEmailAuth\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"initEmailAuth\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth#params\",\"html\":\"\\n

Omit<EmailAuthParams, "targetPublicKey">\\nThe parameters for email authentication, excluding the target public key

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth.mdx#params\",\"isPage\":false,\"text\":\"\\nOmit<EmailAuthParams, "targetPublicKey">\\nThe parameters for email authentication, excluding the target public key\\n\",\"title\":\"params\",\"titles\":[\"initEmailAuth\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth#returns\",\"html\":\"\\n

Promise<any>\\nThe response from the authentication request

\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/initEmailAuth.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<any>\\nThe response from the authentication request\",\"title\":\"Returns\",\"titles\":[\"initEmailAuth\"]}]}],[\"index.5aa4b7e5dde138a98eb563ea7113087e7ff856d6497885287f31f49ec74fe63c\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: lookupUserWithPasskey\\ndescription: Overview of the lookupUserWithPasskey method\\n---\\n\\n# lookupUserWithPasskey\\n\\nAsynchronously handles the authentication process using WebAuthn Stamper. If a user is provided, sets the user and returns it. Otherwise, retrieves the current user and initializes the WebAuthn stamper.\\n\\n## Import\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n\\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: \\\"your-api-key\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"signer-iframe-container\\\",\\n },\\n});\\n\\nconst account = await client.lookupUserWithPasskey();\\n```\\n\\n## Parameters\\n\\n### user\\n\\n`User`\\nAn optional user object to authenticate\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the authenticated user object\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey#lookupuserwithpasskey\",\"html\":\"\\n

Asynchronously handles the authentication process using WebAuthn Stamper. If a user is provided, sets the user and returns it. Otherwise, retrieves the current user and initializes the WebAuthn stamper.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey.mdx#lookupuserwithpasskey\",\"isPage\":true,\"text\":\"\\nAsynchronously handles the authentication process using WebAuthn Stamper. If a user is provided, sets the user and returns it. Otherwise, retrieves the current user and initializes the WebAuthn stamper.\\n\",\"title\":\"lookupUserWithPasskey\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey#import\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"lookupUserWithPasskey\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey#usage\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n  connection: {\\n    apiKey: "your-api-key",\\n  },\\n  iframeConfig: {\\n    iframeContainerId: "signer-iframe-container",\\n  },\\n});\\n \\nconst account = await client.lookupUserWithPasskey();
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: "your-api-key",\\n },\\n iframeConfig: {\\n iframeContainerId: "signer-iframe-container",\\n },\\n});\\n \\nconst account = await client.lookupUserWithPasskey();\\n\",\"title\":\"Usage\",\"titles\":[\"lookupUserWithPasskey\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"lookupUserWithPasskey\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey#user\",\"html\":\"\\n

User\\nAn optional user object to authenticate

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey.mdx#user\",\"isPage\":false,\"text\":\"\\nUser\\nAn optional user object to authenticate\\n\",\"title\":\"user\",\"titles\":[\"lookupUserWithPasskey\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey#returns\",\"html\":\"\\n

Promise<User>\\nA promise that resolves to the authenticated user object

\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/lookupUserWithPasskey.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<User>\\nA promise that resolves to the authenticated user object\",\"title\":\"Returns\",\"titles\":[\"lookupUserWithPasskey\"]}]}],[\"index.f5bb31f7272352398308f7cb41c3ef55bb1913c9b254f3b70600852c507bfcd7\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: exportWallet\\ndescription: Overview of the exportWallet method\\n---\\n\\n# exportWallet\\n\\nUsed to export the wallet for a given user\\nIf the user is authenticated with an Email, this will return a seed phrase\\nIf the user is authenticated with a Passkey, this will return a private key\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\n// the params passed to this are different based on the specific signer\\nconst result = signer.exportWallet();\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`unknown`\\nexport wallet parameters\\n\\n## Returns\\n\\n`boolean`\\ntrue if the wallet was exported successfully\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet#exportwallet\",\"html\":\"\\n

Used to export the wallet for a given user\\nIf the user is authenticated with an Email, this will return a seed phrase\\nIf the user is authenticated with a Passkey, this will return a private key

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet.mdx#exportwallet\",\"isPage\":true,\"text\":\"\\nUsed to export the wallet for a given user\\nIf the user is authenticated with an Email, this will return a seed phrase\\nIf the user is authenticated with a Passkey, this will return a private key\\n\",\"title\":\"exportWallet\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"exportWallet\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\n// the params passed to this are different based on the specific signer\\nconst result = signer.exportWallet();
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\n// the params passed to this are different based on the specific signer\\nconst result = signer.exportWallet();\\n\",\"title\":\"Usage\",\"titles\":[\"exportWallet\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"exportWallet\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet#params\",\"html\":\"\\n

unknown\\nexport wallet parameters

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet.mdx#params\",\"isPage\":false,\"text\":\"\\nunknown\\nexport wallet parameters\\n\",\"title\":\"params\",\"titles\":[\"exportWallet\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet#returns\",\"html\":\"\\n

boolean\\ntrue if the wallet was exported successfully

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/exportWallet.mdx#returns\",\"isPage\":false,\"text\":\"\\nboolean\\ntrue if the wallet was exported successfully\",\"title\":\"Returns\",\"titles\":[\"exportWallet\"]}]}],[\"index.ce38b640951babea321af75e7e9035cd9f5b616b69e88a5e8c004c571f05f53c\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: disconnect\\ndescription: Overview of the disconnect method\\n---\\n\\n# disconnect\\n\\nAsynchronous function that clears the user and resets the iframe stamper.\\n\\n## Import\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n\\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: \\\"your-api-key\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"signer-iframe-container\\\",\\n },\\n});\\n\\nconst account = await client.disconnect();\\n```\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/disconnect#disconnect\",\"html\":\"\\n

Asynchronous function that clears the user and resets the iframe stamper.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/disconnect.mdx#disconnect\",\"isPage\":true,\"text\":\"\\nAsynchronous function that clears the user and resets the iframe stamper.\\n\",\"title\":\"disconnect\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/disconnect#import\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/disconnect.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"disconnect\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/disconnect#usage\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n  connection: {\\n    apiKey: "your-api-key",\\n  },\\n  iframeConfig: {\\n    iframeContainerId: "signer-iframe-container",\\n  },\\n});\\n \\nconst account = await client.disconnect();
\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/disconnect.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: "your-api-key",\\n },\\n iframeConfig: {\\n iframeContainerId: "signer-iframe-container",\\n },\\n});\\n \\nconst account = await client.disconnect();\",\"title\":\"Usage\",\"titles\":[\"disconnect\"]}]}],[\"index.2ebd6785085f5d7ce2d598cf16b6c38ceb2d348422117f575cfe157b07495a1d\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: AlchemyWebSigner\\ndescription: Overview of the AlchemyWebSigner method\\n---\\n\\n# AlchemyWebSigner\\n\\nInitializes an instance with the provided Alchemy signer parameters after parsing them with a schema.\\n:::note\\n`AlchemyWebSigner` extends `BaseAlchemySigner`, see the docs for BaseAlchemySigner for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`AlchemySignerParams`\\nThe parameters for the Alchemy signer, including the client and session configuration\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/AlchemyWebSigner/constructor#alchemywebsigner\",\"html\":\"\\n

Initializes an instance with the provided Alchemy signer parameters after parsing them with a schema.

\\n\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemyWebSigner/constructor.mdx#alchemywebsigner\",\"isPage\":true,\"text\":\"\\nInitializes an instance with the provided Alchemy signer parameters after parsing them with a schema.\\nAlchemyWebSigner extends BaseAlchemySigner, see the docs for BaseAlchemySigner for all supported methods.\\n\",\"title\":\"AlchemyWebSigner\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/AlchemyWebSigner/constructor#import\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemyWebSigner/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"AlchemyWebSigner\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemyWebSigner/constructor#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemyWebSigner/constructor.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"AlchemyWebSigner\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemyWebSigner/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemyWebSigner/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"AlchemyWebSigner\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemyWebSigner/constructor#params\",\"html\":\"\\n

AlchemySignerParams\\nThe parameters for the Alchemy signer, including the client and session configuration

\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemyWebSigner/constructor.mdx#params\",\"isPage\":false,\"text\":\"\\nAlchemySignerParams\\nThe parameters for the Alchemy signer, including the client and session configuration\",\"title\":\"params\",\"titles\":[\"AlchemyWebSigner\",\"Parameters\"]}]}],[\"index.ae41d7663388d0a0118a86b4a1ef86242402918557daa05cc992271c4c2e983b\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: signTypedData\\ndescription: Overview of the signTypedData method\\n---\\n\\n# signTypedData\\n\\nSigns the provided typed data using the account's private key.\\n\\n## Import\\n\\n```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\nimport { createWalletClient, custom } from \\\"viem\\\";\\nimport { mainnet } from \\\"viem/chains\\\";\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!),\\n});\\n\\nconst signer = new WalletClientSigner(client, \\\"wallet\\\");\\nconsole.log(\\n await signer.signTypedData({\\n types: {\\n Message: [{ name: \\\"content\\\", type: \\\"string\\\" }],\\n },\\n primaryType: \\\"Message\\\",\\n message: { content: \\\"Hello\\\" },\\n })\\n);\\n```\\n\\n## Parameters\\n\\n### typedData\\n\\n`TypedDataDefinition`\\nThe typed data to be signed\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to a hex string representing the signed data\\n\",\"document\":[{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData#signtypeddata\",\"html\":\"\\n

Signs the provided typed data using the account's private key.

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData.mdx#signtypeddata\",\"isPage\":true,\"text\":\"\\nSigns the provided typed data using the account's private key.\\n\",\"title\":\"signTypedData\",\"titles\":[]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData#import\",\"html\":\"\\n
import { WalletClientSigner } from "@aa-sdk/core";
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { WalletClientSigner } from "@aa-sdk/core";\\n\",\"title\":\"Import\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData#usage\",\"html\":\"\\n
import { WalletClientSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { mainnet } from "viem/chains";\\n \\nconst client = createWalletClient({\\n  chain: mainnet,\\n  transport: custom(window.ethereum!),\\n});\\n \\nconst signer = new WalletClientSigner(client, "wallet");\\nconsole.log(\\n  await signer.signTypedData({\\n    types: {\\n      Message: [{ name: "content", type: "string" }],\\n    },\\n    primaryType: "Message",\\n    message: { content: "Hello" },\\n  })\\n);
\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { WalletClientSigner } from "@aa-sdk/core";\\nimport { createWalletClient, custom } from "viem";\\nimport { mainnet } from "viem/chains";\\n \\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!),\\n});\\n \\nconst signer = new WalletClientSigner(client, "wallet");\\nconsole.log(\\n await signer.signTypedData({\\n types: {\\n Message: [{ name: "content", type: "string" }],\\n },\\n primaryType: "Message",\\n message: { content: "Hello" },\\n })\\n);\\n\",\"title\":\"Usage\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData#typeddata\",\"html\":\"\\n

TypedDataDefinition<TTypedData, TPrimaryType>\\nThe typed data to be signed

\\n\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData.mdx#typeddata\",\"isPage\":false,\"text\":\"\\nTypedDataDefinition<TTypedData, TPrimaryType>\\nThe typed data to be signed\\n\",\"title\":\"typedData\",\"titles\":[\"signTypedData\",\"Parameters\"]},{\"href\":\"/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData#returns\",\"html\":\"\\n

Promise<Hex>\\nA promise that resolves to a hex string representing the signed data

\",\"id\":\"pages/reference/aa-sdk/core/classes/WalletClientSigner/signTypedData.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Hex>\\nA promise that resolves to a hex string representing the signed data\",\"title\":\"Returns\",\"titles\":[\"signTypedData\"]}]}],[\"index.bd21c672b2a9deb7d2cbb275f0a073e51c57da83968e9a2c195788b6cb2a599d\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: AlchemySignerWebClient\\ndescription: Overview of the AlchemySignerWebClient method\\n---\\n\\n# AlchemySignerWebClient\\n\\nInitializes a new instance with the given parameters, setting up the connection, iframe configuration, and WebAuthn stamper.\\n:::note\\n`AlchemySignerWebClient` extends `BaseSignerClient`, see the docs for BaseSignerClient for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n\\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: \\\"your-api-key\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"signer-iframe-container\\\",\\n },\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`AlchemySignerClientParams`\\nthe parameters required to initialize the client\\n\\n### params.connection\\n\\n`ConnectionConfig`\\nThe connection details needed to connect to the service\\n\\n### params.iframeConfig\\n\\n`{ iframeElementId?: string; iframeContainerId: string }`\\nThe configuration details for setting up the iframe stamper\\n\\n### params.rpId\\n\\n`string`\\nThe relying party ID, defaulting to the current hostname if not provided\\n\\n### params.rootOrgId\\n\\n`string`\\nThe root organization ID\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor#alchemysignerwebclient\",\"html\":\"\\n

Initializes a new instance with the given parameters, setting up the connection, iframe configuration, and WebAuthn stamper.

\\n\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor.mdx#alchemysignerwebclient\",\"isPage\":true,\"text\":\"\\nInitializes a new instance with the given parameters, setting up the connection, iframe configuration, and WebAuthn stamper.\\nAlchemySignerWebClient extends BaseSignerClient, see the docs for BaseSignerClient for all supported methods.\\n\",\"title\":\"AlchemySignerWebClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor#import\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"AlchemySignerWebClient\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor#usage\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n  connection: {\\n    apiKey: "your-api-key",\\n  },\\n  iframeConfig: {\\n    iframeContainerId: "signer-iframe-container",\\n  },\\n});
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: "your-api-key",\\n },\\n iframeConfig: {\\n iframeContainerId: "signer-iframe-container",\\n },\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"AlchemySignerWebClient\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"AlchemySignerWebClient\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor#params\",\"html\":\"\\n

AlchemySignerClientParams\\nthe parameters required to initialize the client

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor.mdx#params\",\"isPage\":false,\"text\":\"\\nAlchemySignerClientParams\\nthe parameters required to initialize the client\\n\",\"title\":\"params\",\"titles\":[\"AlchemySignerWebClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor#paramsconnection\",\"html\":\"\\n

ConnectionConfig\\nThe connection details needed to connect to the service

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor.mdx#paramsconnection\",\"isPage\":false,\"text\":\"\\nConnectionConfig\\nThe connection details needed to connect to the service\\n\",\"title\":\"params.connection\",\"titles\":[\"AlchemySignerWebClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor#paramsiframeconfig\",\"html\":\"\\n

{ iframeElementId?: string; iframeContainerId: string }\\nThe configuration details for setting up the iframe stamper

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor.mdx#paramsiframeconfig\",\"isPage\":false,\"text\":\"\\n{ iframeElementId?: string; iframeContainerId: string }\\nThe configuration details for setting up the iframe stamper\\n\",\"title\":\"params.iframeConfig\",\"titles\":[\"AlchemySignerWebClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor#paramsrpid\",\"html\":\"\\n

string\\nThe relying party ID, defaulting to the current hostname if not provided

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor.mdx#paramsrpid\",\"isPage\":false,\"text\":\"\\nstring\\nThe relying party ID, defaulting to the current hostname if not provided\\n\",\"title\":\"params.rpId\",\"titles\":[\"AlchemySignerWebClient\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor#paramsrootorgid\",\"html\":\"\\n

string\\nThe root organization ID

\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/constructor.mdx#paramsrootorgid\",\"isPage\":false,\"text\":\"\\nstring\\nThe root organization ID\",\"title\":\"params.rootOrgId\",\"titles\":[\"AlchemySignerWebClient\",\"Parameters\"]}]}],[\"index.c4b89c2e1e9a7a51aeddff61645a7a64eac477e0c68eaf5fd8c4bd7bf8a3ca81\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: addPasskey\\ndescription: Overview of the addPasskey method\\n---\\n\\n# addPasskey\\n\\nAdds a passkey to the user's account\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.addPasskey();\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`CredentialCreationOptions | undefined`\\noptional parameters for the passkey creation\\n\\n## Returns\\n\\n`Promise`\\nan array of the authenticator ids added to the user\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey#addpasskey\",\"html\":\"\\n

Adds a passkey to the user's account

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey.mdx#addpasskey\",\"isPage\":true,\"text\":\"\\nAdds a passkey to the user's account\\n\",\"title\":\"addPasskey\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"addPasskey\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\nconst result = await signer.addPasskey();
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\nconst result = await signer.addPasskey();\\n\",\"title\":\"Usage\",\"titles\":[\"addPasskey\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"addPasskey\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey#params\",\"html\":\"\\n

CredentialCreationOptions | undefined\\noptional parameters for the passkey creation

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey.mdx#params\",\"isPage\":false,\"text\":\"\\nCredentialCreationOptions | undefined\\noptional parameters for the passkey creation\\n\",\"title\":\"params\",\"titles\":[\"addPasskey\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey#returns\",\"html\":\"\\n

Promise<string[]>\\nan array of the authenticator ids added to the user

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/addPasskey.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string[]>\\nan array of the authenticator ids added to the user\",\"title\":\"Returns\",\"titles\":[\"addPasskey\"]}]}],[\"index.edeb6266fa44d4bd3e5028d3404db0ee83615237b9c6dfac00a8e954420d7d3e\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: createAccount\\ndescription: Overview of the createAccount method\\n---\\n\\n# createAccount\\n\\nAuthenticates the user by either email or passkey account creation flow. Emits events during the process.\\n\\n## Import\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n\\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: \\\"your-api-key\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"signer-iframe-container\\\",\\n },\\n});\\n\\nconst account = await client.createAccount({\\n type: \\\"email\\\",\\n email: \\\"you@mail.com\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`CreateAccountParams`\\nThe parameters for creating an account, including the type (email or passkey) and additional details.\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves with the response object containing the account creation result.\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount#createaccount\",\"html\":\"\\n

Authenticates the user by either email or passkey account creation flow. Emits events during the process.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount.mdx#createaccount\",\"isPage\":true,\"text\":\"\\nAuthenticates the user by either email or passkey account creation flow. Emits events during the process.\\n\",\"title\":\"createAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount#import\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"createAccount\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount#usage\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n  connection: {\\n    apiKey: "your-api-key",\\n  },\\n  iframeConfig: {\\n    iframeContainerId: "signer-iframe-container",\\n  },\\n});\\n \\nconst account = await client.createAccount({\\n  type: "email",\\n  email: "you@mail.com",\\n});
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: "your-api-key",\\n },\\n iframeConfig: {\\n iframeContainerId: "signer-iframe-container",\\n },\\n});\\n \\nconst account = await client.createAccount({\\n type: "email",\\n email: "you@mail.com",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"createAccount\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"createAccount\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount#params\",\"html\":\"\\n

CreateAccountParams\\nThe parameters for creating an account, including the type (email or passkey) and additional details.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount.mdx#params\",\"isPage\":false,\"text\":\"\\nCreateAccountParams\\nThe parameters for creating an account, including the type (email or passkey) and additional details.\\n\",\"title\":\"params\",\"titles\":[\"createAccount\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount#returns\",\"html\":\"\\n

Promise<SignupResponse>\\nA promise that resolves with the response object containing the account creation result.

\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/createAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SignupResponse>\\nA promise that resolves with the response object containing the account creation result.\",\"title\":\"Returns\",\"titles\":[\"createAccount\"]}]}],[\"index.b6bfc81c453fdda49d36170f172f160a8d012da191622270972c5c0871afc6f1\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: BaseAlchemySigner\\ndescription: Overview of the BaseAlchemySigner method\\n---\\n\\n# BaseAlchemySigner\\n\\nInitializes an instance with the provided client and session configuration.\\nThis function sets up the internal store, initializes the session manager,\\nregisters listeners and initializes the session manager to manage session state.\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Parameters\\n\\n### param0\\n\\n`BaseAlchemySignerParams`\\nObject containing the client and session configuration\\n\\n### param0.client\\n\\n`TClient`\\nThe client instance to be used internally\\n\\n### param0.sessionConfig\\n\\n`SessionConfig`\\nConfiguration for managing sessions\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/constructor#basealchemysigner\",\"html\":\"\\n

Initializes an instance with the provided client and session configuration.\\nThis function sets up the internal store, initializes the session manager,\\nregisters listeners and initializes the session manager to manage session state.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/constructor.mdx#basealchemysigner\",\"isPage\":true,\"text\":\"\\nInitializes an instance with the provided client and session configuration.\\nThis function sets up the internal store, initializes the session manager,\\nregisters listeners and initializes the session manager to manage session state.\\n\",\"title\":\"BaseAlchemySigner\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/constructor#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"BaseAlchemySigner\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"BaseAlchemySigner\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/constructor#param0\",\"html\":\"\\n

BaseAlchemySignerParams<TClient>\\nObject containing the client and session configuration

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/constructor.mdx#param0\",\"isPage\":false,\"text\":\"\\nBaseAlchemySignerParams<TClient>\\nObject containing the client and session configuration\\n\",\"title\":\"param0\",\"titles\":[\"BaseAlchemySigner\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/constructor#param0client\",\"html\":\"\\n

TClient\\nThe client instance to be used internally

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/constructor.mdx#param0client\",\"isPage\":false,\"text\":\"\\nTClient\\nThe client instance to be used internally\\n\",\"title\":\"param0.client\",\"titles\":[\"BaseAlchemySigner\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/constructor#param0sessionconfig\",\"html\":\"\\n

SessionConfig\\nConfiguration for managing sessions

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/constructor.mdx#param0sessionconfig\",\"isPage\":false,\"text\":\"\\nSessionConfig\\nConfiguration for managing sessions\",\"title\":\"param0.sessionConfig\",\"titles\":[\"BaseAlchemySigner\",\"Parameters\"]}]}],[\"index.448dedb390a5d732368a93f56bb3d31176ab668128dee49436517d566523e9ca\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: disconnect\\ndescription: Overview of the disconnect method\\n---\\n\\n# disconnect\\n\\nClear a user session and log them out\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nawait signer.disconnect();\\n```\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves when the user is logged out\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/disconnect#disconnect\",\"html\":\"\\n

Clear a user session and log them out

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/disconnect.mdx#disconnect\",\"isPage\":true,\"text\":\"\\nClear a user session and log them out\\n\",\"title\":\"disconnect\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/disconnect#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/disconnect.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"disconnect\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/disconnect#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\nawait signer.disconnect();
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/disconnect.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\nawait signer.disconnect();\\n\",\"title\":\"Usage\",\"titles\":[\"disconnect\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/disconnect#returns\",\"html\":\"\\n

Promise<void>\\na promise that resolves when the user is logged out

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/disconnect.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<void>\\na promise that resolves when the user is logged out\",\"title\":\"Returns\",\"titles\":[\"disconnect\"]}]}],[\"index.463d2e3dddecdf5978405b7a3c05c9f46763d77a948a6fcfd2bcd2e2b16c12f1\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: exportWallet\\ndescription: Overview of the exportWallet method\\n---\\n\\n# exportWallet\\n\\nInitiates the export of a wallet by creating an iframe stamper and calling the appropriate export function.\\nThe export can be based on a seed phrase or a private key.\\n\\n## Import\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemySignerWebClient } from \\\"@account-kit/signer\\\";\\n\\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: \\\"your-api-key\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"signer-iframe-container\\\",\\n },\\n});\\n\\nconst account = await client.exportWallet({\\n iframeContainerId: \\\"export-iframe-container\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### config\\n\\n`ExportWalletParams`\\nThe parameters for exporting the wallet\\n\\n### config.iframeContainerId\\n\\n`string`\\nThe ID of the container element that will hold the iframe stamper\\n\\n### config.iframeElementId\\n\\n`string`\\nOptional ID for the iframe element\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves when the export process is complete\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet#exportwallet\",\"html\":\"\\n

Initiates the export of a wallet by creating an iframe stamper and calling the appropriate export function.\\nThe export can be based on a seed phrase or a private key.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet.mdx#exportwallet\",\"isPage\":true,\"text\":\"\\nInitiates the export of a wallet by creating an iframe stamper and calling the appropriate export function.\\nThe export can be based on a seed phrase or a private key.\\n\",\"title\":\"exportWallet\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet#import\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"exportWallet\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet#usage\",\"html\":\"\\n
import { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n  connection: {\\n    apiKey: "your-api-key",\\n  },\\n  iframeConfig: {\\n    iframeContainerId: "signer-iframe-container",\\n  },\\n});\\n \\nconst account = await client.exportWallet({\\n  iframeContainerId: "export-iframe-container",\\n});
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemySignerWebClient } from "@account-kit/signer";\\n \\nconst client = new AlchemySignerWebClient({\\n connection: {\\n apiKey: "your-api-key",\\n },\\n iframeConfig: {\\n iframeContainerId: "signer-iframe-container",\\n },\\n});\\n \\nconst account = await client.exportWallet({\\n iframeContainerId: "export-iframe-container",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"exportWallet\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"exportWallet\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet#config\",\"html\":\"\\n

ExportWalletParams\\nThe parameters for exporting the wallet

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet.mdx#config\",\"isPage\":false,\"text\":\"\\nExportWalletParams\\nThe parameters for exporting the wallet\\n\",\"title\":\"config\",\"titles\":[\"exportWallet\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet#configiframecontainerid\",\"html\":\"\\n

string\\nThe ID of the container element that will hold the iframe stamper

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet.mdx#configiframecontainerid\",\"isPage\":false,\"text\":\"\\nstring\\nThe ID of the container element that will hold the iframe stamper\\n\",\"title\":\"config.iframeContainerId\",\"titles\":[\"exportWallet\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet#configiframeelementid\",\"html\":\"\\n

string\\nOptional ID for the iframe element

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet.mdx#configiframeelementid\",\"isPage\":false,\"text\":\"\\nstring\\nOptional ID for the iframe element\\n\",\"title\":\"config.iframeElementId\",\"titles\":[\"exportWallet\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet#returns\",\"html\":\"\\n

Promise<void>\\nA promise that resolves when the export process is complete

\",\"id\":\"pages/reference/account-kit/signer/classes/AlchemySignerWebClient/exportWallet.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<void>\\nA promise that resolves when the export process is complete\",\"title\":\"Returns\",\"titles\":[\"exportWallet\"]}]}],[\"index.560e7ae2b632739fe3ce725a4efe6d067fe692927c2781a4d9e2924fb25c444b\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: authenticate\\ndescription: Overview of the authenticate method\\n---\\n\\n# authenticate\\n\\nAuthenticate a user with either an email or a passkey and create a session for that user\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`AuthParams`\\n\\n- undefined if passkey login, otherwise an object with email and bundle to resolve\\n\\n ## Returns\\n\\n `Promise`\\n the user that was authenticated\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate#authenticate\",\"html\":\"\\n

Authenticate a user with either an email or a passkey and create a session for that user

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate.mdx#authenticate\",\"isPage\":true,\"text\":\"\\nAuthenticate a user with either an email or a passkey and create a session for that user\\n\",\"title\":\"authenticate\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"authenticate\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\nconst result = await signer.authenticate({\\n  type: "email",\\n  email: "foo@mail.com",\\n});
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\nconst result = await signer.authenticate({\\n type: "email",\\n email: "foo@mail.com",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"authenticate\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"authenticate\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate#params\",\"html\":\"\\n

AuthParams

\\n
    \\n
  • \\n

    undefined if passkey login, otherwise an object with email and bundle to resolve

    \\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate.mdx#params\",\"isPage\":false,\"text\":\"\\nAuthParams\\n\\n\\nundefined if passkey login, otherwise an object with email and bundle to resolve\\n\",\"title\":\"params\",\"titles\":[\"authenticate\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate#returns\",\"html\":\"\\n

    Promise<User>\\nthe user that was authenticated

    \\n
  • \\n
\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/authenticate.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<User>\\nthe user that was authenticated\\n\\n\",\"title\":\"Returns\",\"titles\":[\"authenticate\"]}]}],[\"index.d13e30c5fb79993c6aef04ee2e978e89ca5fa8f97759b585d53f46f96e0dbf24\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: getAuthDetails\\ndescription: Overview of the getAuthDetails method\\n---\\n\\n# getAuthDetails\\n\\nGets the current logged in user\\nIf a user has an ongoing session, it will use that session and\\ntry to authenticate\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\n// throws if not logged in\\nconst user = await signer.getAuthDetails();\\n```\\n\\n## Returns\\n\\n`Promise`\\nthe current user\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getAuthDetails#getauthdetails\",\"html\":\"\\n

Gets the current logged in user\\nIf a user has an ongoing session, it will use that session and\\ntry to authenticate

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getAuthDetails.mdx#getauthdetails\",\"isPage\":true,\"text\":\"\\nGets the current logged in user\\nIf a user has an ongoing session, it will use that session and\\ntry to authenticate\\n\",\"title\":\"getAuthDetails\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getAuthDetails#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getAuthDetails.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"getAuthDetails\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getAuthDetails#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\n// throws if not logged in\\nconst user = await signer.getAuthDetails();
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getAuthDetails.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\n// throws if not logged in\\nconst user = await signer.getAuthDetails();\\n\",\"title\":\"Usage\",\"titles\":[\"getAuthDetails\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getAuthDetails#returns\",\"html\":\"\\n

Promise<User>\\nthe current user

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getAuthDetails.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<User>\\nthe current user\",\"title\":\"Returns\",\"titles\":[\"getAuthDetails\"]}]}],[\"index.db199cdd63f04b4475bf4b7ebc0c51e889602fc74bd4668ac192b21484b36a27\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getAddress\\ndescription: Overview of the getAddress method\\n---\\n\\n# getAddress\\n\\nRetrieves the address of the current user by calling the `whoami` method on `this.inner`.\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the address of the current user.\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getAddress#getaddress\",\"html\":\"\\n

Retrieves the address of the current user by calling the whoami method on this.inner.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getAddress.mdx#getaddress\",\"isPage\":true,\"text\":\"\\nRetrieves the address of the current user by calling the whoami method on this.inner.\\n\",\"title\":\"getAddress\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getAddress#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getAddress.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"getAddress\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getAddress#returns\",\"html\":\"\\n

Promise<string>\\nA promise that resolves to the address of the current user.

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getAddress.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string>\\nA promise that resolves to the address of the current user.\",\"title\":\"Returns\",\"titles\":[\"getAddress\"]}]}],[\"index.e730c0090fe868dcbce1d536f1b43590d3350e180652f5f01b8d841392b0888e\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: on\\ndescription: Overview of the on method\\n---\\n\\n# on\\n\\nAllows you to subscribe to events emitted by the signer\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Parameters\\n\\n### event\\n\\n`AlchemySignerEvent`\\nthe event to subscribe to\\n\\n### listener\\n\\n`AlchemySignerEvents[AlchemySignerEvent]`\\nthe function to run when the event is emitted\\n\\n## Returns\\n\\n`() => void`\\na function to remove the listener\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/on#on\",\"html\":\"\\n

Allows you to subscribe to events emitted by the signer

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/on.mdx#on\",\"isPage\":true,\"text\":\"\\nAllows you to subscribe to events emitted by the signer\\n\",\"title\":\"on\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/on#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/on.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"on\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/on#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/on.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"on\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/on#event\",\"html\":\"\\n

AlchemySignerEvent\\nthe event to subscribe to

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/on.mdx#event\",\"isPage\":false,\"text\":\"\\nAlchemySignerEvent\\nthe event to subscribe to\\n\",\"title\":\"event\",\"titles\":[\"on\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/on#listener\",\"html\":\"\\n

AlchemySignerEvents[AlchemySignerEvent]\\nthe function to run when the event is emitted

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/on.mdx#listener\",\"isPage\":false,\"text\":\"\\nAlchemySignerEvents[AlchemySignerEvent]\\nthe function to run when the event is emitted\\n\",\"title\":\"listener\",\"titles\":[\"on\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/on#returns\",\"html\":\"\\n

() => void\\na function to remove the listener

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/on.mdx#returns\",\"isPage\":false,\"text\":\"\\n() => void\\na function to remove the listener\",\"title\":\"Returns\",\"titles\":[\"on\"]}]}],[\"index.800a4375d29b5d301f5daf8aed7fe405598ce83dcba3f785d1b014e828b9a04a\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: signTransaction\\ndescription: Overview of the signTransaction method\\n---\\n\\n# signTransaction\\n\\nSerializes a transaction, signs it with a raw message, and then returns the serialized transaction with the signature.\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst tx = await signer.signTransaction({\\n to: \\\"0x1234\\\",\\n value: \\\"0x1234\\\",\\n data: \\\"0x1234\\\",\\n});\\n```\\n\\n## Parameters\\n\\n### tx\\n\\n`Transaction`\\nthe transaction to be serialized and signed\\n\\n### args\\n\\n`{serializer?: SerializeTransactionFn}`\\noptions for serialization\\n\\n### args.serializer\\n\\n`() => Hex`\\nan optional serializer function. If not provided, the default `serializeTransaction` function will be used\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to the serialized transaction with the signature\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction#signtransaction\",\"html\":\"\\n

Serializes a transaction, signs it with a raw message, and then returns the serialized transaction with the signature.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction.mdx#signtransaction\",\"isPage\":true,\"text\":\"\\nSerializes a transaction, signs it with a raw message, and then returns the serialized transaction with the signature.\\n\",\"title\":\"signTransaction\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"signTransaction\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\nconst tx = await signer.signTransaction({\\n  to: "0x1234",\\n  value: "0x1234",\\n  data: "0x1234",\\n});
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\nconst tx = await signer.signTransaction({\\n to: "0x1234",\\n value: "0x1234",\\n data: "0x1234",\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"signTransaction\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signTransaction\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction#tx\",\"html\":\"\\n

Transaction\\nthe transaction to be serialized and signed

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction.mdx#tx\",\"isPage\":false,\"text\":\"\\nTransaction\\nthe transaction to be serialized and signed\\n\",\"title\":\"tx\",\"titles\":[\"signTransaction\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction#args\",\"html\":\"\\n

{serializer?: SerializeTransactionFn}\\noptions for serialization

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction.mdx#args\",\"isPage\":false,\"text\":\"\\n{serializer?: SerializeTransactionFn}\\noptions for serialization\\n\",\"title\":\"args\",\"titles\":[\"signTransaction\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction#argsserializer\",\"html\":\"\\n

() => Hex\\nan optional serializer function. If not provided, the default serializeTransaction function will be used

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction.mdx#argsserializer\",\"isPage\":false,\"text\":\"\\n() => Hex\\nan optional serializer function. If not provided, the default serializeTransaction function will be used\\n\",\"title\":\"args.serializer\",\"titles\":[\"signTransaction\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction#returns\",\"html\":\"\\n

Promise<string>\\na promise that resolves to the serialized transaction with the signature

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTransaction.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string>\\na promise that resolves to the serialized transaction with the signature\",\"title\":\"Returns\",\"titles\":[\"signTransaction\"]}]}],[\"index.6f80ccd3a058ac69c695f2564a27da072f5312688d1ac5d3bd24bf92de57df80\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: signMessage\\ndescription: Overview of the signMessage method\\n---\\n\\n# signMessage\\n\\nSigns a raw message after hashing it.\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst signature = await signer.signMessage(\\\"Hello, world!\\\");\\n```\\n\\n## Parameters\\n\\n### msg\\n\\n`string`\\nthe message to be hashed and then signed\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to the signed message\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage#signmessage\",\"html\":\"\\n

Signs a raw message after hashing it.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage.mdx#signmessage\",\"isPage\":true,\"text\":\"\\nSigns a raw message after hashing it.\\n\",\"title\":\"signMessage\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\nconst signature = await signer.signMessage("Hello, world!");
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\nconst signature = await signer.signMessage("Hello, world!");\\n\",\"title\":\"Usage\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signMessage\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage#msg\",\"html\":\"\\n

string\\nthe message to be hashed and then signed

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage.mdx#msg\",\"isPage\":false,\"text\":\"\\nstring\\nthe message to be hashed and then signed\\n\",\"title\":\"msg\",\"titles\":[\"signMessage\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage#returns\",\"html\":\"\\n

Promise<string>\\na promise that resolves to the signed message

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signMessage.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string>\\na promise that resolves to the signed message\",\"title\":\"Returns\",\"titles\":[\"signMessage\"]}]}],[\"index.c5590d25f77cacdb4201d30cca2e4403a32cc6935c912f828bc25a0a9bde8961\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: getUser\\ndescription: Overview of the getUser method\\n---\\n\\n# getUser\\n\\nUnauthenticated call to look up a user's organizationId by email\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.getUser(\\\"foo@mail.com\\\");\\n```\\n\\n## Parameters\\n\\n### email\\n\\n`string`\\nthe email to lookup\\n\\n## Returns\\n\\n`Promise<{orgId: string}>`\\nthe organization id for the user if they exist\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getUser#getuser\",\"html\":\"\\n

Unauthenticated call to look up a user's organizationId by email

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getUser.mdx#getuser\",\"isPage\":true,\"text\":\"\\nUnauthenticated call to look up a user's organizationId by email\\n\",\"title\":\"getUser\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getUser#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getUser.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"getUser\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getUser#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\nconst result = await signer.getUser("foo@mail.com");
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getUser.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\nconst result = await signer.getUser("foo@mail.com");\\n\",\"title\":\"Usage\",\"titles\":[\"getUser\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getUser#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getUser.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"getUser\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getUser#email\",\"html\":\"\\n

string\\nthe email to lookup

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getUser.mdx#email\",\"isPage\":false,\"text\":\"\\nstring\\nthe email to lookup\\n\",\"title\":\"email\",\"titles\":[\"getUser\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/getUser#returns\",\"html\":\"\\n

Promise<{orgId: string}>\\nthe organization id for the user if they exist

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/getUser.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<{orgId: string}>\\nthe organization id for the user if they exist\",\"title\":\"Returns\",\"titles\":[\"getUser\"]}]}],[\"index.d782e8564fa100a28a97db975529a762ba38e426bed224b31063fd13480f1512\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: signTypedData\\ndescription: Overview of the signTypedData method\\n---\\n\\n# signTypedData\\n\\nSigns a typed message by first hashing it and then signing the hashed message using the `signRawMessage` method.\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst signature = await signer.signTypedData({\\n domain: {},\\n types: {},\\n primaryType: \\\"\\\",\\n message: {},\\n});\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`TypedDataDefinition`\\nThe parameters for the typed message to be hashed and signed\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the signed message\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData#signtypeddata\",\"html\":\"\\n

Signs a typed message by first hashing it and then signing the hashed message using the signRawMessage method.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData.mdx#signtypeddata\",\"isPage\":true,\"text\":\"\\nSigns a typed message by first hashing it and then signing the hashed message using the signRawMessage method.\\n\",\"title\":\"signTypedData\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\nconst signature = await signer.signTypedData({\\n  domain: {},\\n  types: {},\\n  primaryType: "",\\n  message: {},\\n});
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\nconst signature = await signer.signTypedData({\\n domain: {},\\n types: {},\\n primaryType: "",\\n message: {},\\n});\\n\",\"title\":\"Usage\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signTypedData\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData#params\",\"html\":\"\\n

TypedDataDefinition<TTypedData, TPrimaryType>\\nThe parameters for the typed message to be hashed and signed

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData.mdx#params\",\"isPage\":false,\"text\":\"\\nTypedDataDefinition<TTypedData, TPrimaryType>\\nThe parameters for the typed message to be hashed and signed\\n\",\"title\":\"params\",\"titles\":[\"signTypedData\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData#returns\",\"html\":\"\\n

Promise<any>\\nA promise that resolves to the signed message

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/signTypedData.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<any>\\nA promise that resolves to the signed message\",\"title\":\"Returns\",\"titles\":[\"signTypedData\"]}]}],[\"index.82b3f11d536f15aca6dd6253226e2523a4b63623910f11bd23a984887874cbd2\",{\"mdx\":\"---\\n# This file is autogenerated\\n\\ntitle: toViemAccount\\ndescription: Overview of the toViemAccount method\\n---\\n\\n# toViemAccount\\n\\nThis method lets you adapt your AlchemySigner to a viem LocalAccount, which\\nwill let you use the signer as an EOA directly.\\n\\n## Import\\n\\n```ts\\nimport { BaseAlchemySigner } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Usage\\n\\n```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst account = signer.toViemAccount();\\n```\\n\\n## Returns\\n\\n`LocalAccount`\\na LocalAccount object that can be used with viem's wallet client\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/toViemAccount#toviemaccount\",\"html\":\"\\n

This method lets you adapt your AlchemySigner to a viem LocalAccount, which\\nwill let you use the signer as an EOA directly.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/toViemAccount.mdx#toviemaccount\",\"isPage\":true,\"text\":\"\\nThis method lets you adapt your AlchemySigner to a viem LocalAccount, which\\nwill let you use the signer as an EOA directly.\\n\",\"title\":\"toViemAccount\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/toViemAccount#import\",\"html\":\"\\n
import { BaseAlchemySigner } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/toViemAccount.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseAlchemySigner } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"toViemAccount\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/toViemAccount#usage\",\"html\":\"\\n
import { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n  client: {\\n    connection: {\\n      rpcUrl: "/api/rpc",\\n    },\\n    iframeConfig: {\\n      iframeContainerId: "alchemy-signer-iframe-container",\\n    },\\n  },\\n});\\n \\nconst account = signer.toViemAccount();
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/toViemAccount.mdx#usage\",\"isPage\":false,\"text\":\"\\nimport { AlchemyWebSigner } from "@account-kit/signer";\\n \\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: "/api/rpc",\\n },\\n iframeConfig: {\\n iframeContainerId: "alchemy-signer-iframe-container",\\n },\\n },\\n});\\n \\nconst account = signer.toViemAccount();\\n\",\"title\":\"Usage\",\"titles\":[\"toViemAccount\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseAlchemySigner/toViemAccount#returns\",\"html\":\"\\n

LocalAccount\\na LocalAccount object that can be used with viem's wallet client

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseAlchemySigner/toViemAccount.mdx#returns\",\"isPage\":false,\"text\":\"\\nLocalAccount\\na LocalAccount object that can be used with viem's wallet client\",\"title\":\"Returns\",\"titles\":[\"toViemAccount\"]}]}],[\"index.b50c3615c5aa53a486882ac7ff4cc8eae690263411ef5b5f4d0a4eb10d52373c\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: BaseSignerClient\\ndescription: Overview of the BaseSignerClient method\\n---\\n\\n# BaseSignerClient\\n\\nCreate a new instance of the Alchemy Signer client\\n\\n## Import\\n\\n```ts\\nimport { BaseSignerClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Parameters\\n\\n### params\\n\\n`BaseSignerClientParams`\\nthe parameters required to create the client\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/constructor#basesignerclient\",\"html\":\"\\n

Create a new instance of the Alchemy Signer client

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/constructor.mdx#basesignerclient\",\"isPage\":true,\"text\":\"\\nCreate a new instance of the Alchemy Signer client\\n\",\"title\":\"BaseSignerClient\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/constructor#import\",\"html\":\"\\n
import { BaseSignerClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseSignerClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"BaseSignerClient\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"BaseSignerClient\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/constructor#params\",\"html\":\"\\n

BaseSignerClientParams\\nthe parameters required to create the client

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/constructor.mdx#params\",\"isPage\":false,\"text\":\"\\nBaseSignerClientParams\\nthe parameters required to create the client\",\"title\":\"params\",\"titles\":[\"BaseSignerClient\",\"Parameters\"]}]}],[\"index.6a22e036bfd88ed43d4d0479baf093247d4eee23ad63d5cca48c1d42608980e1\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: addPasskey\\ndescription: Overview of the addPasskey method\\n---\\n\\n# addPasskey\\n\\nHandles the creation of authenticators using WebAuthn attestation and the provided options. Requires the user to be authenticated.\\n\\n## Import\\n\\n```ts\\nimport { BaseSignerClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Parameters\\n\\n### options\\n\\n`CredentialCreationOptions`\\nThe options used to create the WebAuthn attestation\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to an array of authenticator IDs\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/addPasskey#addpasskey\",\"html\":\"\\n

Handles the creation of authenticators using WebAuthn attestation and the provided options. Requires the user to be authenticated.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/addPasskey.mdx#addpasskey\",\"isPage\":true,\"text\":\"\\nHandles the creation of authenticators using WebAuthn attestation and the provided options. Requires the user to be authenticated.\\n\",\"title\":\"addPasskey\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/addPasskey#import\",\"html\":\"\\n
import { BaseSignerClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/addPasskey.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseSignerClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"addPasskey\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/addPasskey#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/addPasskey.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"addPasskey\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/addPasskey#options\",\"html\":\"\\n

CredentialCreationOptions\\nThe options used to create the WebAuthn attestation

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/addPasskey.mdx#options\",\"isPage\":false,\"text\":\"\\nCredentialCreationOptions\\nThe options used to create the WebAuthn attestation\\n\",\"title\":\"options\",\"titles\":[\"addPasskey\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/addPasskey#returns\",\"html\":\"\\n

Promise<string[]>\\nA promise that resolves to an array of authenticator IDs

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/addPasskey.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<string[]>\\nA promise that resolves to an array of authenticator IDs\",\"title\":\"Returns\",\"titles\":[\"addPasskey\"]}]}],[\"index.253e064517d1c93806f5bd195cd55820288a323f123a127f4f82ee0d538e61a3\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: lookupUserByEmail\\ndescription: Overview of the lookupUserByEmail method\\n---\\n\\n# lookupUserByEmail\\n\\nLooks up information based on an email address.\\n\\n## Import\\n\\n```ts\\nimport { BaseSignerClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Parameters\\n\\n### email\\n\\n`string`\\nthe email address to look up\\n\\n## Returns\\n\\n`Promise`\\nthe result of the lookup request\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail#lookupuserbyemail\",\"html\":\"\\n

Looks up information based on an email address.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail.mdx#lookupuserbyemail\",\"isPage\":true,\"text\":\"\\nLooks up information based on an email address.\\n\",\"title\":\"lookupUserByEmail\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail#import\",\"html\":\"\\n
import { BaseSignerClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseSignerClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"lookupUserByEmail\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"lookupUserByEmail\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail#email\",\"html\":\"\\n

string\\nthe email address to look up

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail.mdx#email\",\"isPage\":false,\"text\":\"\\nstring\\nthe email address to look up\\n\",\"title\":\"email\",\"titles\":[\"lookupUserByEmail\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail#returns\",\"html\":\"\\n

Promise<any>\\nthe result of the lookup request

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/lookupUserByEmail.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<any>\\nthe result of the lookup request\",\"title\":\"Returns\",\"titles\":[\"lookupUserByEmail\"]}]}],[\"index.457acd6e0e40e1c91bbb72cddbe87fae1d0f0cdb91873fd284e693307f45ead9\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: on\\ndescription: Overview of the on method\\n---\\n\\n# on\\n\\nListen to events emitted by the client\\n\\n## Import\\n\\n```ts\\nimport { BaseSignerClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Parameters\\n\\n### event\\n\\n`AlchemySignerClientEvent`\\nthe event you want to listen to\\n\\n### listener\\n\\n`AlchemySignerClientEvents[AlchemySignerClientEvent]`\\nthe callback function to execute when an event is fired\\n\\n## Returns\\n\\n`() => void`\\na function that will remove the listener when called\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/on#on\",\"html\":\"\\n

Listen to events emitted by the client

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/on.mdx#on\",\"isPage\":true,\"text\":\"\\nListen to events emitted by the client\\n\",\"title\":\"on\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/on#import\",\"html\":\"\\n
import { BaseSignerClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/on.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseSignerClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"on\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/on#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/on.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"on\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/on#event\",\"html\":\"\\n

AlchemySignerClientEvent\\nthe event you want to listen to

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/on.mdx#event\",\"isPage\":false,\"text\":\"\\nAlchemySignerClientEvent\\nthe event you want to listen to\\n\",\"title\":\"event\",\"titles\":[\"on\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/on#listener\",\"html\":\"\\n

AlchemySignerClientEvents[AlchemySignerClientEvent]\\nthe callback function to execute when an event is fired

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/on.mdx#listener\",\"isPage\":false,\"text\":\"\\nAlchemySignerClientEvents[AlchemySignerClientEvent]\\nthe callback function to execute when an event is fired\\n\",\"title\":\"listener\",\"titles\":[\"on\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/on#returns\",\"html\":\"\\n

() => void\\na function that will remove the listener when called

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/on.mdx#returns\",\"isPage\":false,\"text\":\"\\n() => void\\na function that will remove the listener when called\",\"title\":\"Returns\",\"titles\":[\"on\"]}]}],[\"index.2ea32d6c3ddef8428843bdaaa953173a05bc2f9b036bc7126e304d135a823b25\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: signRawMessage\\ndescription: Overview of the signRawMessage method\\n---\\n\\n# signRawMessage\\n\\nThis will sign a message with the user's private key, without doing any transformations on the message.\\nFor SignMessage or SignTypedData, the caller should hash the message before calling this method and pass\\nthat result here.\\n\\n## Import\\n\\n```ts\\nimport { BaseSignerClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Parameters\\n\\n### msg\\n\\n`Hex`\\nthe hex representation of the bytes to sign\\n\\n## Returns\\n\\n`Promise`\\nthe signature over the raw hex\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage#signrawmessage\",\"html\":\"\\n

This will sign a message with the user's private key, without doing any transformations on the message.\\nFor SignMessage or SignTypedData, the caller should hash the message before calling this method and pass\\nthat result here.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage.mdx#signrawmessage\",\"isPage\":true,\"text\":\"\\nThis will sign a message with the user's private key, without doing any transformations on the message.\\nFor SignMessage or SignTypedData, the caller should hash the message before calling this method and pass\\nthat result here.\\n\",\"title\":\"signRawMessage\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage#import\",\"html\":\"\\n
import { BaseSignerClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseSignerClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"signRawMessage\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"signRawMessage\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage#msg\",\"html\":\"\\n

Hex\\nthe hex representation of the bytes to sign

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage.mdx#msg\",\"isPage\":false,\"text\":\"\\nHex\\nthe hex representation of the bytes to sign\\n\",\"title\":\"msg\",\"titles\":[\"signRawMessage\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage#returns\",\"html\":\"\\n

Promise<Hex>\\nthe signature over the raw hex

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/signRawMessage.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<Hex>\\nthe signature over the raw hex\",\"title\":\"Returns\",\"titles\":[\"signRawMessage\"]}]}],[\"index.0d7c99b7cfb85a47311fdfd1e5d788fafe5904ba624846b6106e6e3d35cf808f\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: NoAlchemyAccountContextError\\ndescription: Overview of the NoAlchemyAccountContextError method\\n---\\n\\n# NoAlchemyAccountContextError\\n\\nConstructs an error message indicating that a specific hook must be used within an AlchemyAccountProvider.\\n:::note\\n`NoAlchemyAccountContextError` extends `BaseError`, see the docs for BaseError for all supported methods.\\n:::\\n\\n## Import\\n\\n```ts\\nimport { NoAlchemyAccountContextError } from \\\"@account-kit/react\\\";\\n```\\n\\n## Parameters\\n\\n### hookName\\n\\n`string`\\nThe name of the hook that must be used within the AlchemyAccountProvider\\n\",\"document\":[{\"href\":\"/reference/account-kit/react/classes/NoAlchemyAccountContextError/constructor#noalchemyaccountcontexterror\",\"html\":\"\\n

Constructs an error message indicating that a specific hook must be used within an AlchemyAccountProvider.

\\n\\n\",\"id\":\"pages/reference/account-kit/react/classes/NoAlchemyAccountContextError/constructor.mdx#noalchemyaccountcontexterror\",\"isPage\":true,\"text\":\"\\nConstructs an error message indicating that a specific hook must be used within an AlchemyAccountProvider.\\nNoAlchemyAccountContextError extends BaseError, see the docs for BaseError for all supported methods.\\n\",\"title\":\"NoAlchemyAccountContextError\",\"titles\":[]},{\"href\":\"/reference/account-kit/react/classes/NoAlchemyAccountContextError/constructor#import\",\"html\":\"\\n
import { NoAlchemyAccountContextError } from "@account-kit/react";
\\n\",\"id\":\"pages/reference/account-kit/react/classes/NoAlchemyAccountContextError/constructor.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { NoAlchemyAccountContextError } from "@account-kit/react";\\n\",\"title\":\"Import\",\"titles\":[\"NoAlchemyAccountContextError\"]},{\"href\":\"/reference/account-kit/react/classes/NoAlchemyAccountContextError/constructor#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/react/classes/NoAlchemyAccountContextError/constructor.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"NoAlchemyAccountContextError\"]},{\"href\":\"/reference/account-kit/react/classes/NoAlchemyAccountContextError/constructor#hookname\",\"html\":\"\\n

string\\nThe name of the hook that must be used within the AlchemyAccountProvider

\",\"id\":\"pages/reference/account-kit/react/classes/NoAlchemyAccountContextError/constructor.mdx#hookname\",\"isPage\":false,\"text\":\"\\nstring\\nThe name of the hook that must be used within the AlchemyAccountProvider\",\"title\":\"hookName\",\"titles\":[\"NoAlchemyAccountContextError\",\"Parameters\"]}]}],[\"index.e52d6d6d4c928e2587ea0b3fbf7ef855ecb4ebc5727709c5eaed962bf0dbc645\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: whoami\\ndescription: Overview of the whoami method\\n---\\n\\n# whoami\\n\\nRetrieves the current user or fetches the user information if not already available.\\n\\n## Import\\n\\n```ts\\nimport { BaseSignerClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Parameters\\n\\n### orgId\\n\\n`string`\\noptional organization ID, defaults to the user's organization ID\\n\\n## Returns\\n\\n`Promise`\\nA promise that resolves to the user object\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/whoami#whoami\",\"html\":\"\\n

Retrieves the current user or fetches the user information if not already available.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/whoami.mdx#whoami\",\"isPage\":true,\"text\":\"\\nRetrieves the current user or fetches the user information if not already available.\\n\",\"title\":\"whoami\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/whoami#import\",\"html\":\"\\n
import { BaseSignerClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/whoami.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseSignerClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"whoami\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/whoami#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/whoami.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"whoami\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/whoami#orgid\",\"html\":\"\\n

string\\noptional organization ID, defaults to the user's organization ID

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/whoami.mdx#orgid\",\"isPage\":false,\"text\":\"\\nstring\\noptional organization ID, defaults to the user's organization ID\\n\",\"title\":\"orgId\",\"titles\":[\"whoami\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/whoami#returns\",\"html\":\"\\n

Promise<User>\\nA promise that resolves to the user object

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/whoami.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<User>\\nA promise that resolves to the user object\",\"title\":\"Returns\",\"titles\":[\"whoami\"]}]}],[\"index.ae7d2d12a0890d2596fbf766073fbc695484cc2de20805674aad4b0a3dd2d07b\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: request\\ndescription: Overview of the request method\\n---\\n\\n# request\\n\\nSends a POST request to the given signer route with the specified body and returns the response.\\nNot intended to be used directly, use the specific methods instead on the client instead.\\n\\n## Import\\n\\n```ts\\nimport { BaseSignerClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Parameters\\n\\n### route\\n\\n`SignerRoutes`\\nThe route to which the request should be sent\\n\\n### body\\n\\n`SignerBody`\\nThe request body containing the data to be sent\\n\\n## Returns\\n\\n`Promise>`\\nA promise that resolves to the response from the signer\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/request#request\",\"html\":\"\\n

Sends a POST request to the given signer route with the specified body and returns the response.\\nNot intended to be used directly, use the specific methods instead on the client instead.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/request.mdx#request\",\"isPage\":true,\"text\":\"\\nSends a POST request to the given signer route with the specified body and returns the response.\\nNot intended to be used directly, use the specific methods instead on the client instead.\\n\",\"title\":\"request\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/request#import\",\"html\":\"\\n
import { BaseSignerClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/request.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseSignerClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"request\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/request#parameters\",\"html\":\"\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/request.mdx#parameters\",\"isPage\":false,\"text\":\"\\n\",\"title\":\"Parameters\",\"titles\":[\"request\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/request#route\",\"html\":\"\\n

SignerRoutes\\nThe route to which the request should be sent

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/request.mdx#route\",\"isPage\":false,\"text\":\"\\nSignerRoutes\\nThe route to which the request should be sent\\n\",\"title\":\"route\",\"titles\":[\"request\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/request#body\",\"html\":\"\\n

SignerBody<R>\\nThe request body containing the data to be sent

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/request.mdx#body\",\"isPage\":false,\"text\":\"\\nSignerBody<R>\\nThe request body containing the data to be sent\\n\",\"title\":\"body\",\"titles\":[\"request\",\"Parameters\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/request#returns\",\"html\":\"\\n

Promise<SignerResponse<R>>\\nA promise that resolves to the response from the signer

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/request.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<SignerResponse<R>>\\nA promise that resolves to the response from the signer\",\"title\":\"Returns\",\"titles\":[\"request\"]}]}],[\"index.8559abe6ab0a3901389b4c5d397c0d6371d9f14902a9e94543efda2494285966\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: getUser\\ndescription: Overview of the getUser method\\n---\\n\\n# getUser\\n\\nReturns the current user or null if no user is set.\\n\\n## Import\\n\\n```ts\\nimport { BaseSignerClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Returns\\n\\n`User | null`\\nthe current user object or null if no user is available\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/getUser#getuser\",\"html\":\"\\n

Returns the current user or null if no user is set.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/getUser.mdx#getuser\",\"isPage\":true,\"text\":\"\\nReturns the current user or null if no user is set.\\n\",\"title\":\"getUser\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/getUser#import\",\"html\":\"\\n
import { BaseSignerClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/getUser.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseSignerClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"getUser\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/getUser#returns\",\"html\":\"\\n

User | null\\nthe current user object or null if no user is available

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/getUser.mdx#returns\",\"isPage\":false,\"text\":\"\\nUser | null\\nthe current user object or null if no user is available\",\"title\":\"Returns\",\"titles\":[\"getUser\"]}]}],[\"index.05f2d81ba0e9c08b81dd8280a6114acafc5270a4ad817f23f8b42964b8137e8b\",{\"mdx\":\"---\\n# This file is autogenerated\\ntitle: stampWhoami\\ndescription: Overview of the stampWhoami method\\n---\\n\\n# stampWhoami\\n\\nGenerates a stamped whoami request for the current user. This request can then be used to call /signer/v1/whoami to get the user information.\\nThis is useful if you want to get the user information in a different context like a server. You can pass the stamped request to the server\\nand then call our API to get the user information. Using this stamp is the most trusted way to get the user information since a stamp can only\\nbelong to the user who created it.\\n\\n## Import\\n\\n```ts\\nimport { BaseSignerClient } from \\\"@account-kit/signer\\\";\\n```\\n\\n## Returns\\n\\n`Promise`\\na promise that resolves to the \\\"whoami\\\" information for the logged in user\\n\",\"document\":[{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/stampWhoami#stampwhoami\",\"html\":\"\\n

Generates a stamped whoami request for the current user. This request can then be used to call /signer/v1/whoami to get the user information.\\nThis is useful if you want to get the user information in a different context like a server. You can pass the stamped request to the server\\nand then call our API to get the user information. Using this stamp is the most trusted way to get the user information since a stamp can only\\nbelong to the user who created it.

\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/stampWhoami.mdx#stampwhoami\",\"isPage\":true,\"text\":\"\\nGenerates a stamped whoami request for the current user. This request can then be used to call /signer/v1/whoami to get the user information.\\nThis is useful if you want to get the user information in a different context like a server. You can pass the stamped request to the server\\nand then call our API to get the user information. Using this stamp is the most trusted way to get the user information since a stamp can only\\nbelong to the user who created it.\\n\",\"title\":\"stampWhoami\",\"titles\":[]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/stampWhoami#import\",\"html\":\"\\n
import { BaseSignerClient } from "@account-kit/signer";
\\n\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/stampWhoami.mdx#import\",\"isPage\":false,\"text\":\"\\nimport { BaseSignerClient } from "@account-kit/signer";\\n\",\"title\":\"Import\",\"titles\":[\"stampWhoami\"]},{\"href\":\"/reference/account-kit/signer/classes/BaseSignerClient/stampWhoami#returns\",\"html\":\"\\n

Promise<TSignedRequest>\\na promise that resolves to the "whoami" information for the logged in user

\",\"id\":\"pages/reference/account-kit/signer/classes/BaseSignerClient/stampWhoami.mdx#returns\",\"isPage\":false,\"text\":\"\\nPromise<TSignedRequest>\\na promise that resolves to the "whoami" information for the logged in user\",\"title\":\"Returns\",\"titles\":[\"stampWhoami\"]}]}]]" -diff --git a/node_modules/vocs/_lib/vite/.vocs/cache/twoslash.json b/node_modules/vocs/_lib/vite/.vocs/cache/twoslash.json -new file mode 100644 -index 0000000..49e8680 ---- /dev/null -+++ b/node_modules/vocs/_lib/vite/.vocs/cache/twoslash.json -@@ -0,0 +1 @@ -+"[[\"a84dec7f3e592f30bbac474469000c525d7a749b790b7bff13106de92cfb6110\",{\"code\":\"import { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst chain = sepolia;\\nconst client = createSmartAccountClient({\\n chain,\\n transport: http(\\\"RPC_URL\\\"),\\n // sets the dummy paymasterAndData with paymaster address appended with some dummy paymasterData\\n // that looks like a valid paymasterData\\n dummyPaymasterAndData: async (userop) => ({\\n ...userop,\\n paymasterAndData: `0x`,\\n }),\\n paymasterAndData: async (userop, opts) => {\\n // call your paymaster here to sponsor the userop\\n // leverage the `opts` field to apply any overrides\\n return {\\n ...userop,\\n paymasterAndData: \\\"0xresponsefromprovider\\\",\\n };\\n },\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) function createSmartAccountClient(config: SmartAccountClientConfig): SmartAccountClient\\nimport createSmartAccountClient\",\"start\":9,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":66,\"length\":4,\"target\":\"http\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":95,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const chain: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n ...;\\n };\\n ... 9 more ...;\\n fees?: ChainFees<...> | undefined;\\n}\",\"start\":132,\"length\":5,\"target\":\"chain\",\"line\":4,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":140,\"length\":7,\"target\":\"sepolia\",\"line\":4,\"character\":14},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: unknown;\\n account: SmartContractAccount | undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 76 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":155,\"length\":6,\"target\":\"client\",\"line\":5,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createSmartAccountClient | undefined;\\n}, SmartContractAccount | undefined, UserOperationContext | undefined>(config: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createSmartAccountClient\",\"start\":164,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":5,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n ...;\\n };\\n ... 9 more ...;\\n fees?: ChainFees<...> | undefined;\\n} | undefined\",\"docs\":\"Chain for the client.\",\"start\":193,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"docs\":\"The RPC transport\",\"start\":202,\"length\":9,\"target\":\"transport\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":213,\"length\":4,\"target\":\"http\",\"line\":7,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) dummyPaymasterAndData?: ClientMiddlewareFn | undefined\",\"start\":374,\"length\":21,\"target\":\"dummyPaymasterAndData\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":404,\"length\":6,\"target\":\"userop\",\"line\":10,\"character\":32},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":425,\"length\":6,\"target\":\"userop\",\"line\":11,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData: string\",\"start\":437,\"length\":16,\"target\":\"paymasterAndData\",\"line\":12,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData?: ClientMiddlewareFn | undefined\",\"start\":510,\"length\":16,\"target\":\"paymasterAndData\",\"line\":14,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":535,\"length\":6,\"target\":\"userop\",\"line\":14,\"character\":27},{\"type\":\"hover\",\"text\":\"(parameter) opts: ClientMiddlewareArgs\",\"start\":543,\"length\":4,\"target\":\"opts\",\"line\":14,\"character\":35},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":686,\"length\":6,\"target\":\"userop\",\"line\":18,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData: string\",\"start\":700,\"length\":16,\"target\":\"paymasterAndData\",\"line\":19,\"character\":6}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"import { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst chain = sepolia;\\nconst client = createSmartAccountClient({\\n chain,\\n transport: http(\\\"RPC_URL\\\"),\\n // sets the dummy paymasterAndData with paymaster address appended with some dummy paymasterData\\n // that looks like a valid paymasterData\\n dummyPaymasterAndData: async (userop) => ({\\n ...userop,\\n paymasterAndData: `0x`,\\n }),\\n paymasterAndData: async (userop, opts) => {\\n // call your paymaster here to sponsor the userop\\n // leverage the `opts` field to apply any overrides\\n return {\\n ...userop,\\n paymasterAndData: \\\"0xresponsefromprovider\\\",\\n };\\n },\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) function createSmartAccountClient(config: SmartAccountClientConfig): SmartAccountClient\\nimport createSmartAccountClient\",\"start\":9,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":66,\"length\":4,\"target\":\"http\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":95,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const chain: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n ...;\\n };\\n ... 9 more ...;\\n fees?: ChainFees<...> | undefined;\\n}\",\"start\":132,\"length\":5,\"target\":\"chain\",\"line\":4,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":140,\"length\":7,\"target\":\"sepolia\",\"line\":4,\"character\":14},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: unknown;\\n account: SmartContractAccount | undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 76 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":155,\"length\":6,\"target\":\"client\",\"line\":5,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createSmartAccountClient | undefined;\\n}, SmartContractAccount | undefined, UserOperationContext | undefined>(config: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createSmartAccountClient\",\"start\":164,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":5,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n ...;\\n };\\n ... 9 more ...;\\n fees?: ChainFees<...> | undefined;\\n} | undefined\",\"docs\":\"Chain for the client.\",\"start\":193,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"docs\":\"The RPC transport\",\"start\":202,\"length\":9,\"target\":\"transport\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":213,\"length\":4,\"target\":\"http\",\"line\":7,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) dummyPaymasterAndData?: ClientMiddlewareFn | undefined\",\"start\":374,\"length\":21,\"target\":\"dummyPaymasterAndData\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":404,\"length\":6,\"target\":\"userop\",\"line\":10,\"character\":32},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":425,\"length\":6,\"target\":\"userop\",\"line\":11,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData: string\",\"start\":437,\"length\":16,\"target\":\"paymasterAndData\",\"line\":12,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData?: ClientMiddlewareFn | undefined\",\"start\":510,\"length\":16,\"target\":\"paymasterAndData\",\"line\":14,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":535,\"length\":6,\"target\":\"userop\",\"line\":14,\"character\":27},{\"type\":\"hover\",\"text\":\"(parameter) opts: ClientMiddlewareArgs\",\"start\":543,\"length\":4,\"target\":\"opts\",\"line\":14,\"character\":35},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":686,\"length\":6,\"target\":\"userop\",\"line\":18,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData: string\",\"start\":700,\"length\":16,\"target\":\"paymasterAndData\",\"line\":19,\"character\":6}],\"tags\":[]}],[\"53eb0d6a7e0653f69de7a3f83d5da265656775b571933dd64cad579069ab8492\",{\"code\":\"import { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig({\\n // required\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true, // [!code ++]\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":60,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":111,\"length\":6,\"target\":\"config\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":120,\"length\":12,\"target\":\"createConfig\",\"line\":3,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) rpcUrl: string\",\"start\":151,\"length\":6,\"target\":\"rpcUrl\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":173,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":180,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) ssr: true\",\"start\":191,\"length\":3,\"target\":\"ssr\",\"line\":7,\"character\":2}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":true,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,13]],\"flagNotations\":[{\"type\":\"handbookOptions\",\"name\":\"noErrors\",\"value\":true,\"start\":0,\"end\":13}],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"// @noErrors\\nimport { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig({\\n // required\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true, // [!code ++]\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":60,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":111,\"length\":6,\"target\":\"config\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":120,\"length\":12,\"target\":\"createConfig\",\"line\":3,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) rpcUrl: string\",\"start\":151,\"length\":6,\"target\":\"rpcUrl\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":173,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":180,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) ssr: true\",\"start\":191,\"length\":3,\"target\":\"ssr\",\"line\":7,\"character\":2}],\"tags\":[]}],[\"a40c76d6c66a92db8bca475650e04b215bd747616a4de7a4a62ac58113d94d6d\",{\"code\":\"import {\\n createConfig,\\n cookieStorage, // [!code ++]\\n} from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nexport const queryClient = new QueryClient();\\n\\n// [!code focus:99]\\nexport const config = createConfig({\\n // required\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true, // [!code ++]\\n storage: cookieStorage, // [!code ++]\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":11,\"length\":12,\"target\":\"createConfig\",\"line\":1,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const cookieStorage: (config?: {\\n sessionLength: number;\\n}) => Storage\\nimport cookieStorage\",\"docs\":\"Function to create cookie based Storage\",\"tags\":[[\"param\",\"config optional config object that allows you to set the session length\"],[\"param\",\"config.sessionLength the length of the session in milliseconds\"],[\"returns\",\"an instance of a browser storage object that leverages cookies\"]],\"start\":27,\"length\":13,\"target\":\"cookieStorage\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":94,\"length\":7,\"target\":\"sepolia\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class QueryClient\\nimport QueryClient\",\"start\":140,\"length\":11,\"target\":\"QueryClient\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"const queryClient: QueryClient\",\"start\":198,\"length\":11,\"target\":\"queryClient\",\"line\":7,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) new QueryClient(config?: QueryClientConfig | undefined): QueryClient\\nimport QueryClient\",\"start\":216,\"length\":11,\"target\":\"QueryClient\",\"line\":7,\"character\":31},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":265,\"length\":6,\"target\":\"config\",\"line\":10,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":274,\"length\":12,\"target\":\"createConfig\",\"line\":10,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) rpcUrl: string\",\"start\":305,\"length\":6,\"target\":\"rpcUrl\",\"line\":12,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":327,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":334,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) ssr: true\",\"start\":345,\"length\":3,\"target\":\"ssr\",\"line\":14,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) storage: (config?: {\\n sessionLength: number;\\n} | undefined) => Storage\",\"start\":372,\"length\":7,\"target\":\"storage\",\"line\":15,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const cookieStorage: (config?: {\\n sessionLength: number;\\n}) => Storage\\nimport cookieStorage\",\"docs\":\"Function to create cookie based Storage\",\"tags\":[[\"param\",\"config optional config object that allows you to set the session length\"],[\"param\",\"config.sessionLength the length of the session in milliseconds\"],[\"returns\",\"an instance of a browser storage object that leverages cookies\"]],\"start\":381,\"length\":13,\"target\":\"cookieStorage\",\"line\":15,\"character\":11}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":true,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,13]],\"flagNotations\":[{\"type\":\"handbookOptions\",\"name\":\"noErrors\",\"value\":true,\"start\":0,\"end\":13}],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"// @noErrors\\nimport {\\n createConfig,\\n cookieStorage, // [!code ++]\\n} from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nexport const queryClient = new QueryClient();\\n\\n// [!code focus:99]\\nexport const config = createConfig({\\n // required\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true, // [!code ++]\\n storage: cookieStorage, // [!code ++]\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":11,\"length\":12,\"target\":\"createConfig\",\"line\":1,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const cookieStorage: (config?: {\\n sessionLength: number;\\n}) => Storage\\nimport cookieStorage\",\"docs\":\"Function to create cookie based Storage\",\"tags\":[[\"param\",\"config optional config object that allows you to set the session length\"],[\"param\",\"config.sessionLength the length of the session in milliseconds\"],[\"returns\",\"an instance of a browser storage object that leverages cookies\"]],\"start\":27,\"length\":13,\"target\":\"cookieStorage\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":94,\"length\":7,\"target\":\"sepolia\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class QueryClient\\nimport QueryClient\",\"start\":140,\"length\":11,\"target\":\"QueryClient\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"const queryClient: QueryClient\",\"start\":198,\"length\":11,\"target\":\"queryClient\",\"line\":7,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) new QueryClient(config?: QueryClientConfig | undefined): QueryClient\\nimport QueryClient\",\"start\":216,\"length\":11,\"target\":\"QueryClient\",\"line\":7,\"character\":31},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":265,\"length\":6,\"target\":\"config\",\"line\":10,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":274,\"length\":12,\"target\":\"createConfig\",\"line\":10,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) rpcUrl: string\",\"start\":305,\"length\":6,\"target\":\"rpcUrl\",\"line\":12,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":327,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":334,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) ssr: true\",\"start\":345,\"length\":3,\"target\":\"ssr\",\"line\":14,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) storage: (config?: {\\n sessionLength: number;\\n} | undefined) => Storage\",\"start\":372,\"length\":7,\"target\":\"storage\",\"line\":15,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const cookieStorage: (config?: {\\n sessionLength: number;\\n}) => Storage\\nimport cookieStorage\",\"docs\":\"Function to create cookie based Storage\",\"tags\":[[\"param\",\"config optional config object that allows you to set the session length\"],[\"param\",\"config.sessionLength the length of the session in milliseconds\"],[\"returns\",\"an instance of a browser storage object that leverages cookies\"]],\"start\":381,\"length\":13,\"target\":\"cookieStorage\",\"line\":15,\"character\":11}],\"tags\":[]}],[\"eafe6a58d41de8fa4d12182483a692d1b781fbbf4f02ddb33142f9ecd6c89adc\",{\"code\":\"import React from \\\"react\\\";\\nimport { cookieToInitialState } from \\\"@account-kit/core\\\";\\nimport type { Metadata } from \\\"next\\\";\\nimport { Inter } from \\\"next/font/google\\\";\\nimport { headers } from \\\"next/headers\\\";\\nimport { config } from \\\"./config\\\";\\nimport \\\"./globals.css\\\";\\nimport { Providers } from \\\"./providers\\\";\\n\\nconst inter = Inter({ subsets: [\\\"latin\\\"] });\\n\\nexport const metadata: Metadata = {\\n title: \\\"Embedded Accounts Getting Started\\\",\\n description: \\\"Embedded Accounts Quickstart Guide\\\",\\n};\\n\\nexport default function RootLayout({\\n children,\\n}: Readonly<{\\n children: React.ReactNode;\\n}>) {\\n // This will allow us to persist state across page boundaries\\n const initialState = cookieToInitialState(\\n config,\\n headers().get(\\\"cookie\\\") ?? undefined\\n );\\n\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function cookieToInitialState(config: AlchemyAccountsConfig, cookie?: string): StoredState | undefined\\nimport cookieToInitialState\",\"docs\":\"Converts a cookie into an initial state object\",\"tags\":[[\"param\",\"config the account config containing the client store\"],[\"param\",\"cookie optional cookie string\"],[\"returns\",\"the deserialized AlchemyClientState if the cookie exists, otherwise undefined\"]],\"start\":36,\"length\":20,\"target\":\"cookieToInitialState\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) interface Metadata\\nimport Metadata\",\"docs\":\"Metadata interface to describe all the metadata fields that can be set in a document.\",\"tags\":[[\"interface\",null]],\"start\":99,\"length\":8,\"target\":\"Metadata\",\"line\":2,\"character\":14},{\"type\":\"hover\",\"text\":\"(alias) function Inter(options?: {\\n weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'>;\\n style?: 'normal' | Array<'normal'>;\\n display?: Display;\\n variable?: T;\\n preload?: boolean;\\n fallback?: string[];\\n adjustFontFallback?: boolean;\\n subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'greek' | 'greek-ext' | 'latin' | 'latin-ext' | 'vietnamese'>;\\n axes?: 'slnt'[];\\n}): T extends undefined ? NextFont : NextFontWithVariable\\nimport Inter\",\"start\":132,\"length\":5,\"target\":\"Inter\",\"line\":3,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function headers(): import(\\\"../../server/web/spec-extension/adapters/headers\\\").ReadonlyHeaders\\nimport headers\",\"start\":174,\"length\":7,\"target\":\"headers\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"import config\",\"start\":214,\"length\":6,\"target\":\"config\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"import Providers\",\"start\":273,\"length\":9,\"target\":\"Providers\",\"line\":7,\"character\":9},{\"type\":\"hover\",\"text\":\"const inter: NextFont\",\"start\":312,\"length\":5,\"target\":\"inter\",\"line\":9,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) Inter(options?: {\\n weight?: \\\"100\\\" | \\\"200\\\" | \\\"300\\\" | \\\"400\\\" | \\\"500\\\" | \\\"600\\\" | \\\"700\\\" | \\\"800\\\" | \\\"900\\\" | \\\"variable\\\" | (\\\"100\\\" | \\\"200\\\" | \\\"300\\\" | \\\"400\\\" | \\\"500\\\" | \\\"600\\\" | \\\"700\\\" | \\\"800\\\" | \\\"900\\\")[] | undefined;\\n ... 7 more ...;\\n axes?: \\\"slnt\\\"[] | undefined;\\n} | undefined): NextFont\\nimport Inter\",\"start\":320,\"length\":5,\"target\":\"Inter\",\"line\":9,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) subsets?: (\\\"cyrillic\\\" | \\\"cyrillic-ext\\\" | \\\"greek\\\" | \\\"greek-ext\\\" | \\\"latin\\\" | \\\"latin-ext\\\" | \\\"vietnamese\\\")[] | undefined\",\"start\":328,\"length\":7,\"target\":\"subsets\",\"line\":9,\"character\":22},{\"type\":\"hover\",\"text\":\"const metadata: Metadata\",\"start\":365,\"length\":8,\"target\":\"metadata\",\"line\":11,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) interface Metadata\\nimport Metadata\",\"docs\":\"Metadata interface to describe all the metadata fields that can be set in a document.\",\"tags\":[[\"interface\",null]],\"start\":375,\"length\":8,\"target\":\"Metadata\",\"line\":11,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) Metadata.title?: string | TemplateString | null | undefined\",\"docs\":\"The document title.\",\"tags\":[[\"example\",\"```tsx\\n\\\"My Blog\\\"\\nMy Blog\\n\\n{ default: \\\"Dashboard\\\", template: \\\"%s | My Website\\\" }\\nDashboard | My Website\\n\\n{ absolute: \\\"My Blog\\\", template: \\\"%s | My Website\\\" }\\nMy Blog\\n```\"]],\"start\":390,\"length\":5,\"target\":\"title\",\"line\":12,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) Metadata.description?: string | null | undefined\",\"docs\":\"The document description, and optionally the OpenGraph and twitter descriptions.\",\"tags\":[[\"example\",\"```tsx\\n\\\"My Blog Description\\\"\\n\\n```\"]],\"start\":436,\"length\":11,\"target\":\"description\",\"line\":13,\"character\":2},{\"type\":\"hover\",\"text\":\"function RootLayout({ children, }: Readonly<{\\n children: React.ReactNode;\\n}>): React.JSX.Element\",\"start\":515,\"length\":10,\"target\":\"RootLayout\",\"line\":16,\"character\":24},{\"type\":\"hover\",\"text\":\"(parameter) children: React.ReactNode\",\"start\":530,\"length\":8,\"target\":\"children\",\"line\":17,\"character\":2},{\"type\":\"hover\",\"text\":\"type Readonly = { readonly [P in keyof T]: T[P]; }\",\"docs\":\"Make all properties in T readonly\",\"start\":543,\"length\":8,\"target\":\"Readonly\",\"line\":18,\"character\":3},{\"type\":\"hover\",\"text\":\"(property) children: React.ReactNode\",\"start\":556,\"length\":8,\"target\":\"children\",\"line\":19,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":566,\"length\":5,\"target\":\"React\",\"line\":19,\"character\":12},{\"type\":\"hover\",\"text\":\"type ReactNode = string | number | boolean | React.ReactElement> | Iterable | React.ReactPortal | React.PromiseLikeOfReactNode | null | undefined\",\"start\":572,\"length\":9,\"target\":\"ReactNode\",\"line\":19,\"character\":18},{\"type\":\"hover\",\"text\":\"const initialState: StoredState | undefined\",\"start\":661,\"length\":12,\"target\":\"initialState\",\"line\":22,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) cookieToInitialState(config: AlchemyAccountsConfig, cookie?: string | undefined): StoredState | undefined\\nimport cookieToInitialState\",\"docs\":\"Converts a cookie into an initial state object\",\"tags\":[[\"param\",\"config the account config containing the client store\"],[\"param\",\"cookie optional cookie string\"],[\"returns\",\"the deserialized AlchemyClientState if the cookie exists, otherwise undefined\"]],\"start\":676,\"length\":20,\"target\":\"cookieToInitialState\",\"line\":22,\"character\":23},{\"type\":\"hover\",\"text\":\"import config\",\"start\":702,\"length\":6,\"target\":\"config\",\"line\":23,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) headers(): ReadonlyHeaders\\nimport headers\",\"start\":714,\"length\":7,\"target\":\"headers\",\"line\":24,\"character\":4},{\"type\":\"hover\",\"text\":\"(method) Headers.get(name: string): string | null\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/get)\",\"start\":724,\"length\":3,\"target\":\"get\",\"line\":24,\"character\":14},{\"type\":\"hover\",\"text\":\"var undefined\",\"start\":741,\"length\":9,\"target\":\"undefined\",\"line\":24,\"character\":31},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.html: React.DetailedHTMLProps, HTMLHtmlElement>\",\"start\":773,\"length\":4,\"target\":\"html\",\"line\":28,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) HTMLAttributes.lang?: string | undefined\",\"start\":778,\"length\":4,\"target\":\"lang\",\"line\":28,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.body: React.DetailedHTMLProps, HTMLBodyElement>\",\"start\":796,\"length\":4,\"target\":\"body\",\"line\":29,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) HTMLAttributes.className?: string | undefined\",\"start\":801,\"length\":9,\"target\":\"className\",\"line\":29,\"character\":12},{\"type\":\"hover\",\"text\":\"const inter: NextFont\",\"start\":812,\"length\":5,\"target\":\"inter\",\"line\":29,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) className: string\",\"start\":818,\"length\":9,\"target\":\"className\",\"line\":29,\"character\":29},{\"type\":\"hover\",\"text\":\"import Providers\",\"start\":839,\"length\":9,\"target\":\"Providers\",\"line\":30,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) initialState: StoredState | undefined\",\"start\":849,\"length\":12,\"target\":\"initialState\",\"line\":30,\"character\":19},{\"type\":\"hover\",\"text\":\"const initialState: StoredState | undefined\",\"start\":863,\"length\":12,\"target\":\"initialState\",\"line\":30,\"character\":33},{\"type\":\"hover\",\"text\":\"(parameter) children: React.ReactNode\",\"start\":878,\"length\":8,\"target\":\"children\",\"line\":30,\"character\":48},{\"type\":\"hover\",\"text\":\"import Providers\",\"start\":889,\"length\":9,\"target\":\"Providers\",\"line\":30,\"character\":59},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.body: React.DetailedHTMLProps, HTMLBodyElement>\",\"start\":908,\"length\":4,\"target\":\"body\",\"line\":31,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.html: React.DetailedHTMLProps, HTMLHtmlElement>\",\"start\":920,\"length\":4,\"target\":\"html\",\"line\":32,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":true,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,13]],\"flagNotations\":[{\"type\":\"handbookOptions\",\"name\":\"noErrors\",\"value\":true,\"start\":0,\"end\":13}],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"// @noErrors\\nimport React from \\\"react\\\";\\nimport { cookieToInitialState } from \\\"@account-kit/core\\\";\\nimport type { Metadata } from \\\"next\\\";\\nimport { Inter } from \\\"next/font/google\\\";\\nimport { headers } from \\\"next/headers\\\";\\nimport { config } from \\\"./config\\\";\\nimport \\\"./globals.css\\\";\\nimport { Providers } from \\\"./providers\\\";\\n\\nconst inter = Inter({ subsets: [\\\"latin\\\"] });\\n\\nexport const metadata: Metadata = {\\n title: \\\"Embedded Accounts Getting Started\\\",\\n description: \\\"Embedded Accounts Quickstart Guide\\\",\\n};\\n\\nexport default function RootLayout({\\n children,\\n}: Readonly<{\\n children: React.ReactNode;\\n}>) {\\n // This will allow us to persist state across page boundaries\\n const initialState = cookieToInitialState(\\n config,\\n headers().get(\\\"cookie\\\") ?? undefined\\n );\\n\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function cookieToInitialState(config: AlchemyAccountsConfig, cookie?: string): StoredState | undefined\\nimport cookieToInitialState\",\"docs\":\"Converts a cookie into an initial state object\",\"tags\":[[\"param\",\"config the account config containing the client store\"],[\"param\",\"cookie optional cookie string\"],[\"returns\",\"the deserialized AlchemyClientState if the cookie exists, otherwise undefined\"]],\"start\":36,\"length\":20,\"target\":\"cookieToInitialState\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) interface Metadata\\nimport Metadata\",\"docs\":\"Metadata interface to describe all the metadata fields that can be set in a document.\",\"tags\":[[\"interface\",null]],\"start\":99,\"length\":8,\"target\":\"Metadata\",\"line\":2,\"character\":14},{\"type\":\"hover\",\"text\":\"(alias) function Inter(options?: {\\n weight?: '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'variable' | Array<'100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'>;\\n style?: 'normal' | Array<'normal'>;\\n display?: Display;\\n variable?: T;\\n preload?: boolean;\\n fallback?: string[];\\n adjustFontFallback?: boolean;\\n subsets?: Array<'cyrillic' | 'cyrillic-ext' | 'greek' | 'greek-ext' | 'latin' | 'latin-ext' | 'vietnamese'>;\\n axes?: 'slnt'[];\\n}): T extends undefined ? NextFont : NextFontWithVariable\\nimport Inter\",\"start\":132,\"length\":5,\"target\":\"Inter\",\"line\":3,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function headers(): import(\\\"../../server/web/spec-extension/adapters/headers\\\").ReadonlyHeaders\\nimport headers\",\"start\":174,\"length\":7,\"target\":\"headers\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"import config\",\"start\":214,\"length\":6,\"target\":\"config\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"import Providers\",\"start\":273,\"length\":9,\"target\":\"Providers\",\"line\":7,\"character\":9},{\"type\":\"hover\",\"text\":\"const inter: NextFont\",\"start\":312,\"length\":5,\"target\":\"inter\",\"line\":9,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) Inter(options?: {\\n weight?: \\\"100\\\" | \\\"200\\\" | \\\"300\\\" | \\\"400\\\" | \\\"500\\\" | \\\"600\\\" | \\\"700\\\" | \\\"800\\\" | \\\"900\\\" | \\\"variable\\\" | (\\\"100\\\" | \\\"200\\\" | \\\"300\\\" | \\\"400\\\" | \\\"500\\\" | \\\"600\\\" | \\\"700\\\" | \\\"800\\\" | \\\"900\\\")[] | undefined;\\n ... 7 more ...;\\n axes?: \\\"slnt\\\"[] | undefined;\\n} | undefined): NextFont\\nimport Inter\",\"start\":320,\"length\":5,\"target\":\"Inter\",\"line\":9,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) subsets?: (\\\"cyrillic\\\" | \\\"cyrillic-ext\\\" | \\\"greek\\\" | \\\"greek-ext\\\" | \\\"latin\\\" | \\\"latin-ext\\\" | \\\"vietnamese\\\")[] | undefined\",\"start\":328,\"length\":7,\"target\":\"subsets\",\"line\":9,\"character\":22},{\"type\":\"hover\",\"text\":\"const metadata: Metadata\",\"start\":365,\"length\":8,\"target\":\"metadata\",\"line\":11,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) interface Metadata\\nimport Metadata\",\"docs\":\"Metadata interface to describe all the metadata fields that can be set in a document.\",\"tags\":[[\"interface\",null]],\"start\":375,\"length\":8,\"target\":\"Metadata\",\"line\":11,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) Metadata.title?: string | TemplateString | null | undefined\",\"docs\":\"The document title.\",\"tags\":[[\"example\",\"```tsx\\n\\\"My Blog\\\"\\nMy Blog\\n\\n{ default: \\\"Dashboard\\\", template: \\\"%s | My Website\\\" }\\nDashboard | My Website\\n\\n{ absolute: \\\"My Blog\\\", template: \\\"%s | My Website\\\" }\\nMy Blog\\n```\"]],\"start\":390,\"length\":5,\"target\":\"title\",\"line\":12,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) Metadata.description?: string | null | undefined\",\"docs\":\"The document description, and optionally the OpenGraph and twitter descriptions.\",\"tags\":[[\"example\",\"```tsx\\n\\\"My Blog Description\\\"\\n\\n```\"]],\"start\":436,\"length\":11,\"target\":\"description\",\"line\":13,\"character\":2},{\"type\":\"hover\",\"text\":\"function RootLayout({ children, }: Readonly<{\\n children: React.ReactNode;\\n}>): React.JSX.Element\",\"start\":515,\"length\":10,\"target\":\"RootLayout\",\"line\":16,\"character\":24},{\"type\":\"hover\",\"text\":\"(parameter) children: React.ReactNode\",\"start\":530,\"length\":8,\"target\":\"children\",\"line\":17,\"character\":2},{\"type\":\"hover\",\"text\":\"type Readonly = { readonly [P in keyof T]: T[P]; }\",\"docs\":\"Make all properties in T readonly\",\"start\":543,\"length\":8,\"target\":\"Readonly\",\"line\":18,\"character\":3},{\"type\":\"hover\",\"text\":\"(property) children: React.ReactNode\",\"start\":556,\"length\":8,\"target\":\"children\",\"line\":19,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":566,\"length\":5,\"target\":\"React\",\"line\":19,\"character\":12},{\"type\":\"hover\",\"text\":\"type ReactNode = string | number | boolean | React.ReactElement> | Iterable | React.ReactPortal | React.PromiseLikeOfReactNode | null | undefined\",\"start\":572,\"length\":9,\"target\":\"ReactNode\",\"line\":19,\"character\":18},{\"type\":\"hover\",\"text\":\"const initialState: StoredState | undefined\",\"start\":661,\"length\":12,\"target\":\"initialState\",\"line\":22,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) cookieToInitialState(config: AlchemyAccountsConfig, cookie?: string | undefined): StoredState | undefined\\nimport cookieToInitialState\",\"docs\":\"Converts a cookie into an initial state object\",\"tags\":[[\"param\",\"config the account config containing the client store\"],[\"param\",\"cookie optional cookie string\"],[\"returns\",\"the deserialized AlchemyClientState if the cookie exists, otherwise undefined\"]],\"start\":676,\"length\":20,\"target\":\"cookieToInitialState\",\"line\":22,\"character\":23},{\"type\":\"hover\",\"text\":\"import config\",\"start\":702,\"length\":6,\"target\":\"config\",\"line\":23,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) headers(): ReadonlyHeaders\\nimport headers\",\"start\":714,\"length\":7,\"target\":\"headers\",\"line\":24,\"character\":4},{\"type\":\"hover\",\"text\":\"(method) Headers.get(name: string): string | null\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/get)\",\"start\":724,\"length\":3,\"target\":\"get\",\"line\":24,\"character\":14},{\"type\":\"hover\",\"text\":\"var undefined\",\"start\":741,\"length\":9,\"target\":\"undefined\",\"line\":24,\"character\":31},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.html: React.DetailedHTMLProps, HTMLHtmlElement>\",\"start\":773,\"length\":4,\"target\":\"html\",\"line\":28,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) HTMLAttributes.lang?: string | undefined\",\"start\":778,\"length\":4,\"target\":\"lang\",\"line\":28,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.body: React.DetailedHTMLProps, HTMLBodyElement>\",\"start\":796,\"length\":4,\"target\":\"body\",\"line\":29,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) HTMLAttributes.className?: string | undefined\",\"start\":801,\"length\":9,\"target\":\"className\",\"line\":29,\"character\":12},{\"type\":\"hover\",\"text\":\"const inter: NextFont\",\"start\":812,\"length\":5,\"target\":\"inter\",\"line\":29,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) className: string\",\"start\":818,\"length\":9,\"target\":\"className\",\"line\":29,\"character\":29},{\"type\":\"hover\",\"text\":\"import Providers\",\"start\":839,\"length\":9,\"target\":\"Providers\",\"line\":30,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) initialState: StoredState | undefined\",\"start\":849,\"length\":12,\"target\":\"initialState\",\"line\":30,\"character\":19},{\"type\":\"hover\",\"text\":\"const initialState: StoredState | undefined\",\"start\":863,\"length\":12,\"target\":\"initialState\",\"line\":30,\"character\":33},{\"type\":\"hover\",\"text\":\"(parameter) children: React.ReactNode\",\"start\":878,\"length\":8,\"target\":\"children\",\"line\":30,\"character\":48},{\"type\":\"hover\",\"text\":\"import Providers\",\"start\":889,\"length\":9,\"target\":\"Providers\",\"line\":30,\"character\":59},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.body: React.DetailedHTMLProps, HTMLBodyElement>\",\"start\":908,\"length\":4,\"target\":\"body\",\"line\":31,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.html: React.DetailedHTMLProps, HTMLHtmlElement>\",\"start\":920,\"length\":4,\"target\":\"html\",\"line\":32,\"character\":6}],\"tags\":[]}],[\"0357f2a2475987fa8ce150da8997d865e1421577ea3c5c2f36fcfc2219a9fd36\",{\"code\":\"\\\"use client\\\";\\n\\nimport React from \\\"react\\\";\\nimport { AlchemyClientState } from \\\"@account-kit/core\\\";\\nimport { AlchemyAccountProvider } from \\\"@account-kit/react\\\";\\nimport { QueryClientProvider } from \\\"@tanstack/react-query\\\";\\nimport { PropsWithChildren, Suspense } from \\\"react\\\";\\nimport { config, queryClient } from \\\"./config\\\";\\n\\nexport const Providers = (\\n props: PropsWithChildren<{ initialState?: AlchemyClientState }>\\n) => {\\n return (\\n \\n \\n \\n {props.children}\\n \\n \\n \\n );\\n};\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":22,\"length\":5,\"target\":\"React\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type AlchemyClientState = {\\n alchemy: Omit & {\\n bundlerClient: {\\n connection: Connection;\\n };\\n };\\n wagmi?: State | undefined;\\n}\\nimport AlchemyClientState\",\"start\":51,\"length\":18,\"target\":\"AlchemyClientState\",\"line\":3,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const AlchemyAccountProvider: (props: React.PropsWithChildren) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AlchemyAccountProvider\",\"docs\":\"Provider for Alchemy accounts.\",\"tags\":[[\"example\",\"```tsx\\nimport { AlchemyAccountProvider, createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient, QueryClientProvider } from \\\"@tanstack/react-query\\\";\\n\\nconst config = createConfig({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst queryClient = new QueryClient();\\n\\nfunction App({ children }: React.PropsWithChildren) {\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\\n```\"],[\"param\",\"props alchemy accounts provider props\"],[\"param\",\"props.config the acccount config generated using `createConfig`\"],[\"param\",\"props.queryClient the react-query query client to use\"],[\"param\",\"props.uiConfig optional UI configuration\"],[\"param\",\"props.children react components that should have this accounts context\"],[\"returns\",\"The element to wrap your application in for Alchemy Accounts context.\"]],\"start\":107,\"length\":22,\"target\":\"AlchemyAccountProvider\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const QueryClientProvider: ({ client, children, }: QueryClientProviderProps) => JSX.Element\\nimport QueryClientProvider\",\"start\":168,\"length\":19,\"target\":\"QueryClientProvider\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) type PropsWithChildren

= P & {\\n children?: ReactNode | undefined;\\n}\\nimport PropsWithChildren\",\"start\":229,\"length\":17,\"target\":\"PropsWithChildren\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const Suspense: ExoticComponent\\nimport Suspense\",\"start\":248,\"length\":8,\"target\":\"Suspense\",\"line\":6,\"character\":28},{\"type\":\"hover\",\"text\":\"import config\",\"start\":282,\"length\":6,\"target\":\"config\",\"line\":7,\"character\":9},{\"type\":\"hover\",\"text\":\"import queryClient\",\"start\":290,\"length\":11,\"target\":\"queryClient\",\"line\":7,\"character\":17},{\"type\":\"hover\",\"text\":\"const Providers: (props: PropsWithChildren<{\\n initialState?: AlchemyClientState;\\n}>) => React.JSX.Element\",\"start\":335,\"length\":9,\"target\":\"Providers\",\"line\":9,\"character\":13},{\"type\":\"hover\",\"text\":\"(parameter) props: React.PropsWithChildren<{\\n initialState?: StoredState | undefined;\\n}>\",\"start\":351,\"length\":5,\"target\":\"props\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) type PropsWithChildren

= P & {\\n children?: ReactNode | undefined;\\n}\\nimport PropsWithChildren\",\"start\":358,\"length\":17,\"target\":\"PropsWithChildren\",\"line\":10,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) initialState?: StoredState | undefined\",\"start\":378,\"length\":12,\"target\":\"initialState\",\"line\":10,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) type AlchemyClientState = {\\n alchemy: Omit & {\\n bundlerClient: {\\n connection: Connection;\\n };\\n };\\n wagmi?: State | undefined;\\n}\\nimport AlchemyClientState\",\"start\":393,\"length\":18,\"target\":\"AlchemyClientState\",\"line\":10,\"character\":44},{\"type\":\"hover\",\"text\":\"(alias) const Suspense: ExoticComponent\\nimport Suspense\",\"start\":438,\"length\":8,\"target\":\"Suspense\",\"line\":13,\"character\":5},{\"type\":\"hover\",\"text\":\"(alias) const QueryClientProvider: ({ client, children, }: QueryClientProviderProps) => JSX.Element\\nimport QueryClientProvider\",\"start\":455,\"length\":19,\"target\":\"QueryClientProvider\",\"line\":14,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) client: QueryClient\",\"start\":475,\"length\":6,\"target\":\"client\",\"line\":14,\"character\":27},{\"type\":\"hover\",\"text\":\"import queryClient\",\"start\":483,\"length\":11,\"target\":\"queryClient\",\"line\":14,\"character\":35},{\"type\":\"hover\",\"text\":\"(alias) const AlchemyAccountProvider: (props: React.PropsWithChildren) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AlchemyAccountProvider\",\"docs\":\"Provider for Alchemy accounts.\",\"tags\":[[\"example\",\"```tsx\\nimport { AlchemyAccountProvider, createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient, QueryClientProvider } from \\\"@tanstack/react-query\\\";\\n\\nconst config = createConfig({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst queryClient = new QueryClient();\\n\\nfunction App({ children }: React.PropsWithChildren) {\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\\n```\"],[\"param\",\"props alchemy accounts provider props\"],[\"param\",\"props.config the acccount config generated using `createConfig`\"],[\"param\",\"props.queryClient the react-query query client to use\"],[\"param\",\"props.uiConfig optional UI configuration\"],[\"param\",\"props.children react components that should have this accounts context\"],[\"returns\",\"The element to wrap your application in for Alchemy Accounts context.\"]],\"start\":506,\"length\":22,\"target\":\"AlchemyAccountProvider\",\"line\":15,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) config: AlchemyAccountsConfigWithUI\",\"start\":539,\"length\":6,\"target\":\"config\",\"line\":16,\"character\":10},{\"type\":\"hover\",\"text\":\"import config\",\"start\":547,\"length\":6,\"target\":\"config\",\"line\":16,\"character\":18},{\"type\":\"hover\",\"text\":\"(property) queryClient: QueryClient\",\"start\":565,\"length\":11,\"target\":\"queryClient\",\"line\":17,\"character\":10},{\"type\":\"hover\",\"text\":\"import queryClient\",\"start\":578,\"length\":11,\"target\":\"queryClient\",\"line\":17,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) initialState?: StoredState | undefined\",\"start\":601,\"length\":12,\"target\":\"initialState\",\"line\":18,\"character\":10},{\"type\":\"hover\",\"text\":\"(parameter) props: React.PropsWithChildren<{\\n initialState?: StoredState | undefined;\\n}>\",\"start\":615,\"length\":5,\"target\":\"props\",\"line\":18,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) initialState?: StoredState | undefined\",\"start\":621,\"length\":12,\"target\":\"initialState\",\"line\":18,\"character\":30},{\"type\":\"hover\",\"text\":\"(parameter) props: React.PropsWithChildren<{\\n initialState?: StoredState | undefined;\\n}>\",\"start\":656,\"length\":5,\"target\":\"props\",\"line\":20,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) children?: React.ReactNode\",\"start\":662,\"length\":8,\"target\":\"children\",\"line\":20,\"character\":17},{\"type\":\"hover\",\"text\":\"(alias) const AlchemyAccountProvider: (props: React.PropsWithChildren) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AlchemyAccountProvider\",\"docs\":\"Provider for Alchemy accounts.\",\"tags\":[[\"example\",\"```tsx\\nimport { AlchemyAccountProvider, createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient, QueryClientProvider } from \\\"@tanstack/react-query\\\";\\n\\nconst config = createConfig({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst queryClient = new QueryClient();\\n\\nfunction App({ children }: React.PropsWithChildren) {\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\\n```\"],[\"param\",\"props alchemy accounts provider props\"],[\"param\",\"props.config the acccount config generated using `createConfig`\"],[\"param\",\"props.queryClient the react-query query client to use\"],[\"param\",\"props.uiConfig optional UI configuration\"],[\"param\",\"props.children react components that should have this accounts context\"],[\"returns\",\"The element to wrap your application in for Alchemy Accounts context.\"]],\"start\":682,\"length\":22,\"target\":\"AlchemyAccountProvider\",\"line\":21,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) const QueryClientProvider: ({ client, children, }: QueryClientProviderProps) => JSX.Element\\nimport QueryClientProvider\",\"start\":714,\"length\":19,\"target\":\"QueryClientProvider\",\"line\":22,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const Suspense: ExoticComponent\\nimport Suspense\",\"start\":741,\"length\":8,\"target\":\"Suspense\",\"line\":23,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":true,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,13]],\"flagNotations\":[{\"type\":\"handbookOptions\",\"name\":\"noErrors\",\"value\":true,\"start\":0,\"end\":13}],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"// @noErrors\\n\\\"use client\\\";\\n\\nimport React from \\\"react\\\";\\nimport { AlchemyClientState } from \\\"@account-kit/core\\\";\\nimport { AlchemyAccountProvider } from \\\"@account-kit/react\\\";\\nimport { QueryClientProvider } from \\\"@tanstack/react-query\\\";\\nimport { PropsWithChildren, Suspense } from \\\"react\\\";\\nimport { config, queryClient } from \\\"./config\\\";\\n\\nexport const Providers = (\\n props: PropsWithChildren<{ initialState?: AlchemyClientState }>\\n) => {\\n return (\\n \\n \\n \\n {props.children}\\n \\n \\n \\n );\\n};\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":22,\"length\":5,\"target\":\"React\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type AlchemyClientState = {\\n alchemy: Omit & {\\n bundlerClient: {\\n connection: Connection;\\n };\\n };\\n wagmi?: State | undefined;\\n}\\nimport AlchemyClientState\",\"start\":51,\"length\":18,\"target\":\"AlchemyClientState\",\"line\":3,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const AlchemyAccountProvider: (props: React.PropsWithChildren) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AlchemyAccountProvider\",\"docs\":\"Provider for Alchemy accounts.\",\"tags\":[[\"example\",\"```tsx\\nimport { AlchemyAccountProvider, createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient, QueryClientProvider } from \\\"@tanstack/react-query\\\";\\n\\nconst config = createConfig({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst queryClient = new QueryClient();\\n\\nfunction App({ children }: React.PropsWithChildren) {\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\\n```\"],[\"param\",\"props alchemy accounts provider props\"],[\"param\",\"props.config the acccount config generated using `createConfig`\"],[\"param\",\"props.queryClient the react-query query client to use\"],[\"param\",\"props.uiConfig optional UI configuration\"],[\"param\",\"props.children react components that should have this accounts context\"],[\"returns\",\"The element to wrap your application in for Alchemy Accounts context.\"]],\"start\":107,\"length\":22,\"target\":\"AlchemyAccountProvider\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const QueryClientProvider: ({ client, children, }: QueryClientProviderProps) => JSX.Element\\nimport QueryClientProvider\",\"start\":168,\"length\":19,\"target\":\"QueryClientProvider\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) type PropsWithChildren

= P & {\\n children?: ReactNode | undefined;\\n}\\nimport PropsWithChildren\",\"start\":229,\"length\":17,\"target\":\"PropsWithChildren\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const Suspense: ExoticComponent\\nimport Suspense\",\"start\":248,\"length\":8,\"target\":\"Suspense\",\"line\":6,\"character\":28},{\"type\":\"hover\",\"text\":\"import config\",\"start\":282,\"length\":6,\"target\":\"config\",\"line\":7,\"character\":9},{\"type\":\"hover\",\"text\":\"import queryClient\",\"start\":290,\"length\":11,\"target\":\"queryClient\",\"line\":7,\"character\":17},{\"type\":\"hover\",\"text\":\"const Providers: (props: PropsWithChildren<{\\n initialState?: AlchemyClientState;\\n}>) => React.JSX.Element\",\"start\":335,\"length\":9,\"target\":\"Providers\",\"line\":9,\"character\":13},{\"type\":\"hover\",\"text\":\"(parameter) props: React.PropsWithChildren<{\\n initialState?: StoredState | undefined;\\n}>\",\"start\":351,\"length\":5,\"target\":\"props\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) type PropsWithChildren

= P & {\\n children?: ReactNode | undefined;\\n}\\nimport PropsWithChildren\",\"start\":358,\"length\":17,\"target\":\"PropsWithChildren\",\"line\":10,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) initialState?: StoredState | undefined\",\"start\":378,\"length\":12,\"target\":\"initialState\",\"line\":10,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) type AlchemyClientState = {\\n alchemy: Omit & {\\n bundlerClient: {\\n connection: Connection;\\n };\\n };\\n wagmi?: State | undefined;\\n}\\nimport AlchemyClientState\",\"start\":393,\"length\":18,\"target\":\"AlchemyClientState\",\"line\":10,\"character\":44},{\"type\":\"hover\",\"text\":\"(alias) const Suspense: ExoticComponent\\nimport Suspense\",\"start\":438,\"length\":8,\"target\":\"Suspense\",\"line\":13,\"character\":5},{\"type\":\"hover\",\"text\":\"(alias) const QueryClientProvider: ({ client, children, }: QueryClientProviderProps) => JSX.Element\\nimport QueryClientProvider\",\"start\":455,\"length\":19,\"target\":\"QueryClientProvider\",\"line\":14,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) client: QueryClient\",\"start\":475,\"length\":6,\"target\":\"client\",\"line\":14,\"character\":27},{\"type\":\"hover\",\"text\":\"import queryClient\",\"start\":483,\"length\":11,\"target\":\"queryClient\",\"line\":14,\"character\":35},{\"type\":\"hover\",\"text\":\"(alias) const AlchemyAccountProvider: (props: React.PropsWithChildren) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AlchemyAccountProvider\",\"docs\":\"Provider for Alchemy accounts.\",\"tags\":[[\"example\",\"```tsx\\nimport { AlchemyAccountProvider, createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient, QueryClientProvider } from \\\"@tanstack/react-query\\\";\\n\\nconst config = createConfig({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst queryClient = new QueryClient();\\n\\nfunction App({ children }: React.PropsWithChildren) {\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\\n```\"],[\"param\",\"props alchemy accounts provider props\"],[\"param\",\"props.config the acccount config generated using `createConfig`\"],[\"param\",\"props.queryClient the react-query query client to use\"],[\"param\",\"props.uiConfig optional UI configuration\"],[\"param\",\"props.children react components that should have this accounts context\"],[\"returns\",\"The element to wrap your application in for Alchemy Accounts context.\"]],\"start\":506,\"length\":22,\"target\":\"AlchemyAccountProvider\",\"line\":15,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) config: AlchemyAccountsConfigWithUI\",\"start\":539,\"length\":6,\"target\":\"config\",\"line\":16,\"character\":10},{\"type\":\"hover\",\"text\":\"import config\",\"start\":547,\"length\":6,\"target\":\"config\",\"line\":16,\"character\":18},{\"type\":\"hover\",\"text\":\"(property) queryClient: QueryClient\",\"start\":565,\"length\":11,\"target\":\"queryClient\",\"line\":17,\"character\":10},{\"type\":\"hover\",\"text\":\"import queryClient\",\"start\":578,\"length\":11,\"target\":\"queryClient\",\"line\":17,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) initialState?: StoredState | undefined\",\"start\":601,\"length\":12,\"target\":\"initialState\",\"line\":18,\"character\":10},{\"type\":\"hover\",\"text\":\"(parameter) props: React.PropsWithChildren<{\\n initialState?: StoredState | undefined;\\n}>\",\"start\":615,\"length\":5,\"target\":\"props\",\"line\":18,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) initialState?: StoredState | undefined\",\"start\":621,\"length\":12,\"target\":\"initialState\",\"line\":18,\"character\":30},{\"type\":\"hover\",\"text\":\"(parameter) props: React.PropsWithChildren<{\\n initialState?: StoredState | undefined;\\n}>\",\"start\":656,\"length\":5,\"target\":\"props\",\"line\":20,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) children?: React.ReactNode\",\"start\":662,\"length\":8,\"target\":\"children\",\"line\":20,\"character\":17},{\"type\":\"hover\",\"text\":\"(alias) const AlchemyAccountProvider: (props: React.PropsWithChildren) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AlchemyAccountProvider\",\"docs\":\"Provider for Alchemy accounts.\",\"tags\":[[\"example\",\"```tsx\\nimport { AlchemyAccountProvider, createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient, QueryClientProvider } from \\\"@tanstack/react-query\\\";\\n\\nconst config = createConfig({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst queryClient = new QueryClient();\\n\\nfunction App({ children }: React.PropsWithChildren) {\\n return (\\n \\n \\n {children}\\n \\n \\n );\\n}\\n```\"],[\"param\",\"props alchemy accounts provider props\"],[\"param\",\"props.config the acccount config generated using `createConfig`\"],[\"param\",\"props.queryClient the react-query query client to use\"],[\"param\",\"props.uiConfig optional UI configuration\"],[\"param\",\"props.children react components that should have this accounts context\"],[\"returns\",\"The element to wrap your application in for Alchemy Accounts context.\"]],\"start\":682,\"length\":22,\"target\":\"AlchemyAccountProvider\",\"line\":21,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) const QueryClientProvider: ({ client, children, }: QueryClientProviderProps) => JSX.Element\\nimport QueryClientProvider\",\"start\":714,\"length\":19,\"target\":\"QueryClientProvider\",\"line\":22,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const Suspense: ExoticComponent\\nimport Suspense\",\"start\":741,\"length\":8,\"target\":\"Suspense\",\"line\":23,\"character\":6}],\"tags\":[]}],[\"2ee143d37e9c38770290c9f94fc1094754ef0650581fc657a123bce6f64747ed\",{\"code\":\"import { createConfig, cookieStorage } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nexport const queryClient = new QueryClient();\\n\\nexport const config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n storage: cookieStorage,\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const cookieStorage: (config?: {\\n sessionLength: number;\\n}) => Storage\\nimport cookieStorage\",\"docs\":\"Function to create cookie based Storage\",\"tags\":[[\"param\",\"config optional config object that allows you to set the session length\"],[\"param\",\"config.sessionLength the length of the session in milliseconds\"],[\"returns\",\"an instance of a browser storage object that leverages cookies\"]],\"start\":23,\"length\":13,\"target\":\"cookieStorage\",\"line\":0,\"character\":23},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":75,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class QueryClient\\nimport QueryClient\",\"start\":121,\"length\":11,\"target\":\"QueryClient\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const queryClient: QueryClient\",\"start\":179,\"length\":11,\"target\":\"queryClient\",\"line\":4,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) new QueryClient(config?: QueryClientConfig | undefined): QueryClient\\nimport QueryClient\",\"start\":197,\"length\":11,\"target\":\"QueryClient\",\"line\":4,\"character\":31},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":226,\"length\":6,\"target\":\"config\",\"line\":6,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":235,\"length\":12,\"target\":\"createConfig\",\"line\":6,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) rpcUrl: string\",\"start\":252,\"length\":6,\"target\":\"rpcUrl\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":274,\"length\":5,\"target\":\"chain\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":281,\"length\":7,\"target\":\"sepolia\",\"line\":8,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) ssr: true\",\"start\":292,\"length\":3,\"target\":\"ssr\",\"line\":9,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) storage: (config?: {\\n sessionLength: number;\\n} | undefined) => Storage\",\"start\":305,\"length\":7,\"target\":\"storage\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const cookieStorage: (config?: {\\n sessionLength: number;\\n}) => Storage\\nimport cookieStorage\",\"docs\":\"Function to create cookie based Storage\",\"tags\":[[\"param\",\"config optional config object that allows you to set the session length\"],[\"param\",\"config.sessionLength the length of the session in milliseconds\"],[\"returns\",\"an instance of a browser storage object that leverages cookies\"]],\"start\":314,\"length\":13,\"target\":\"cookieStorage\",\"line\":10,\"character\":11}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":true,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,13]],\"flagNotations\":[{\"type\":\"handbookOptions\",\"name\":\"noErrors\",\"value\":true,\"start\":0,\"end\":13}],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"// @noErrors\\nimport { createConfig, cookieStorage } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nexport const queryClient = new QueryClient();\\n\\nexport const config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n storage: cookieStorage,\\n});\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const cookieStorage: (config?: {\\n sessionLength: number;\\n}) => Storage\\nimport cookieStorage\",\"docs\":\"Function to create cookie based Storage\",\"tags\":[[\"param\",\"config optional config object that allows you to set the session length\"],[\"param\",\"config.sessionLength the length of the session in milliseconds\"],[\"returns\",\"an instance of a browser storage object that leverages cookies\"]],\"start\":23,\"length\":13,\"target\":\"cookieStorage\",\"line\":0,\"character\":23},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":75,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class QueryClient\\nimport QueryClient\",\"start\":121,\"length\":11,\"target\":\"QueryClient\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const queryClient: QueryClient\",\"start\":179,\"length\":11,\"target\":\"queryClient\",\"line\":4,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) new QueryClient(config?: QueryClientConfig | undefined): QueryClient\\nimport QueryClient\",\"start\":197,\"length\":11,\"target\":\"QueryClient\",\"line\":4,\"character\":31},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":226,\"length\":6,\"target\":\"config\",\"line\":6,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":235,\"length\":12,\"target\":\"createConfig\",\"line\":6,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) rpcUrl: string\",\"start\":252,\"length\":6,\"target\":\"rpcUrl\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":274,\"length\":5,\"target\":\"chain\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":281,\"length\":7,\"target\":\"sepolia\",\"line\":8,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) ssr: true\",\"start\":292,\"length\":3,\"target\":\"ssr\",\"line\":9,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) storage: (config?: {\\n sessionLength: number;\\n} | undefined) => Storage\",\"start\":305,\"length\":7,\"target\":\"storage\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const cookieStorage: (config?: {\\n sessionLength: number;\\n}) => Storage\\nimport cookieStorage\",\"docs\":\"Function to create cookie based Storage\",\"tags\":[[\"param\",\"config optional config object that allows you to set the session length\"],[\"param\",\"config.sessionLength the length of the session in milliseconds\"],[\"returns\",\"an instance of a browser storage object that leverages cookies\"]],\"start\":314,\"length\":13,\"target\":\"cookieStorage\",\"line\":10,\"character\":11}],\"tags\":[]}],[\"127fa87bb2732001eed9bac8a223a4acb994ec0b3d25d4a2e96ba544bf3740ca\",{\"code\":\"import { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const client = createAlchemySmartAccountClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n policyId: \\\"YOUR_POLICY_ID\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) function createAlchemySmartAccountClient({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig): AlchemySmartAccountClient, TContext>\\nimport createAlchemySmartAccountClient\",\"start\":9,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":42,\"length\":7,\"target\":\"sepolia\",\"line\":0,\"character\":42},{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":88,\"length\":18,\"target\":\"createLightAccount\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":279,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":330,\"length\":4,\"target\":\"http\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function generatePrivateKey(): Hex\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":359,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":416,\"length\":6,\"target\":\"client\",\"line\":8,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createAlchemySmartAccountClient, \\\"v2.0.0\\\">, UserOperationContext | undefined>({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig<...>): {\\n ...;\\n}\\nimport createAlchemySmartAccountClient\",\"start\":425,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":8,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":461,\"length\":6,\"target\":\"apiKey\",\"line\":9,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":487,\"length\":8,\"target\":\"policyId\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":517,\"length\":5,\"target\":\"chain\",\"line\":11,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":524,\"length\":7,\"target\":\"sepolia\",\"line\":11,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: LightAccount, \\\"v2.0.0\\\"> | undefined\",\"start\":535,\"length\":7,\"target\":\"account\",\"line\":12,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":550,\"length\":18,\"target\":\"createLightAccount\",\"line\":12,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":575,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":582,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":595,\"length\":9,\"target\":\"transport\",\"line\":14,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":606,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":614,\"length\":7,\"target\":\"sepolia\",\"line\":14,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":622,\"length\":7,\"target\":\"rpcUrls\",\"line\":14,\"character\":31},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":630,\"length\":7,\"target\":\"alchemy\",\"line\":14,\"character\":39},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":638,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":47},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":667,\"length\":6,\"target\":\"signer\",\"line\":15,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":675,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":15,\"character\":12},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":694,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":15,\"character\":31},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":720,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":15,\"character\":57}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"import { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const client = createAlchemySmartAccountClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n policyId: \\\"YOUR_POLICY_ID\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) function createAlchemySmartAccountClient({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig): AlchemySmartAccountClient, TContext>\\nimport createAlchemySmartAccountClient\",\"start\":9,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":42,\"length\":7,\"target\":\"sepolia\",\"line\":0,\"character\":42},{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":88,\"length\":18,\"target\":\"createLightAccount\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":279,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":330,\"length\":4,\"target\":\"http\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function generatePrivateKey(): Hex\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":359,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":416,\"length\":6,\"target\":\"client\",\"line\":8,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createAlchemySmartAccountClient, \\\"v2.0.0\\\">, UserOperationContext | undefined>({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig<...>): {\\n ...;\\n}\\nimport createAlchemySmartAccountClient\",\"start\":425,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":8,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":461,\"length\":6,\"target\":\"apiKey\",\"line\":9,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":487,\"length\":8,\"target\":\"policyId\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":517,\"length\":5,\"target\":\"chain\",\"line\":11,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":524,\"length\":7,\"target\":\"sepolia\",\"line\":11,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: LightAccount, \\\"v2.0.0\\\"> | undefined\",\"start\":535,\"length\":7,\"target\":\"account\",\"line\":12,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":550,\"length\":18,\"target\":\"createLightAccount\",\"line\":12,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":575,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":582,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":595,\"length\":9,\"target\":\"transport\",\"line\":14,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":606,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":614,\"length\":7,\"target\":\"sepolia\",\"line\":14,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":622,\"length\":7,\"target\":\"rpcUrls\",\"line\":14,\"character\":31},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":630,\"length\":7,\"target\":\"alchemy\",\"line\":14,\"character\":39},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":638,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":47},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":667,\"length\":6,\"target\":\"signer\",\"line\":15,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":675,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":15,\"character\":12},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":694,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":15,\"character\":31},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":720,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":15,\"character\":57}],\"tags\":[]}],[\"72f0caf8431c633a5ffe76325d43bc82c1b335c871456f55fff705e8f89344dd\",{\"code\":\"import { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":9,\"length\":6,\"target\":\"client\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const hash: `0x${string}`\",\"start\":44,\"length\":4,\"target\":\"hash\",\"line\":2,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":59,\"length\":6,\"target\":\"client\",\"line\":2,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) sendUserOperation: (args: SendUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined, keyof EntryPointRegistryBase<...>>) => Promise<...>\",\"start\":66,\"length\":17,\"target\":\"sendUserOperation\",\"line\":2,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":88,\"length\":2,\"target\":\"uo\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":98,\"length\":6,\"target\":\"target\",\"line\":4,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":130,\"length\":4,\"target\":\"data\",\"line\":5,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":146,\"length\":5,\"target\":\"value\",\"line\":6,\"character\":4}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,817]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"client.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/client.ts\",\"content\":\"// @filename: client.ts\\n\\nimport { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const client = createAlchemySmartAccountClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n policyId: \\\"YOUR_POLICY_ID\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":778,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":9,\"length\":6,\"target\":\"client\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const hash: `0x${string}`\",\"start\":44,\"length\":4,\"target\":\"hash\",\"line\":2,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":59,\"length\":6,\"target\":\"client\",\"line\":2,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) sendUserOperation: (args: SendUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined, keyof EntryPointRegistryBase<...>>) => Promise<...>\",\"start\":66,\"length\":17,\"target\":\"sendUserOperation\",\"line\":2,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":88,\"length\":2,\"target\":\"uo\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":98,\"length\":6,\"target\":\"target\",\"line\":4,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":130,\"length\":4,\"target\":\"data\",\"line\":5,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":146,\"length\":5,\"target\":\"value\",\"line\":6,\"character\":4}],\"tags\":[]}],[\"0b2c45fd6da56025f7b13ef19c67b0993cd7cae62360db6eff57d3160c0ea621\",{\"code\":\"import {\\n createSmartAccountClient,\\n erc7677Middleware,\\n split,\\n} from \\\"@aa-sdk/core\\\";\\nimport {\\n sepolia,\\n alchemyFeeEstimator,\\n createAlchemyPublicRpcClient,\\n} from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http, custom } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\n// 1. create an alchemy rpc client\\nconst alchemyRpcClient = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n});\\n\\n// 2. create a split transport to route traffic between the paymaster and the bundler\\nconst transport = split({\\n overrides: [\\n {\\n methods: [\\\"pm_getPaymasterStubData\\\", \\\"pm_getPaymasterData\\\"],\\n transport: http(\\\"PAYMASTER_URL\\\"),\\n },\\n ],\\n fallback: custom(alchemyRpcClient),\\n});\\n\\n// 3. create smart account client\\nexport const client = createSmartAccountClient({\\n transport,\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n // this is required to get correct fee estimates when using our Bundler RPC\\n feeEstimator: alchemyFeeEstimator(alchemyRpcClient),\\n ...erc7677Middleware(),\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) function createSmartAccountClient(config: SmartAccountClientConfig): SmartAccountClient\\nimport createSmartAccountClient\",\"start\":11,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":1,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function erc7677Middleware | undefined = Record | undefined>(params?: Erc7677MiddlewareParams): Pick\\nimport erc7677Middleware\",\"docs\":\"Middleware function for interacting with ERC-7677 enabled clients. It supports resolving paymaster and data fields for user operations.\\nThis middleware assumes that your RPC provider supports the ERC-7677 methods (pm_getPaymasterStubData and pm_getPaymasterData).\",\"tags\":[[\"example\",\"```ts\\nimport { createSmartAccountClient, erc7677Middleware } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createSmartAccountClient({\\n transport: http(\\\"rpc-url\\\"),\\n chain: sepolia,\\n // this assumes that your RPC provider supports the ERC-7677 methods AND takes no context\\n ...erc7677Middleware(),\\n})\\n```\"],[\"param\",\"params Middleware parameters including context function or object. Context can be resolved dynamically by passing in a function which takes in the context at the time of sending a user op\"],[\"returns\",\"An object containing middleware functions `dummyPaymasterAndData` and `paymasterAndData` for processing user operations with the paymaster data\"]],\"start\":39,\"length\":17,\"target\":\"erc7677Middleware\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const split: (params: SplitTransportParams) => CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":60,\"length\":5,\"target\":\"split\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":101,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const alchemyFeeEstimator: (client: C) => ClientMiddlewareFn\\nimport alchemyFeeEstimator\",\"docs\":\"Function that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\",\"tags\":[[\"example\",\"```ts\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\n feeEstimator: alchemyFeeEstimator(bundlerClient),\\n ...otherParams\\n});\\n```\"],[\"param\",\"client The client with Alchemy methods\"],[\"returns\",\"A middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\"]],\"start\":112,\"length\":19,\"target\":\"alchemyFeeEstimator\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const createAlchemyPublicRpcClient: ({ chain: chain_, connectionConfig, fetchOptions, }: {\\n connectionConfig: ConnectionConfig;\\n chain: Chain;\\n fetchOptions?: Omit | undefined;\\n}) => ClientWithAlchemyMethods\\nimport createAlchemyPublicRpcClient\",\"docs\":\"Creates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\",\"tags\":[[\"example\",\"```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"your-api-key\\\",\\n }\\n});\\n```\"],[\"param\",\"params The parameters for creating the Alchemy public RPC client\"],[\"param\",\"params.connectionConfig The connection configuration containing the RPC URL and API key\"],[\"param\",\"params.chain The blockchain chain configuration\"],[\"param\",\"params.fetchOptions Optional fetch configuration for HTTP transport\"],[\"returns\",\"A client object tailored with Alchemy methods and capabilities to interact with the blockchain\"]],\"start\":135,\"length\":28,\"target\":\"createAlchemyPublicRpcClient\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":203,\"length\":18,\"target\":\"createLightAccount\",\"line\":10,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":394,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":13,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":445,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function custom(provider: TProvider, config?: CustomTransportConfig): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":451,\"length\":6,\"target\":\"custom\",\"line\":14,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) function generatePrivateKey(): Hex\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":482,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":15,\"character\":9},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":567,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":18,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createAlchemyPublicRpcClient({ chain: chain_, connectionConfig, fetchOptions, }: {\\n connectionConfig: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n } | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n } | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n } | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n };\\n chain: Chain;\\n fetchOptions?: Omit<...> | undefined;\\n}): ClientWithAlchemyMethods\\nimport createAlchemyPublicRpcClient\",\"docs\":\"Creates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\",\"tags\":[[\"example\",\"```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"your-api-key\\\",\\n }\\n});\\n```\"],[\"param\",\"params The parameters for creating the Alchemy public RPC client\"],[\"param\",\"params.connectionConfig The connection configuration containing the RPC URL and API key\"],[\"param\",\"params.chain The blockchain chain configuration\"],[\"param\",\"params.fetchOptions Optional fetch configuration for HTTP transport\"],[\"returns\",\"A client object tailored with Alchemy methods and capabilities to interact with the blockchain\"]],\"start\":586,\"length\":28,\"target\":\"createAlchemyPublicRpcClient\",\"line\":18,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":619,\"length\":5,\"target\":\"chain\",\"line\":19,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":626,\"length\":7,\"target\":\"sepolia\",\"line\":19,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) connectionConfig: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n} | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n} | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n} | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n}\",\"start\":637,\"length\":16,\"target\":\"connectionConfig\",\"line\":20,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":661,\"length\":6,\"target\":\"apiKey\",\"line\":21,\"character\":4},{\"type\":\"hover\",\"text\":\"const transport: CustomTransport\",\"start\":782,\"length\":9,\"target\":\"transport\",\"line\":26,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) split(params: SplitTransportParams): CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":794,\"length\":5,\"target\":\"split\",\"line\":26,\"character\":18},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.overrides: {\\n methods: string[];\\n transport: Transport;\\n}[]\",\"start\":804,\"length\":9,\"target\":\"overrides\",\"line\":27,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) methods: string[]\",\"start\":829,\"length\":7,\"target\":\"methods\",\"line\":29,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) transport: Transport\",\"start\":896,\"length\":9,\"target\":\"transport\",\"line\":30,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":907,\"length\":4,\"target\":\"http\",\"line\":30,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.fallback: Transport\",\"start\":944,\"length\":8,\"target\":\"fallback\",\"line\":33,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) custom(provider: ClientWithAlchemyMethods, config?: CustomTransportConfig | undefined): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":954,\"length\":6,\"target\":\"custom\",\"line\":33,\"character\":12},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":961,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":33,\"character\":19},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: unknown;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 76 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":1032,\"length\":6,\"target\":\"client\",\"line\":37,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createSmartAccountClient, \\\"v2.0.0\\\">, UserOperationContext | undefined>(config: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createSmartAccountClient\",\"start\":1041,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":37,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"docs\":\"The RPC transport\",\"start\":1070,\"length\":9,\"target\":\"transport\",\"line\":38,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | undefined\",\"docs\":\"Chain for the client.\",\"start\":1083,\"length\":5,\"target\":\"chain\",\"line\":39,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1090,\"length\":7,\"target\":\"sepolia\",\"line\":39,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: LightAccount, \\\"v2.0.0\\\"> | undefined\",\"start\":1101,\"length\":7,\"target\":\"account\",\"line\":40,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":1116,\"length\":18,\"target\":\"createLightAccount\",\"line\":40,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":1141,\"length\":5,\"target\":\"chain\",\"line\":41,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1148,\"length\":7,\"target\":\"sepolia\",\"line\":41,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":1161,\"length\":9,\"target\":\"transport\",\"line\":42,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":1172,\"length\":4,\"target\":\"http\",\"line\":42,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1180,\"length\":7,\"target\":\"sepolia\",\"line\":42,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":1188,\"length\":7,\"target\":\"rpcUrls\",\"line\":42,\"character\":31},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":1196,\"length\":7,\"target\":\"alchemy\",\"line\":42,\"character\":39},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":1204,\"length\":4,\"target\":\"http\",\"line\":42,\"character\":47},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":1233,\"length\":6,\"target\":\"signer\",\"line\":43,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":1241,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":43,\"character\":12},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":1260,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":43,\"character\":31},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":1286,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":43,\"character\":57},{\"type\":\"hover\",\"text\":\"(property) feeEstimator?: ClientMiddlewareFn | undefined\",\"start\":1395,\"length\":12,\"target\":\"feeEstimator\",\"line\":46,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) alchemyFeeEstimator(client: ClientWithAlchemyMethods): ClientMiddlewareFn\\nimport alchemyFeeEstimator\",\"docs\":\"Function that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\",\"tags\":[[\"example\",\"```ts\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\n feeEstimator: alchemyFeeEstimator(bundlerClient),\\n ...otherParams\\n});\\n```\"],[\"param\",\"client The client with Alchemy methods\"],[\"returns\",\"A middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\"]],\"start\":1409,\"length\":19,\"target\":\"alchemyFeeEstimator\",\"line\":46,\"character\":16},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":1429,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":46,\"character\":36},{\"type\":\"hover\",\"text\":\"(alias) erc7677Middleware | undefined>(params?: Erc7677MiddlewareParams | undefined, keyof EntryPointRegistryBase> | undefined): Pick<...>\\nimport erc7677Middleware\",\"docs\":\"Middleware function for interacting with ERC-7677 enabled clients. It supports resolving paymaster and data fields for user operations.\\nThis middleware assumes that your RPC provider supports the ERC-7677 methods (pm_getPaymasterStubData and pm_getPaymasterData).\",\"tags\":[[\"example\",\"```ts\\nimport { createSmartAccountClient, erc7677Middleware } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createSmartAccountClient({\\n transport: http(\\\"rpc-url\\\"),\\n chain: sepolia,\\n // this assumes that your RPC provider supports the ERC-7677 methods AND takes no context\\n ...erc7677Middleware(),\\n})\\n```\"],[\"param\",\"params Middleware parameters including context function or object. Context can be resolved dynamically by passing in a function which takes in the context at the time of sending a user op\"],[\"returns\",\"An object containing middleware functions `dummyPaymasterAndData` and `paymasterAndData` for processing user operations with the paymaster data\"]],\"start\":1453,\"length\":17,\"target\":\"erc7677Middleware\",\"line\":47,\"character\":5}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"import {\\n createSmartAccountClient,\\n erc7677Middleware,\\n split,\\n} from \\\"@aa-sdk/core\\\";\\nimport {\\n sepolia,\\n alchemyFeeEstimator,\\n createAlchemyPublicRpcClient,\\n} from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http, custom } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\n// 1. create an alchemy rpc client\\nconst alchemyRpcClient = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n});\\n\\n// 2. create a split transport to route traffic between the paymaster and the bundler\\nconst transport = split({\\n overrides: [\\n {\\n methods: [\\\"pm_getPaymasterStubData\\\", \\\"pm_getPaymasterData\\\"],\\n transport: http(\\\"PAYMASTER_URL\\\"),\\n },\\n ],\\n fallback: custom(alchemyRpcClient),\\n});\\n\\n// 3. create smart account client\\nexport const client = createSmartAccountClient({\\n transport,\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n // this is required to get correct fee estimates when using our Bundler RPC\\n feeEstimator: alchemyFeeEstimator(alchemyRpcClient),\\n ...erc7677Middleware(),\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) function createSmartAccountClient(config: SmartAccountClientConfig): SmartAccountClient\\nimport createSmartAccountClient\",\"start\":11,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":1,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function erc7677Middleware | undefined = Record | undefined>(params?: Erc7677MiddlewareParams): Pick\\nimport erc7677Middleware\",\"docs\":\"Middleware function for interacting with ERC-7677 enabled clients. It supports resolving paymaster and data fields for user operations.\\nThis middleware assumes that your RPC provider supports the ERC-7677 methods (pm_getPaymasterStubData and pm_getPaymasterData).\",\"tags\":[[\"example\",\"```ts\\nimport { createSmartAccountClient, erc7677Middleware } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createSmartAccountClient({\\n transport: http(\\\"rpc-url\\\"),\\n chain: sepolia,\\n // this assumes that your RPC provider supports the ERC-7677 methods AND takes no context\\n ...erc7677Middleware(),\\n})\\n```\"],[\"param\",\"params Middleware parameters including context function or object. Context can be resolved dynamically by passing in a function which takes in the context at the time of sending a user op\"],[\"returns\",\"An object containing middleware functions `dummyPaymasterAndData` and `paymasterAndData` for processing user operations with the paymaster data\"]],\"start\":39,\"length\":17,\"target\":\"erc7677Middleware\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const split: (params: SplitTransportParams) => CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":60,\"length\":5,\"target\":\"split\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":101,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const alchemyFeeEstimator: (client: C) => ClientMiddlewareFn\\nimport alchemyFeeEstimator\",\"docs\":\"Function that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\",\"tags\":[[\"example\",\"```ts\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\n feeEstimator: alchemyFeeEstimator(bundlerClient),\\n ...otherParams\\n});\\n```\"],[\"param\",\"client The client with Alchemy methods\"],[\"returns\",\"A middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\"]],\"start\":112,\"length\":19,\"target\":\"alchemyFeeEstimator\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const createAlchemyPublicRpcClient: ({ chain: chain_, connectionConfig, fetchOptions, }: {\\n connectionConfig: ConnectionConfig;\\n chain: Chain;\\n fetchOptions?: Omit | undefined;\\n}) => ClientWithAlchemyMethods\\nimport createAlchemyPublicRpcClient\",\"docs\":\"Creates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\",\"tags\":[[\"example\",\"```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"your-api-key\\\",\\n }\\n});\\n```\"],[\"param\",\"params The parameters for creating the Alchemy public RPC client\"],[\"param\",\"params.connectionConfig The connection configuration containing the RPC URL and API key\"],[\"param\",\"params.chain The blockchain chain configuration\"],[\"param\",\"params.fetchOptions Optional fetch configuration for HTTP transport\"],[\"returns\",\"A client object tailored with Alchemy methods and capabilities to interact with the blockchain\"]],\"start\":135,\"length\":28,\"target\":\"createAlchemyPublicRpcClient\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":203,\"length\":18,\"target\":\"createLightAccount\",\"line\":10,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":394,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":13,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":445,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function custom(provider: TProvider, config?: CustomTransportConfig): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":451,\"length\":6,\"target\":\"custom\",\"line\":14,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) function generatePrivateKey(): Hex\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":482,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":15,\"character\":9},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":567,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":18,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createAlchemyPublicRpcClient({ chain: chain_, connectionConfig, fetchOptions, }: {\\n connectionConfig: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n } | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n } | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n } | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n };\\n chain: Chain;\\n fetchOptions?: Omit<...> | undefined;\\n}): ClientWithAlchemyMethods\\nimport createAlchemyPublicRpcClient\",\"docs\":\"Creates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\",\"tags\":[[\"example\",\"```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"your-api-key\\\",\\n }\\n});\\n```\"],[\"param\",\"params The parameters for creating the Alchemy public RPC client\"],[\"param\",\"params.connectionConfig The connection configuration containing the RPC URL and API key\"],[\"param\",\"params.chain The blockchain chain configuration\"],[\"param\",\"params.fetchOptions Optional fetch configuration for HTTP transport\"],[\"returns\",\"A client object tailored with Alchemy methods and capabilities to interact with the blockchain\"]],\"start\":586,\"length\":28,\"target\":\"createAlchemyPublicRpcClient\",\"line\":18,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":619,\"length\":5,\"target\":\"chain\",\"line\":19,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":626,\"length\":7,\"target\":\"sepolia\",\"line\":19,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) connectionConfig: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n} | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n} | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n} | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n}\",\"start\":637,\"length\":16,\"target\":\"connectionConfig\",\"line\":20,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":661,\"length\":6,\"target\":\"apiKey\",\"line\":21,\"character\":4},{\"type\":\"hover\",\"text\":\"const transport: CustomTransport\",\"start\":782,\"length\":9,\"target\":\"transport\",\"line\":26,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) split(params: SplitTransportParams): CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":794,\"length\":5,\"target\":\"split\",\"line\":26,\"character\":18},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.overrides: {\\n methods: string[];\\n transport: Transport;\\n}[]\",\"start\":804,\"length\":9,\"target\":\"overrides\",\"line\":27,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) methods: string[]\",\"start\":829,\"length\":7,\"target\":\"methods\",\"line\":29,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) transport: Transport\",\"start\":896,\"length\":9,\"target\":\"transport\",\"line\":30,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":907,\"length\":4,\"target\":\"http\",\"line\":30,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.fallback: Transport\",\"start\":944,\"length\":8,\"target\":\"fallback\",\"line\":33,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) custom(provider: ClientWithAlchemyMethods, config?: CustomTransportConfig | undefined): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":954,\"length\":6,\"target\":\"custom\",\"line\":33,\"character\":12},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":961,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":33,\"character\":19},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: unknown;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 76 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":1032,\"length\":6,\"target\":\"client\",\"line\":37,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createSmartAccountClient, \\\"v2.0.0\\\">, UserOperationContext | undefined>(config: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createSmartAccountClient\",\"start\":1041,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":37,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"docs\":\"The RPC transport\",\"start\":1070,\"length\":9,\"target\":\"transport\",\"line\":38,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | undefined\",\"docs\":\"Chain for the client.\",\"start\":1083,\"length\":5,\"target\":\"chain\",\"line\":39,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1090,\"length\":7,\"target\":\"sepolia\",\"line\":39,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: LightAccount, \\\"v2.0.0\\\"> | undefined\",\"start\":1101,\"length\":7,\"target\":\"account\",\"line\":40,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":1116,\"length\":18,\"target\":\"createLightAccount\",\"line\":40,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":1141,\"length\":5,\"target\":\"chain\",\"line\":41,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1148,\"length\":7,\"target\":\"sepolia\",\"line\":41,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":1161,\"length\":9,\"target\":\"transport\",\"line\":42,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":1172,\"length\":4,\"target\":\"http\",\"line\":42,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1180,\"length\":7,\"target\":\"sepolia\",\"line\":42,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":1188,\"length\":7,\"target\":\"rpcUrls\",\"line\":42,\"character\":31},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":1196,\"length\":7,\"target\":\"alchemy\",\"line\":42,\"character\":39},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":1204,\"length\":4,\"target\":\"http\",\"line\":42,\"character\":47},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":1233,\"length\":6,\"target\":\"signer\",\"line\":43,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":1241,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":43,\"character\":12},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":1260,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":43,\"character\":31},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":1286,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":43,\"character\":57},{\"type\":\"hover\",\"text\":\"(property) feeEstimator?: ClientMiddlewareFn | undefined\",\"start\":1395,\"length\":12,\"target\":\"feeEstimator\",\"line\":46,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) alchemyFeeEstimator(client: ClientWithAlchemyMethods): ClientMiddlewareFn\\nimport alchemyFeeEstimator\",\"docs\":\"Function that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\",\"tags\":[[\"example\",\"```ts\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\n feeEstimator: alchemyFeeEstimator(bundlerClient),\\n ...otherParams\\n});\\n```\"],[\"param\",\"client The client with Alchemy methods\"],[\"returns\",\"A middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\"]],\"start\":1409,\"length\":19,\"target\":\"alchemyFeeEstimator\",\"line\":46,\"character\":16},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":1429,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":46,\"character\":36},{\"type\":\"hover\",\"text\":\"(alias) erc7677Middleware | undefined>(params?: Erc7677MiddlewareParams | undefined, keyof EntryPointRegistryBase> | undefined): Pick<...>\\nimport erc7677Middleware\",\"docs\":\"Middleware function for interacting with ERC-7677 enabled clients. It supports resolving paymaster and data fields for user operations.\\nThis middleware assumes that your RPC provider supports the ERC-7677 methods (pm_getPaymasterStubData and pm_getPaymasterData).\",\"tags\":[[\"example\",\"```ts\\nimport { createSmartAccountClient, erc7677Middleware } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createSmartAccountClient({\\n transport: http(\\\"rpc-url\\\"),\\n chain: sepolia,\\n // this assumes that your RPC provider supports the ERC-7677 methods AND takes no context\\n ...erc7677Middleware(),\\n})\\n```\"],[\"param\",\"params Middleware parameters including context function or object. Context can be resolved dynamically by passing in a function which takes in the context at the time of sending a user op\"],[\"returns\",\"An object containing middleware functions `dummyPaymasterAndData` and `paymasterAndData` for processing user operations with the paymaster data\"]],\"start\":1453,\"length\":17,\"target\":\"erc7677Middleware\",\"line\":47,\"character\":5}],\"tags\":[]}],[\"9ba7a25b61ffcc530a7d235fc8945b84b81b1a03ff29b3823e9478811d8e82a2\",{\"code\":\"import {\\n createSmartAccountClient,\\n split,\\n deepHexlify,\\n resolveProperties,\\n} from \\\"@aa-sdk/core\\\";\\nimport {\\n sepolia,\\n alchemyFeeEstimator,\\n createAlchemyPublicRpcClient,\\n} from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http, custom } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\n// 1. create an alchemy rpc client\\nconst alchemyRpcClient = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n});\\n\\n// 2. create a split transport to route traffic between the paymaster and the bundler\\nconst transport = split({\\n overrides: [\\n {\\n methods: [\\\"pm_sponsorUserOperation\\\"],\\n // TODO: Replace with your stackup API key here (https://docs.stackup.sh/docs/paymaster-api)\\n transport: http(\\\"https://api.stackup.sh/v1/paymaster/STACKUP_API_KEY\\\"),\\n },\\n ],\\n fallback: custom(alchemyRpcClient),\\n});\\n\\n// 3. create smart account client\\nexport const client = createSmartAccountClient({\\n transport,\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: custom(alchemyRpcClient),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n // Bypasses alchemy gas estimation and instead uses Stackup for gas estimation\\n // If your paymaster doesn't provide gas estimation, then don't replace the gasEstimator\\n gasEstimator: async (userOp) => ({\\n ...userOp,\\n callGasLimit: \\\"0x0\\\",\\n preVerificationGas: \\\"0x0\\\",\\n verificationGasLimit: \\\"0x0\\\",\\n }),\\n // this is required to get correct fee estimates when using our Bundler RPC\\n feeEstimator: alchemyFeeEstimator(alchemyRpcClient),\\n dummyPaymasterAndData: async (userop) => ({\\n ...userop,\\n paymasterAndData: \\\"0x\\\",\\n }),\\n paymasterAndData: async (userop, { client, account }) => {\\n const pmResponse: any = await client.request({\\n // @ts-ignore\\n method: \\\"pm_sponsorUserOperation\\\",\\n params: [\\n deepHexlify(await resolveProperties(userop)),\\n account.getEntryPoint().address,\\n {\\n // @ts-ignore\\n type: \\\"payg\\\", // Replace with ERC20 context based on stackups documentation\\n },\\n ],\\n });\\n return {\\n ...userop,\\n ...pmResponse,\\n };\\n },\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) function createSmartAccountClient(config: SmartAccountClientConfig): SmartAccountClient\\nimport createSmartAccountClient\",\"start\":11,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":1,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const split: (params: SplitTransportParams) => CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":39,\"length\":5,\"target\":\"split\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function deepHexlify(obj: any): any\\nimport deepHexlify\",\"docs\":\"Recursively converts all values in an object to hex strings\",\"tags\":[[\"param\",\"obj - obj to deep hexlify\"],[\"returns\",\"object with all of its values hexlified\"]],\"start\":48,\"length\":11,\"target\":\"deepHexlify\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function resolveProperties(object: Deferrable): Promise\\nimport resolveProperties\",\"docs\":\"Await all of the properties of a Deferrable object\",\"tags\":[[\"param\",\"object - a Deferrable object\"],[\"returns\",\"the object with its properties resolved\"]],\"start\":63,\"length\":17,\"target\":\"resolveProperties\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":116,\"length\":7,\"target\":\"sepolia\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const alchemyFeeEstimator: (client: C) => ClientMiddlewareFn\\nimport alchemyFeeEstimator\",\"docs\":\"Function that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\",\"tags\":[[\"example\",\"```ts\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\n feeEstimator: alchemyFeeEstimator(bundlerClient),\\n ...otherParams\\n});\\n```\"],[\"param\",\"client The client with Alchemy methods\"],[\"returns\",\"A middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\"]],\"start\":127,\"length\":19,\"target\":\"alchemyFeeEstimator\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const createAlchemyPublicRpcClient: ({ chain: chain_, connectionConfig, fetchOptions, }: {\\n connectionConfig: ConnectionConfig;\\n chain: Chain;\\n fetchOptions?: Omit | undefined;\\n}) => ClientWithAlchemyMethods\\nimport createAlchemyPublicRpcClient\",\"docs\":\"Creates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\",\"tags\":[[\"example\",\"```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"your-api-key\\\",\\n }\\n});\\n```\"],[\"param\",\"params The parameters for creating the Alchemy public RPC client\"],[\"param\",\"params.connectionConfig The connection configuration containing the RPC URL and API key\"],[\"param\",\"params.chain The blockchain chain configuration\"],[\"param\",\"params.fetchOptions Optional fetch configuration for HTTP transport\"],[\"returns\",\"A client object tailored with Alchemy methods and capabilities to interact with the blockchain\"]],\"start\":150,\"length\":28,\"target\":\"createAlchemyPublicRpcClient\",\"line\":9,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":218,\"length\":18,\"target\":\"createLightAccount\",\"line\":11,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":409,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":14,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":460,\"length\":4,\"target\":\"http\",\"line\":15,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function custom(provider: TProvider, config?: CustomTransportConfig): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":466,\"length\":6,\"target\":\"custom\",\"line\":15,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) function generatePrivateKey(): Hex\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":497,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":16,\"character\":9},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":582,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":19,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createAlchemyPublicRpcClient({ chain: chain_, connectionConfig, fetchOptions, }: {\\n connectionConfig: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n } | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n } | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n } | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n };\\n chain: Chain;\\n fetchOptions?: Omit<...> | undefined;\\n}): ClientWithAlchemyMethods\\nimport createAlchemyPublicRpcClient\",\"docs\":\"Creates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\",\"tags\":[[\"example\",\"```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"your-api-key\\\",\\n }\\n});\\n```\"],[\"param\",\"params The parameters for creating the Alchemy public RPC client\"],[\"param\",\"params.connectionConfig The connection configuration containing the RPC URL and API key\"],[\"param\",\"params.chain The blockchain chain configuration\"],[\"param\",\"params.fetchOptions Optional fetch configuration for HTTP transport\"],[\"returns\",\"A client object tailored with Alchemy methods and capabilities to interact with the blockchain\"]],\"start\":601,\"length\":28,\"target\":\"createAlchemyPublicRpcClient\",\"line\":19,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":634,\"length\":5,\"target\":\"chain\",\"line\":20,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":641,\"length\":7,\"target\":\"sepolia\",\"line\":20,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) connectionConfig: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n} | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n} | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n} | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n}\",\"start\":652,\"length\":16,\"target\":\"connectionConfig\",\"line\":21,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":676,\"length\":6,\"target\":\"apiKey\",\"line\":22,\"character\":4},{\"type\":\"hover\",\"text\":\"const transport: CustomTransport\",\"start\":797,\"length\":9,\"target\":\"transport\",\"line\":27,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) split(params: SplitTransportParams): CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":809,\"length\":5,\"target\":\"split\",\"line\":27,\"character\":18},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.overrides: {\\n methods: string[];\\n transport: Transport;\\n}[]\",\"start\":819,\"length\":9,\"target\":\"overrides\",\"line\":28,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) methods: string[]\",\"start\":844,\"length\":7,\"target\":\"methods\",\"line\":30,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) transport: Transport\",\"start\":987,\"length\":9,\"target\":\"transport\",\"line\":32,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":998,\"length\":4,\"target\":\"http\",\"line\":32,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.fallback: Transport\",\"start\":1073,\"length\":8,\"target\":\"fallback\",\"line\":35,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) custom(provider: ClientWithAlchemyMethods, config?: CustomTransportConfig | undefined): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":1083,\"length\":6,\"target\":\"custom\",\"line\":35,\"character\":12},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":1090,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":35,\"character\":19},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: unknown;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 76 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":1161,\"length\":6,\"target\":\"client\",\"line\":39,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createSmartAccountClient, \\\"v2.0.0\\\">, UserOperationContext | undefined>(config: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createSmartAccountClient\",\"start\":1170,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":39,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"docs\":\"The RPC transport\",\"start\":1199,\"length\":9,\"target\":\"transport\",\"line\":40,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | undefined\",\"docs\":\"Chain for the client.\",\"start\":1212,\"length\":5,\"target\":\"chain\",\"line\":41,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1219,\"length\":7,\"target\":\"sepolia\",\"line\":41,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: LightAccount, \\\"v2.0.0\\\"> | undefined\",\"start\":1230,\"length\":7,\"target\":\"account\",\"line\":42,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":1245,\"length\":18,\"target\":\"createLightAccount\",\"line\":42,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":1270,\"length\":5,\"target\":\"chain\",\"line\":43,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1277,\"length\":7,\"target\":\"sepolia\",\"line\":43,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"start\":1290,\"length\":9,\"target\":\"transport\",\"line\":44,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) custom(provider: ClientWithAlchemyMethods, config?: CustomTransportConfig | undefined): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":1301,\"length\":6,\"target\":\"custom\",\"line\":44,\"character\":15},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":1308,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":44,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":1331,\"length\":6,\"target\":\"signer\",\"line\":45,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":1339,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":45,\"character\":12},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":1358,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":45,\"character\":31},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":1384,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":45,\"character\":57},{\"type\":\"hover\",\"text\":\"(property) gasEstimator?: ClientMiddlewareFn | undefined\",\"start\":1587,\"length\":12,\"target\":\"gasEstimator\",\"line\":49,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userOp: Deferrable>\",\"start\":1608,\"length\":6,\"target\":\"userOp\",\"line\":49,\"character\":23},{\"type\":\"hover\",\"text\":\"(parameter) userOp: Deferrable>\",\"start\":1629,\"length\":6,\"target\":\"userOp\",\"line\":50,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) callGasLimit?: PromiseOrValue[\\\"callGasLimit\\\"]> | undefined\",\"start\":1641,\"length\":12,\"target\":\"callGasLimit\",\"line\":51,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) preVerificationGas?: PromiseOrValue[\\\"preVerificationGas\\\"]> | undefined\",\"start\":1666,\"length\":18,\"target\":\"preVerificationGas\",\"line\":52,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) verificationGasLimit?: PromiseOrValue[\\\"verificationGasLimit\\\"]> | undefined\",\"start\":1697,\"length\":20,\"target\":\"verificationGasLimit\",\"line\":53,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) feeEstimator?: ClientMiddlewareFn | undefined\",\"start\":1812,\"length\":12,\"target\":\"feeEstimator\",\"line\":56,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) alchemyFeeEstimator(client: ClientWithAlchemyMethods): ClientMiddlewareFn\\nimport alchemyFeeEstimator\",\"docs\":\"Function that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\",\"tags\":[[\"example\",\"```ts\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\n feeEstimator: alchemyFeeEstimator(bundlerClient),\\n ...otherParams\\n});\\n```\"],[\"param\",\"client The client with Alchemy methods\"],[\"returns\",\"A middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\"]],\"start\":1826,\"length\":19,\"target\":\"alchemyFeeEstimator\",\"line\":56,\"character\":16},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":1846,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":56,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) dummyPaymasterAndData?: ClientMiddlewareFn | undefined\",\"start\":1867,\"length\":21,\"target\":\"dummyPaymasterAndData\",\"line\":57,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":1897,\"length\":6,\"target\":\"userop\",\"line\":57,\"character\":32},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":1918,\"length\":6,\"target\":\"userop\",\"line\":58,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData: string\",\"start\":1930,\"length\":16,\"target\":\"paymasterAndData\",\"line\":59,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData?: ClientMiddlewareFn | undefined\",\"start\":1962,\"length\":16,\"target\":\"paymasterAndData\",\"line\":61,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":1987,\"length\":6,\"target\":\"userop\",\"line\":61,\"character\":27},{\"type\":\"hover\",\"text\":\"(parameter) client: C extends MiddlewareClient\",\"start\":1997,\"length\":6,\"target\":\"client\",\"line\":61,\"character\":37},{\"type\":\"hover\",\"text\":\"(parameter) account: TAccount extends SmartContractAccount\",\"start\":2005,\"length\":7,\"target\":\"account\",\"line\":61,\"character\":45},{\"type\":\"hover\",\"text\":\"const pmResponse: any\",\"start\":2031,\"length\":10,\"target\":\"pmResponse\",\"line\":62,\"character\":10},{\"type\":\"hover\",\"text\":\"(parameter) client: C extends MiddlewareClient\",\"start\":2055,\"length\":6,\"target\":\"client\",\"line\":62,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) request: (args: {\\n ...;\\n} | ... 43 more ... | {\\n ...;\\n}, options?: EIP1193RequestOptions | undefined) => Promise<...>\",\"docs\":\"Request function wrapped with friendly error handling\",\"start\":2062,\"length\":7,\"target\":\"request\",\"line\":62,\"character\":41},{\"type\":\"hover\",\"text\":\"(property) method: \\\"pm_sponsorUserOperation\\\"\",\"start\":2098,\"length\":6,\"target\":\"method\",\"line\":64,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) params: [any, `0x${string}`, {\\n type: string;\\n}]\",\"start\":2139,\"length\":6,\"target\":\"params\",\"line\":65,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) deepHexlify(obj: any): any\\nimport deepHexlify\",\"docs\":\"Recursively converts all values in an object to hex strings\",\"tags\":[[\"param\",\"obj - obj to deep hexlify\"],[\"returns\",\"object with all of its values hexlified\"]],\"start\":2157,\"length\":11,\"target\":\"deepHexlify\",\"line\":66,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) resolveProperties>(object: Deferrable>): Promise<...>\\nimport resolveProperties\",\"docs\":\"Await all of the properties of a Deferrable object\",\"tags\":[[\"param\",\"object - a Deferrable object\"],[\"returns\",\"the object with its properties resolved\"]],\"start\":2175,\"length\":17,\"target\":\"resolveProperties\",\"line\":66,\"character\":26},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":2193,\"length\":6,\"target\":\"userop\",\"line\":66,\"character\":44},{\"type\":\"hover\",\"text\":\"(parameter) account: TAccount extends SmartContractAccount\",\"start\":2211,\"length\":7,\"target\":\"account\",\"line\":67,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) getEntryPoint: () => EntryPointDef>\",\"start\":2219,\"length\":13,\"target\":\"getEntryPoint\",\"line\":67,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) address: `0x${string}`\",\"start\":2235,\"length\":7,\"target\":\"address\",\"line\":67,\"character\":32},{\"type\":\"hover\",\"text\":\"(property) type: string\",\"start\":2288,\"length\":4,\"target\":\"type\",\"line\":70,\"character\":10},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":2414,\"length\":6,\"target\":\"userop\",\"line\":75,\"character\":9},{\"type\":\"hover\",\"text\":\"const pmResponse: any\",\"start\":2431,\"length\":10,\"target\":\"pmResponse\",\"line\":76,\"character\":9}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"import {\\n createSmartAccountClient,\\n split,\\n deepHexlify,\\n resolveProperties,\\n} from \\\"@aa-sdk/core\\\";\\nimport {\\n sepolia,\\n alchemyFeeEstimator,\\n createAlchemyPublicRpcClient,\\n} from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http, custom } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\n// 1. create an alchemy rpc client\\nconst alchemyRpcClient = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n});\\n\\n// 2. create a split transport to route traffic between the paymaster and the bundler\\nconst transport = split({\\n overrides: [\\n {\\n methods: [\\\"pm_sponsorUserOperation\\\"],\\n // TODO: Replace with your stackup API key here (https://docs.stackup.sh/docs/paymaster-api)\\n transport: http(\\\"https://api.stackup.sh/v1/paymaster/STACKUP_API_KEY\\\"),\\n },\\n ],\\n fallback: custom(alchemyRpcClient),\\n});\\n\\n// 3. create smart account client\\nexport const client = createSmartAccountClient({\\n transport,\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: custom(alchemyRpcClient),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n // Bypasses alchemy gas estimation and instead uses Stackup for gas estimation\\n // If your paymaster doesn't provide gas estimation, then don't replace the gasEstimator\\n gasEstimator: async (userOp) => ({\\n ...userOp,\\n callGasLimit: \\\"0x0\\\",\\n preVerificationGas: \\\"0x0\\\",\\n verificationGasLimit: \\\"0x0\\\",\\n }),\\n // this is required to get correct fee estimates when using our Bundler RPC\\n feeEstimator: alchemyFeeEstimator(alchemyRpcClient),\\n dummyPaymasterAndData: async (userop) => ({\\n ...userop,\\n paymasterAndData: \\\"0x\\\",\\n }),\\n paymasterAndData: async (userop, { client, account }) => {\\n const pmResponse: any = await client.request({\\n // @ts-ignore\\n method: \\\"pm_sponsorUserOperation\\\",\\n params: [\\n deepHexlify(await resolveProperties(userop)),\\n account.getEntryPoint().address,\\n {\\n // @ts-ignore\\n type: \\\"payg\\\", // Replace with ERC20 context based on stackups documentation\\n },\\n ],\\n });\\n return {\\n ...userop,\\n ...pmResponse,\\n };\\n },\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) function createSmartAccountClient(config: SmartAccountClientConfig): SmartAccountClient\\nimport createSmartAccountClient\",\"start\":11,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":1,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const split: (params: SplitTransportParams) => CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":39,\"length\":5,\"target\":\"split\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function deepHexlify(obj: any): any\\nimport deepHexlify\",\"docs\":\"Recursively converts all values in an object to hex strings\",\"tags\":[[\"param\",\"obj - obj to deep hexlify\"],[\"returns\",\"object with all of its values hexlified\"]],\"start\":48,\"length\":11,\"target\":\"deepHexlify\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function resolveProperties(object: Deferrable): Promise\\nimport resolveProperties\",\"docs\":\"Await all of the properties of a Deferrable object\",\"tags\":[[\"param\",\"object - a Deferrable object\"],[\"returns\",\"the object with its properties resolved\"]],\"start\":63,\"length\":17,\"target\":\"resolveProperties\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":116,\"length\":7,\"target\":\"sepolia\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const alchemyFeeEstimator: (client: C) => ClientMiddlewareFn\\nimport alchemyFeeEstimator\",\"docs\":\"Function that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\",\"tags\":[[\"example\",\"```ts\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\n feeEstimator: alchemyFeeEstimator(bundlerClient),\\n ...otherParams\\n});\\n```\"],[\"param\",\"client The client with Alchemy methods\"],[\"returns\",\"A middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\"]],\"start\":127,\"length\":19,\"target\":\"alchemyFeeEstimator\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const createAlchemyPublicRpcClient: ({ chain: chain_, connectionConfig, fetchOptions, }: {\\n connectionConfig: ConnectionConfig;\\n chain: Chain;\\n fetchOptions?: Omit | undefined;\\n}) => ClientWithAlchemyMethods\\nimport createAlchemyPublicRpcClient\",\"docs\":\"Creates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\",\"tags\":[[\"example\",\"```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"your-api-key\\\",\\n }\\n});\\n```\"],[\"param\",\"params The parameters for creating the Alchemy public RPC client\"],[\"param\",\"params.connectionConfig The connection configuration containing the RPC URL and API key\"],[\"param\",\"params.chain The blockchain chain configuration\"],[\"param\",\"params.fetchOptions Optional fetch configuration for HTTP transport\"],[\"returns\",\"A client object tailored with Alchemy methods and capabilities to interact with the blockchain\"]],\"start\":150,\"length\":28,\"target\":\"createAlchemyPublicRpcClient\",\"line\":9,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":218,\"length\":18,\"target\":\"createLightAccount\",\"line\":11,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":409,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":14,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":460,\"length\":4,\"target\":\"http\",\"line\":15,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function custom(provider: TProvider, config?: CustomTransportConfig): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":466,\"length\":6,\"target\":\"custom\",\"line\":15,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) function generatePrivateKey(): Hex\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":497,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":16,\"character\":9},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":582,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":19,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createAlchemyPublicRpcClient({ chain: chain_, connectionConfig, fetchOptions, }: {\\n connectionConfig: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n } | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n } | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n } | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n };\\n chain: Chain;\\n fetchOptions?: Omit<...> | undefined;\\n}): ClientWithAlchemyMethods\\nimport createAlchemyPublicRpcClient\",\"docs\":\"Creates an Alchemy public RPC client with the provided chain, connection configuration, and optional fetch options. The client has alchemy methods and can dynamically update HTTP headers.\",\"tags\":[[\"example\",\"```ts\\nimport { createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nconst client = createAlchemyPublicRpcClient({\\n chain: sepolia,\\n connectionConfig: {\\n apiKey: \\\"your-api-key\\\",\\n }\\n});\\n```\"],[\"param\",\"params The parameters for creating the Alchemy public RPC client\"],[\"param\",\"params.connectionConfig The connection configuration containing the RPC URL and API key\"],[\"param\",\"params.chain The blockchain chain configuration\"],[\"param\",\"params.fetchOptions Optional fetch configuration for HTTP transport\"],[\"returns\",\"A client object tailored with Alchemy methods and capabilities to interact with the blockchain\"]],\"start\":601,\"length\":28,\"target\":\"createAlchemyPublicRpcClient\",\"line\":19,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":634,\"length\":5,\"target\":\"chain\",\"line\":20,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":641,\"length\":7,\"target\":\"sepolia\",\"line\":20,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) connectionConfig: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n} | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n} | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n} | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n}\",\"start\":652,\"length\":16,\"target\":\"connectionConfig\",\"line\":21,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":676,\"length\":6,\"target\":\"apiKey\",\"line\":22,\"character\":4},{\"type\":\"hover\",\"text\":\"const transport: CustomTransport\",\"start\":797,\"length\":9,\"target\":\"transport\",\"line\":27,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) split(params: SplitTransportParams): CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":809,\"length\":5,\"target\":\"split\",\"line\":27,\"character\":18},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.overrides: {\\n methods: string[];\\n transport: Transport;\\n}[]\",\"start\":819,\"length\":9,\"target\":\"overrides\",\"line\":28,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) methods: string[]\",\"start\":844,\"length\":7,\"target\":\"methods\",\"line\":30,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) transport: Transport\",\"start\":987,\"length\":9,\"target\":\"transport\",\"line\":32,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":998,\"length\":4,\"target\":\"http\",\"line\":32,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.fallback: Transport\",\"start\":1073,\"length\":8,\"target\":\"fallback\",\"line\":35,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) custom(provider: ClientWithAlchemyMethods, config?: CustomTransportConfig | undefined): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":1083,\"length\":6,\"target\":\"custom\",\"line\":35,\"character\":12},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":1090,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":35,\"character\":19},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: unknown;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 76 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":1161,\"length\":6,\"target\":\"client\",\"line\":39,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createSmartAccountClient, \\\"v2.0.0\\\">, UserOperationContext | undefined>(config: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createSmartAccountClient\",\"start\":1170,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":39,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"docs\":\"The RPC transport\",\"start\":1199,\"length\":9,\"target\":\"transport\",\"line\":40,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | undefined\",\"docs\":\"Chain for the client.\",\"start\":1212,\"length\":5,\"target\":\"chain\",\"line\":41,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1219,\"length\":7,\"target\":\"sepolia\",\"line\":41,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: LightAccount, \\\"v2.0.0\\\"> | undefined\",\"start\":1230,\"length\":7,\"target\":\"account\",\"line\":42,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":1245,\"length\":18,\"target\":\"createLightAccount\",\"line\":42,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":1270,\"length\":5,\"target\":\"chain\",\"line\":43,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":1277,\"length\":7,\"target\":\"sepolia\",\"line\":43,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"start\":1290,\"length\":9,\"target\":\"transport\",\"line\":44,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) custom(provider: ClientWithAlchemyMethods, config?: CustomTransportConfig | undefined): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":1301,\"length\":6,\"target\":\"custom\",\"line\":44,\"character\":15},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":1308,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":44,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":1331,\"length\":6,\"target\":\"signer\",\"line\":45,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":1339,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":45,\"character\":12},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":1358,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":45,\"character\":31},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":1384,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":45,\"character\":57},{\"type\":\"hover\",\"text\":\"(property) gasEstimator?: ClientMiddlewareFn | undefined\",\"start\":1587,\"length\":12,\"target\":\"gasEstimator\",\"line\":49,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userOp: Deferrable>\",\"start\":1608,\"length\":6,\"target\":\"userOp\",\"line\":49,\"character\":23},{\"type\":\"hover\",\"text\":\"(parameter) userOp: Deferrable>\",\"start\":1629,\"length\":6,\"target\":\"userOp\",\"line\":50,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) callGasLimit?: PromiseOrValue[\\\"callGasLimit\\\"]> | undefined\",\"start\":1641,\"length\":12,\"target\":\"callGasLimit\",\"line\":51,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) preVerificationGas?: PromiseOrValue[\\\"preVerificationGas\\\"]> | undefined\",\"start\":1666,\"length\":18,\"target\":\"preVerificationGas\",\"line\":52,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) verificationGasLimit?: PromiseOrValue[\\\"verificationGasLimit\\\"]> | undefined\",\"start\":1697,\"length\":20,\"target\":\"verificationGasLimit\",\"line\":53,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) feeEstimator?: ClientMiddlewareFn | undefined\",\"start\":1812,\"length\":12,\"target\":\"feeEstimator\",\"line\":56,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) alchemyFeeEstimator(client: ClientWithAlchemyMethods): ClientMiddlewareFn\\nimport alchemyFeeEstimator\",\"docs\":\"Function that estimates the transaction fees using Alchemy methods for a given client.\\nIt fetches the latest block and estimates the max priority fee per gas, applying any overrides or fee options provided.\",\"tags\":[[\"example\",\"```ts\\nimport { alchemyFeeEstimator, createAlchemyPublicRpcClient } from \\\"@account-kit/infra\\\";\\nimport { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerClient = createAlchemyPublicRpcClient(...);\\nconst client = createSmartAccountClient({\\n feeEstimator: alchemyFeeEstimator(bundlerClient),\\n ...otherParams\\n});\\n```\"],[\"param\",\"client The client with Alchemy methods\"],[\"returns\",\"A middleware function that takes a transaction structure and fee options, and returns the augmented structure with estimated fees\"]],\"start\":1826,\"length\":19,\"target\":\"alchemyFeeEstimator\",\"line\":56,\"character\":16},{\"type\":\"hover\",\"text\":\"const alchemyRpcClient: ClientWithAlchemyMethods\",\"start\":1846,\"length\":16,\"target\":\"alchemyRpcClient\",\"line\":56,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) dummyPaymasterAndData?: ClientMiddlewareFn | undefined\",\"start\":1867,\"length\":21,\"target\":\"dummyPaymasterAndData\",\"line\":57,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":1897,\"length\":6,\"target\":\"userop\",\"line\":57,\"character\":32},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":1918,\"length\":6,\"target\":\"userop\",\"line\":58,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData: string\",\"start\":1930,\"length\":16,\"target\":\"paymasterAndData\",\"line\":59,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) paymasterAndData?: ClientMiddlewareFn | undefined\",\"start\":1962,\"length\":16,\"target\":\"paymasterAndData\",\"line\":61,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":1987,\"length\":6,\"target\":\"userop\",\"line\":61,\"character\":27},{\"type\":\"hover\",\"text\":\"(parameter) client: C extends MiddlewareClient\",\"start\":1997,\"length\":6,\"target\":\"client\",\"line\":61,\"character\":37},{\"type\":\"hover\",\"text\":\"(parameter) account: TAccount extends SmartContractAccount\",\"start\":2005,\"length\":7,\"target\":\"account\",\"line\":61,\"character\":45},{\"type\":\"hover\",\"text\":\"const pmResponse: any\",\"start\":2031,\"length\":10,\"target\":\"pmResponse\",\"line\":62,\"character\":10},{\"type\":\"hover\",\"text\":\"(parameter) client: C extends MiddlewareClient\",\"start\":2055,\"length\":6,\"target\":\"client\",\"line\":62,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) request: (args: {\\n ...;\\n} | ... 43 more ... | {\\n ...;\\n}, options?: EIP1193RequestOptions | undefined) => Promise<...>\",\"docs\":\"Request function wrapped with friendly error handling\",\"start\":2062,\"length\":7,\"target\":\"request\",\"line\":62,\"character\":41},{\"type\":\"hover\",\"text\":\"(property) method: \\\"pm_sponsorUserOperation\\\"\",\"start\":2098,\"length\":6,\"target\":\"method\",\"line\":64,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) params: [any, `0x${string}`, {\\n type: string;\\n}]\",\"start\":2139,\"length\":6,\"target\":\"params\",\"line\":65,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) deepHexlify(obj: any): any\\nimport deepHexlify\",\"docs\":\"Recursively converts all values in an object to hex strings\",\"tags\":[[\"param\",\"obj - obj to deep hexlify\"],[\"returns\",\"object with all of its values hexlified\"]],\"start\":2157,\"length\":11,\"target\":\"deepHexlify\",\"line\":66,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) resolveProperties>(object: Deferrable>): Promise<...>\\nimport resolveProperties\",\"docs\":\"Await all of the properties of a Deferrable object\",\"tags\":[[\"param\",\"object - a Deferrable object\"],[\"returns\",\"the object with its properties resolved\"]],\"start\":2175,\"length\":17,\"target\":\"resolveProperties\",\"line\":66,\"character\":26},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":2193,\"length\":6,\"target\":\"userop\",\"line\":66,\"character\":44},{\"type\":\"hover\",\"text\":\"(parameter) account: TAccount extends SmartContractAccount\",\"start\":2211,\"length\":7,\"target\":\"account\",\"line\":67,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) getEntryPoint: () => EntryPointDef>\",\"start\":2219,\"length\":13,\"target\":\"getEntryPoint\",\"line\":67,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) address: `0x${string}`\",\"start\":2235,\"length\":7,\"target\":\"address\",\"line\":67,\"character\":32},{\"type\":\"hover\",\"text\":\"(property) type: string\",\"start\":2288,\"length\":4,\"target\":\"type\",\"line\":70,\"character\":10},{\"type\":\"hover\",\"text\":\"(parameter) userop: Deferrable>\",\"start\":2414,\"length\":6,\"target\":\"userop\",\"line\":75,\"character\":9},{\"type\":\"hover\",\"text\":\"const pmResponse: any\",\"start\":2431,\"length\":10,\"target\":\"pmResponse\",\"line\":76,\"character\":9}],\"tags\":[]}],[\"a8b0bef74319690158411fe2206a556dee8d2c03653e023781b6127363cd9fd7\",{\"code\":\"import { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createSmartAccountClient({\\n transport: http(\\\"https://polygon-mumbai.g.alchemy.com/v2/demo\\\"),\\n chain: sepolia,\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) function createSmartAccountClient(config: SmartAccountClientConfig): SmartAccountClient\\nimport createSmartAccountClient\",\"start\":9,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":66,\"length\":4,\"target\":\"http\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":95,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: unknown;\\n account: SmartContractAccount | undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 76 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":132,\"length\":6,\"target\":\"client\",\"line\":4,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createSmartAccountClient | undefined;\\n}, SmartContractAccount | undefined, UserOperationContext | undefined>(config: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createSmartAccountClient\",\"start\":141,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":4,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"docs\":\"The RPC transport\",\"start\":170,\"length\":9,\"target\":\"transport\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":181,\"length\":4,\"target\":\"http\",\"line\":5,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n} | undefined\",\"docs\":\"Chain for the client.\",\"start\":237,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":244,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":9}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"import { createSmartAccountClient } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst client = createSmartAccountClient({\\n transport: http(\\\"https://polygon-mumbai.g.alchemy.com/v2/demo\\\"),\\n chain: sepolia,\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) function createSmartAccountClient(config: SmartAccountClientConfig): SmartAccountClient\\nimport createSmartAccountClient\",\"start\":9,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":66,\"length\":4,\"target\":\"http\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":95,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const client: {\\n [x: string]: unknown;\\n account: SmartContractAccount | undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 76 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":132,\"length\":6,\"target\":\"client\",\"line\":4,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createSmartAccountClient | undefined;\\n}, SmartContractAccount | undefined, UserOperationContext | undefined>(config: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createSmartAccountClient\",\"start\":141,\"length\":24,\"target\":\"createSmartAccountClient\",\"line\":4,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"docs\":\"The RPC transport\",\"start\":170,\"length\":9,\"target\":\"transport\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":181,\"length\":4,\"target\":\"http\",\"line\":5,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n} | undefined\",\"docs\":\"Chain for the client.\",\"start\":237,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":244,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":9}],\"tags\":[]}],[\"a6bd2e83c07d42b7d393ad688e4bbf0822bf527913fceb6619d9bd058c88e8f8\",{\"code\":\"import { split } from \\\"@aa-sdk/core\\\";\\nimport { createPublicClient, http } from \\\"viem\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\",\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [\\n {\\n methods: bundlerMethods,\\n transport: http(\\\"BUNDLER_RPC_URL\\\"),\\n },\\n ],\\n fallback: http(\\\"OTHER_RPC_URL\\\"),\\n }),\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const split: (params: SplitTransportParams) => CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":9,\"length\":5,\"target\":\"split\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function createPublicClient(parameters: PublicClientConfig): PublicClient\\nimport createPublicClient\",\"docs\":\"Creates a Public Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/public\\n\\nA Public Client is an interface to \\\"public\\\" [JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/) methods such as retrieving block numbers, transactions, reading from smart contracts, etc through [Public Actions](/docs/actions/public/introduction).\",\"tags\":[[\"param\",\"config - {@link PublicClientConfig}\"],[\"returns\",\"A Public Client. {@link PublicClient}\"],[\"example\",\"import { createPublicClient, http } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createPublicClient({\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":47,\"length\":18,\"target\":\"createPublicClient\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":67,\"length\":4,\"target\":\"http\",\"line\":1,\"character\":29},{\"type\":\"hover\",\"text\":\"const bundlerMethods: string[]\",\"start\":94,\"length\":14,\"target\":\"bundlerMethods\",\"line\":3,\"character\":6},{\"type\":\"hover\",\"text\":\"const clientWithSplit: {\\n account: undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n chain: undefined;\\n key: string;\\n ... 52 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":279,\"length\":15,\"target\":\"clientWithSplit\",\"line\":11,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createPublicClient(parameters: {\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime?: number | undefined;\\n ... 4 more ...;\\n transport: CustomTransport;\\n}): {\\n ...;\\n}\\nimport createPublicClient\",\"docs\":\"Creates a Public Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/public\\n\\nA Public Client is an interface to \\\"public\\\" [JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/) methods such as retrieving block numbers, transactions, reading from smart contracts, etc through [Public Actions](/docs/actions/public/introduction).\",\"tags\":[[\"param\",\"config - {@link PublicClientConfig}\"],[\"returns\",\"A Public Client. {@link PublicClient}\"],[\"example\",\"import { createPublicClient, http } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createPublicClient({\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":297,\"length\":18,\"target\":\"createPublicClient\",\"line\":11,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"docs\":\"The RPC transport\",\"start\":320,\"length\":9,\"target\":\"transport\",\"line\":12,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) split(params: SplitTransportParams): CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":331,\"length\":5,\"target\":\"split\",\"line\":12,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.overrides: {\\n methods: string[];\\n transport: Transport;\\n}[]\",\"start\":343,\"length\":9,\"target\":\"overrides\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) methods: string[]\",\"start\":372,\"length\":7,\"target\":\"methods\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"const bundlerMethods: string[]\",\"start\":381,\"length\":14,\"target\":\"bundlerMethods\",\"line\":15,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) transport: Transport\",\"start\":405,\"length\":9,\"target\":\"transport\",\"line\":16,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":416,\"length\":4,\"target\":\"http\",\"line\":16,\"character\":19},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.fallback: Transport\",\"start\":461,\"length\":8,\"target\":\"fallback\",\"line\":19,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":471,\"length\":4,\"target\":\"http\",\"line\":19,\"character\":14}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"import { split } from \\\"@aa-sdk/core\\\";\\nimport { createPublicClient, http } from \\\"viem\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\",\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [\\n {\\n methods: bundlerMethods,\\n transport: http(\\\"BUNDLER_RPC_URL\\\"),\\n },\\n ],\\n fallback: http(\\\"OTHER_RPC_URL\\\"),\\n }),\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const split: (params: SplitTransportParams) => CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":9,\"length\":5,\"target\":\"split\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function createPublicClient(parameters: PublicClientConfig): PublicClient\\nimport createPublicClient\",\"docs\":\"Creates a Public Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/public\\n\\nA Public Client is an interface to \\\"public\\\" [JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/) methods such as retrieving block numbers, transactions, reading from smart contracts, etc through [Public Actions](/docs/actions/public/introduction).\",\"tags\":[[\"param\",\"config - {@link PublicClientConfig}\"],[\"returns\",\"A Public Client. {@link PublicClient}\"],[\"example\",\"import { createPublicClient, http } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createPublicClient({\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":47,\"length\":18,\"target\":\"createPublicClient\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":67,\"length\":4,\"target\":\"http\",\"line\":1,\"character\":29},{\"type\":\"hover\",\"text\":\"const bundlerMethods: string[]\",\"start\":94,\"length\":14,\"target\":\"bundlerMethods\",\"line\":3,\"character\":6},{\"type\":\"hover\",\"text\":\"const clientWithSplit: {\\n account: undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n chain: undefined;\\n key: string;\\n ... 52 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":279,\"length\":15,\"target\":\"clientWithSplit\",\"line\":11,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createPublicClient(parameters: {\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime?: number | undefined;\\n ... 4 more ...;\\n transport: CustomTransport;\\n}): {\\n ...;\\n}\\nimport createPublicClient\",\"docs\":\"Creates a Public Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/public\\n\\nA Public Client is an interface to \\\"public\\\" [JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/) methods such as retrieving block numbers, transactions, reading from smart contracts, etc through [Public Actions](/docs/actions/public/introduction).\",\"tags\":[[\"param\",\"config - {@link PublicClientConfig}\"],[\"returns\",\"A Public Client. {@link PublicClient}\"],[\"example\",\"import { createPublicClient, http } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createPublicClient({\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":297,\"length\":18,\"target\":\"createPublicClient\",\"line\":11,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"docs\":\"The RPC transport\",\"start\":320,\"length\":9,\"target\":\"transport\",\"line\":12,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) split(params: SplitTransportParams): CustomTransport\\nimport split\",\"docs\":\"The Split Transport allows you to split RPC traffic for specific methods across\\ndifferent RPC providers. This is done by specifying the methods you want handled\\nspecially as overrides and providing a fallback transport for all other methods.\",\"tags\":[[\"example\",\"```ts\\nimport { createPublicClient, http } from \\\"viem\\\";\\nimport { split } from \\\"@aa-sdk/core\\\";\\n\\nconst bundlerMethods = [\\n \\\"eth_sendUserOperation\\\",\\n \\\"eth_estimateUserOperationGas\\\",\\n \\\"eth_getUserOperationReceipt\\\",\\n \\\"eth_getUserOperationByHash\\\",\\n \\\"eth_supportedEntryPoints\\\"\\n];\\n\\nconst clientWithSplit = createPublicClient({\\n transport: split({\\n overrides: [{\\n methods: bundlerMethods,\\n transport: http(BUNDLER_RPC_URL)\\n }]\\n fallback: http(OTHER_RPC_URL)\\n }),\\n});\\n```\"],[\"param\",\"params split transport configuration containing the methods overrides and fallback transport\"],[\"returns\",\"a viem Transport that splits traffic\"]],\"start\":331,\"length\":5,\"target\":\"split\",\"line\":12,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.overrides: {\\n methods: string[];\\n transport: Transport;\\n}[]\",\"start\":343,\"length\":9,\"target\":\"overrides\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) methods: string[]\",\"start\":372,\"length\":7,\"target\":\"methods\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"const bundlerMethods: string[]\",\"start\":381,\"length\":14,\"target\":\"bundlerMethods\",\"line\":15,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) transport: Transport\",\"start\":405,\"length\":9,\"target\":\"transport\",\"line\":16,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":416,\"length\":4,\"target\":\"http\",\"line\":16,\"character\":19},{\"type\":\"hover\",\"text\":\"(property) SplitTransportParams.fallback: Transport\",\"start\":461,\"length\":8,\"target\":\"fallback\",\"line\":19,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":471,\"length\":4,\"target\":\"http\",\"line\":19,\"character\":14}],\"tags\":[]}],[\"2df9d82be2e78b08aeeca61806d0dbe605508d110220ca69fa96b6c969598a2f\",{\"code\":\"import type { Address } from \\\"abitype\\\";\\nimport type {\\n Hex,\\n SignableMessage,\\n TypedData,\\n TypedDataDefinition,\\n} from \\\"viem\\\";\\n\\n/**\\n * Extends the @interface SmartAccountSigner interface with authentication.\\n *\\n * @template AuthParams - the generic type of the authentication parameters\\n * @template AuthDetails - the generic type of the authentication details\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountAuthenticator\\n extends SmartAccountSigner {\\n authenticate: (params: AuthParams) => Promise;\\n\\n getAuthDetails: () => Promise;\\n}\\n\\n/**\\n * A signer that can sign messages and typed data.\\n *\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountSigner {\\n signerType: string;\\n inner: Inner;\\n\\n getAddress: () => Promise

;\\n\\n signMessage: (message: SignableMessage) => Promise;\\n\\n signTypedData: <\\n const TTypedData extends TypedData | { [key: string]: unknown },\\n TPrimaryType extends string = string\\n >(\\n params: TypedDataDefinition\\n ) => Promise;\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) type Address = `0x${string}`\\nimport Address\",\"start\":14,\"length\":7,\"target\":\"Address\",\"line\":0,\"character\":14},{\"type\":\"hover\",\"text\":\"(alias) type Hex = `0x${string}`\\nimport Hex\",\"start\":56,\"length\":3,\"target\":\"Hex\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) type SignableMessage = string | {\\n raw: Hex | ByteArray;\\n}\\nimport SignableMessage\",\"start\":63,\"length\":15,\"target\":\"SignableMessage\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) type TypedData = {\\n [x: string]: readonly TypedDataParameter[];\\n [x: `string[${string}]`]: undefined;\\n [x: `function[${string}]`]: undefined;\\n [x: `address[${string}]`]: undefined;\\n [x: `bool[${string}]`]: undefined;\\n [x: `bytes[${string}]`]: undefined;\\n [x: `bytes1[${string}]`]: undefined;\\n [x: `bytes2[${string}]`]: undefined;\\n [x: `bytes3[${string}]`]: undefined;\\n [x: `bytes4[${string}]`]: undefined;\\n [x: `bytes5[${string}]`]: undefined;\\n [x: `bytes6[${string}]`]: undefined;\\n [x: `bytes7[${string}]`]: undefined;\\n [x: `bytes8[${string}]`]: undefined;\\n [x: `bytes9[${string}]`]: undefined;\\n [x: `bytes10[${string}]`]: undefined;\\n [x: `bytes11[${string}]`]: undefined;\\n [x: `bytes12[${string}]`]: undefined;\\n [x: `bytes13[${string}]`]: undefined;\\n [x: `bytes14[${string}]`]: undefined;\\n [x: `bytes15[${string}]`]: undefined;\\n [x: `bytes16[${string}]`]: undefined;\\n [x: `bytes17[${string}]`]: undefined;\\n [x: `bytes18[${string}]`]: undefined;\\n [x: `bytes19[${string}]`]: undefined;\\n [x: `bytes20[${string}]`]: undefined;\\n [x: `bytes21[${string}]`]: undefined;\\n [x: `bytes22[${string}]`]: undefined;\\n [x: `bytes23[${string}]`]: undefined;\\n [x: `bytes24[${string}]`]: undefined;\\n [x: `bytes25[${string}]`]: undefined;\\n [x: `bytes26[${string}]`]: undefined;\\n [x: `bytes27[${string}]`]: undefined;\\n [x: `bytes28[${string}]`]: undefined;\\n [x: `bytes29[${string}]`]: undefined;\\n [x: `bytes30[${string}]`]: undefined;\\n [x: `bytes31[${string}]`]: undefined;\\n [x: `bytes32[${string}]`]: undefined;\\n [x: `int[${ ...\\nimport TypedData\",\"docs\":\"[EIP-712](https://eips.ethereum.org/EIPS/eip-712#definition-of-typed-structured-data-%F0%9D%95%8A) Typed Data Specification\",\"start\":82,\"length\":9,\"target\":\"TypedData\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) type TypedDataDefinition\",\"docs\":\"Extends the\",\"tags\":[[\"interface\",\"SmartAccountSigner interface with authentication.\"],[\"template\",\"AuthParams - the generic type of the authentication parameters\"],[\"template\",\"AuthDetails - the generic type of the authentication details\"],[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":513,\"length\":25,\"target\":\"SmartAccountAuthenticator\",\"line\":15,\"character\":17},{\"type\":\"hover\",\"text\":\"(type parameter) AuthParams in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication parameters\",\"tags\":[[\"template\",\"AuthParams - the generic type of the authentication parameters\"]],\"start\":539,\"length\":10,\"target\":\"AuthParams\",\"line\":15,\"character\":43},{\"type\":\"hover\",\"text\":\"(type parameter) AuthDetails in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication details\",\"tags\":[[\"template\",\"AuthDetails - the generic type of the authentication details\"]],\"start\":551,\"length\":11,\"target\":\"AuthDetails\",\"line\":15,\"character\":55},{\"type\":\"hover\",\"text\":\"(type parameter) Inner in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":564,\"length\":5,\"target\":\"Inner\",\"line\":15,\"character\":68},{\"type\":\"hover\",\"text\":\"interface SmartAccountSigner\",\"docs\":\"A signer that can sign messages and typed data.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":587,\"length\":18,\"target\":\"SmartAccountSigner\",\"line\":16,\"character\":10},{\"type\":\"hover\",\"text\":\"(type parameter) Inner in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":606,\"length\":5,\"target\":\"Inner\",\"line\":16,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) SmartAccountAuthenticator.authenticate: (params: AuthParams) => Promise\",\"start\":617,\"length\":12,\"target\":\"authenticate\",\"line\":17,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) params: AuthParams\",\"start\":632,\"length\":6,\"target\":\"params\",\"line\":17,\"character\":17},{\"type\":\"hover\",\"text\":\"(type parameter) AuthParams in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication parameters\",\"tags\":[[\"template\",\"AuthParams - the generic type of the authentication parameters\"]],\"start\":640,\"length\":10,\"target\":\"AuthParams\",\"line\":17,\"character\":25},{\"type\":\"hover\",\"text\":\"interface Promise\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":655,\"length\":7,\"target\":\"Promise\",\"line\":17,\"character\":40},{\"type\":\"hover\",\"text\":\"(type parameter) AuthDetails in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication details\",\"tags\":[[\"template\",\"AuthDetails - the generic type of the authentication details\"]],\"start\":663,\"length\":11,\"target\":\"AuthDetails\",\"line\":17,\"character\":48},{\"type\":\"hover\",\"text\":\"(property) SmartAccountAuthenticator.getAuthDetails: () => Promise\",\"start\":680,\"length\":14,\"target\":\"getAuthDetails\",\"line\":19,\"character\":2},{\"type\":\"hover\",\"text\":\"interface Promise\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":702,\"length\":7,\"target\":\"Promise\",\"line\":19,\"character\":24},{\"type\":\"hover\",\"text\":\"(type parameter) AuthDetails in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication details\",\"tags\":[[\"template\",\"AuthDetails - the generic type of the authentication details\"]],\"start\":710,\"length\":11,\"target\":\"AuthDetails\",\"line\":19,\"character\":32},{\"type\":\"hover\",\"text\":\"interface SmartAccountSigner\",\"docs\":\"A signer that can sign messages and typed data.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":933,\"length\":18,\"target\":\"SmartAccountSigner\",\"line\":27,\"character\":17},{\"type\":\"hover\",\"text\":\"(type parameter) Inner in SmartAccountSigner\",\"docs\":\"- the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":952,\"length\":5,\"target\":\"Inner\",\"line\":27,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.signerType: string\",\"start\":969,\"length\":10,\"target\":\"signerType\",\"line\":28,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.inner: Inner = any\",\"start\":991,\"length\":5,\"target\":\"inner\",\"line\":29,\"character\":2},{\"type\":\"hover\",\"text\":\"(type parameter) Inner in SmartAccountSigner\",\"docs\":\"- the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":998,\"length\":5,\"target\":\"Inner\",\"line\":29,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.getAddress: () => Promise
\",\"start\":1008,\"length\":10,\"target\":\"getAddress\",\"line\":31,\"character\":2},{\"type\":\"hover\",\"text\":\"interface Promise\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":1026,\"length\":7,\"target\":\"Promise\",\"line\":31,\"character\":20},{\"type\":\"hover\",\"text\":\"(alias) type Address = `0x${string}`\\nimport Address\",\"start\":1034,\"length\":7,\"target\":\"Address\",\"line\":31,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.signMessage: (message: SignableMessage) => Promise\",\"start\":1047,\"length\":11,\"target\":\"signMessage\",\"line\":33,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) message: SignableMessage\",\"start\":1061,\"length\":7,\"target\":\"message\",\"line\":33,\"character\":16},{\"type\":\"hover\",\"text\":\"(alias) type SignableMessage = string | {\\n raw: Hex | ByteArray;\\n}\\nimport SignableMessage\",\"start\":1070,\"length\":15,\"target\":\"SignableMessage\",\"line\":33,\"character\":25},{\"type\":\"hover\",\"text\":\"interface Promise\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":1090,\"length\":7,\"target\":\"Promise\",\"line\":33,\"character\":45},{\"type\":\"hover\",\"text\":\"(alias) type Hex = `0x${string}`\\nimport Hex\",\"start\":1098,\"length\":3,\"target\":\"Hex\",\"line\":33,\"character\":53},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.signTypedData: \",\"start\":1243,\"length\":6,\"target\":\"params\",\"line\":39,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) type TypedDataDefinition\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":1304,\"length\":7,\"target\":\"Promise\",\"line\":40,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type Hex = `0x${string}`\\nimport Hex\",\"start\":1312,\"length\":3,\"target\":\"Hex\",\"line\":40,\"character\":15}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"import type { Address } from \\\"abitype\\\";\\nimport type {\\n Hex,\\n SignableMessage,\\n TypedData,\\n TypedDataDefinition,\\n} from \\\"viem\\\";\\n\\n/**\\n * Extends the @interface SmartAccountSigner interface with authentication.\\n *\\n * @template AuthParams - the generic type of the authentication parameters\\n * @template AuthDetails - the generic type of the authentication details\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountAuthenticator\\n extends SmartAccountSigner {\\n authenticate: (params: AuthParams) => Promise;\\n\\n getAuthDetails: () => Promise;\\n}\\n\\n/**\\n * A signer that can sign messages and typed data.\\n *\\n * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\\n */\\nexport interface SmartAccountSigner {\\n signerType: string;\\n inner: Inner;\\n\\n getAddress: () => Promise
;\\n\\n signMessage: (message: SignableMessage) => Promise;\\n\\n signTypedData: <\\n const TTypedData extends TypedData | { [key: string]: unknown },\\n TPrimaryType extends string = string\\n >(\\n params: TypedDataDefinition\\n ) => Promise;\\n}\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) type Address = `0x${string}`\\nimport Address\",\"start\":14,\"length\":7,\"target\":\"Address\",\"line\":0,\"character\":14},{\"type\":\"hover\",\"text\":\"(alias) type Hex = `0x${string}`\\nimport Hex\",\"start\":56,\"length\":3,\"target\":\"Hex\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) type SignableMessage = string | {\\n raw: Hex | ByteArray;\\n}\\nimport SignableMessage\",\"start\":63,\"length\":15,\"target\":\"SignableMessage\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) type TypedData = {\\n [x: string]: readonly TypedDataParameter[];\\n [x: `string[${string}]`]: undefined;\\n [x: `function[${string}]`]: undefined;\\n [x: `address[${string}]`]: undefined;\\n [x: `bool[${string}]`]: undefined;\\n [x: `bytes[${string}]`]: undefined;\\n [x: `bytes1[${string}]`]: undefined;\\n [x: `bytes2[${string}]`]: undefined;\\n [x: `bytes3[${string}]`]: undefined;\\n [x: `bytes4[${string}]`]: undefined;\\n [x: `bytes5[${string}]`]: undefined;\\n [x: `bytes6[${string}]`]: undefined;\\n [x: `bytes7[${string}]`]: undefined;\\n [x: `bytes8[${string}]`]: undefined;\\n [x: `bytes9[${string}]`]: undefined;\\n [x: `bytes10[${string}]`]: undefined;\\n [x: `bytes11[${string}]`]: undefined;\\n [x: `bytes12[${string}]`]: undefined;\\n [x: `bytes13[${string}]`]: undefined;\\n [x: `bytes14[${string}]`]: undefined;\\n [x: `bytes15[${string}]`]: undefined;\\n [x: `bytes16[${string}]`]: undefined;\\n [x: `bytes17[${string}]`]: undefined;\\n [x: `bytes18[${string}]`]: undefined;\\n [x: `bytes19[${string}]`]: undefined;\\n [x: `bytes20[${string}]`]: undefined;\\n [x: `bytes21[${string}]`]: undefined;\\n [x: `bytes22[${string}]`]: undefined;\\n [x: `bytes23[${string}]`]: undefined;\\n [x: `bytes24[${string}]`]: undefined;\\n [x: `bytes25[${string}]`]: undefined;\\n [x: `bytes26[${string}]`]: undefined;\\n [x: `bytes27[${string}]`]: undefined;\\n [x: `bytes28[${string}]`]: undefined;\\n [x: `bytes29[${string}]`]: undefined;\\n [x: `bytes30[${string}]`]: undefined;\\n [x: `bytes31[${string}]`]: undefined;\\n [x: `bytes32[${string}]`]: undefined;\\n [x: `int[${ ...\\nimport TypedData\",\"docs\":\"[EIP-712](https://eips.ethereum.org/EIPS/eip-712#definition-of-typed-structured-data-%F0%9D%95%8A) Typed Data Specification\",\"start\":82,\"length\":9,\"target\":\"TypedData\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) type TypedDataDefinition\",\"docs\":\"Extends the\",\"tags\":[[\"interface\",\"SmartAccountSigner interface with authentication.\"],[\"template\",\"AuthParams - the generic type of the authentication parameters\"],[\"template\",\"AuthDetails - the generic type of the authentication details\"],[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":513,\"length\":25,\"target\":\"SmartAccountAuthenticator\",\"line\":15,\"character\":17},{\"type\":\"hover\",\"text\":\"(type parameter) AuthParams in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication parameters\",\"tags\":[[\"template\",\"AuthParams - the generic type of the authentication parameters\"]],\"start\":539,\"length\":10,\"target\":\"AuthParams\",\"line\":15,\"character\":43},{\"type\":\"hover\",\"text\":\"(type parameter) AuthDetails in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication details\",\"tags\":[[\"template\",\"AuthDetails - the generic type of the authentication details\"]],\"start\":551,\"length\":11,\"target\":\"AuthDetails\",\"line\":15,\"character\":55},{\"type\":\"hover\",\"text\":\"(type parameter) Inner in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":564,\"length\":5,\"target\":\"Inner\",\"line\":15,\"character\":68},{\"type\":\"hover\",\"text\":\"interface SmartAccountSigner\",\"docs\":\"A signer that can sign messages and typed data.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":587,\"length\":18,\"target\":\"SmartAccountSigner\",\"line\":16,\"character\":10},{\"type\":\"hover\",\"text\":\"(type parameter) Inner in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":606,\"length\":5,\"target\":\"Inner\",\"line\":16,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) SmartAccountAuthenticator.authenticate: (params: AuthParams) => Promise\",\"start\":617,\"length\":12,\"target\":\"authenticate\",\"line\":17,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) params: AuthParams\",\"start\":632,\"length\":6,\"target\":\"params\",\"line\":17,\"character\":17},{\"type\":\"hover\",\"text\":\"(type parameter) AuthParams in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication parameters\",\"tags\":[[\"template\",\"AuthParams - the generic type of the authentication parameters\"]],\"start\":640,\"length\":10,\"target\":\"AuthParams\",\"line\":17,\"character\":25},{\"type\":\"hover\",\"text\":\"interface Promise\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":655,\"length\":7,\"target\":\"Promise\",\"line\":17,\"character\":40},{\"type\":\"hover\",\"text\":\"(type parameter) AuthDetails in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication details\",\"tags\":[[\"template\",\"AuthDetails - the generic type of the authentication details\"]],\"start\":663,\"length\":11,\"target\":\"AuthDetails\",\"line\":17,\"character\":48},{\"type\":\"hover\",\"text\":\"(property) SmartAccountAuthenticator.getAuthDetails: () => Promise\",\"start\":680,\"length\":14,\"target\":\"getAuthDetails\",\"line\":19,\"character\":2},{\"type\":\"hover\",\"text\":\"interface Promise\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":702,\"length\":7,\"target\":\"Promise\",\"line\":19,\"character\":24},{\"type\":\"hover\",\"text\":\"(type parameter) AuthDetails in SmartAccountAuthenticator\",\"docs\":\"- the generic type of the authentication details\",\"tags\":[[\"template\",\"AuthDetails - the generic type of the authentication details\"]],\"start\":710,\"length\":11,\"target\":\"AuthDetails\",\"line\":19,\"character\":32},{\"type\":\"hover\",\"text\":\"interface SmartAccountSigner\",\"docs\":\"A signer that can sign messages and typed data.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":933,\"length\":18,\"target\":\"SmartAccountSigner\",\"line\":27,\"character\":17},{\"type\":\"hover\",\"text\":\"(type parameter) Inner in SmartAccountSigner\",\"docs\":\"- the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":952,\"length\":5,\"target\":\"Inner\",\"line\":27,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.signerType: string\",\"start\":969,\"length\":10,\"target\":\"signerType\",\"line\":28,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.inner: Inner = any\",\"start\":991,\"length\":5,\"target\":\"inner\",\"line\":29,\"character\":2},{\"type\":\"hover\",\"text\":\"(type parameter) Inner in SmartAccountSigner\",\"docs\":\"- the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":998,\"length\":5,\"target\":\"Inner\",\"line\":29,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.getAddress: () => Promise
\",\"start\":1008,\"length\":10,\"target\":\"getAddress\",\"line\":31,\"character\":2},{\"type\":\"hover\",\"text\":\"interface Promise\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":1026,\"length\":7,\"target\":\"Promise\",\"line\":31,\"character\":20},{\"type\":\"hover\",\"text\":\"(alias) type Address = `0x${string}`\\nimport Address\",\"start\":1034,\"length\":7,\"target\":\"Address\",\"line\":31,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.signMessage: (message: SignableMessage) => Promise\",\"start\":1047,\"length\":11,\"target\":\"signMessage\",\"line\":33,\"character\":2},{\"type\":\"hover\",\"text\":\"(parameter) message: SignableMessage\",\"start\":1061,\"length\":7,\"target\":\"message\",\"line\":33,\"character\":16},{\"type\":\"hover\",\"text\":\"(alias) type SignableMessage = string | {\\n raw: Hex | ByteArray;\\n}\\nimport SignableMessage\",\"start\":1070,\"length\":15,\"target\":\"SignableMessage\",\"line\":33,\"character\":25},{\"type\":\"hover\",\"text\":\"interface Promise\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":1090,\"length\":7,\"target\":\"Promise\",\"line\":33,\"character\":45},{\"type\":\"hover\",\"text\":\"(alias) type Hex = `0x${string}`\\nimport Hex\",\"start\":1098,\"length\":3,\"target\":\"Hex\",\"line\":33,\"character\":53},{\"type\":\"hover\",\"text\":\"(property) SmartAccountSigner.signTypedData: \",\"start\":1243,\"length\":6,\"target\":\"params\",\"line\":39,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) type TypedDataDefinition\",\"docs\":\"Represents the completion of an asynchronous operation\",\"start\":1304,\"length\":7,\"target\":\"Promise\",\"line\":40,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type Hex = `0x${string}`\\nimport Hex\",\"start\":1312,\"length\":3,\"target\":\"Hex\",\"line\":40,\"character\":15}],\"tags\":[]}],[\"e9cc35905d738133195b34538b025ce7ff0a22ce0216bc63fa900acdbf12bcc6\",{\"code\":\"import { WalletClientSigner, type SmartAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { createWalletClient, custom } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst externalProvider = window.ethereum; // or anyother EIP-1193 provider\\n\\nconst walletClient = createWalletClient({\\n chain: sepolia, // can provide a different chain here\\n transport: custom(externalProvider),\\n});\\n\\nexport const signer: SmartAccountSigner = new WalletClientSigner(\\n walletClient,\\n \\\"json-rpc\\\" // signerType\\n);\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) class WalletClientSigner\\nimport WalletClientSigner\",\"docs\":\"Represents a wallet client signer for smart accounts, providing methods to get the address, sign messages, and sign typed data.\",\"start\":9,\"length\":18,\"target\":\"WalletClientSigner\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) interface SmartAccountSigner\\nimport SmartAccountSigner\",\"docs\":\"A signer that can sign messages and typed data.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":34,\"length\":18,\"target\":\"SmartAccountSigner\",\"line\":0,\"character\":34},{\"type\":\"hover\",\"text\":\"(alias) function createWalletClient(parameters: WalletClientConfig): WalletClient>\\nimport createWalletClient\",\"docs\":\"Creates a Wallet Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/wallet\\n\\nA Wallet Client is an interface to interact with [Ethereum Account(s)](https://ethereum.org/en/glossary/#account) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction).\\n\\nThe Wallet Client supports signing over:\\n- [JSON-RPC Accounts](https://viem.sh/docs/clients/wallet#json-rpc-accounts) (e.g. Browser Extension Wallets, WalletConnect, etc).\\n- [Local Accounts](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc) (e.g. private key/mnemonic wallets).\",\"tags\":[[\"param\",\"config - {@link WalletClientConfig}\"],[\"returns\",\"A Wallet Client. {@link WalletClient}\"],[\"example\",\"// JSON-RPC Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum),\\n})\"],[\"example\",\"// Local Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { privateKeyToAccount } from 'viem/accounts'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n account: privateKeyToAccount('0x…')\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":85,\"length\":18,\"target\":\"createWalletClient\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function custom(provider: TProvider, config?: CustomTransportConfig): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":105,\"length\":6,\"target\":\"custom\",\"line\":1,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":136,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const externalProvider: any\",\"start\":173,\"length\":16,\"target\":\"externalProvider\",\"line\":4,\"character\":6},{\"type\":\"hover\",\"text\":\"var window: Window & typeof globalThis\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/window)\",\"start\":192,\"length\":6,\"target\":\"window\",\"line\":4,\"character\":25},{\"type\":\"hover\",\"text\":\"any\",\"start\":199,\"length\":8,\"target\":\"ethereum\",\"line\":4,\"character\":32},{\"type\":\"hover\",\"text\":\"const walletClient: {\\n account: undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n chain: {\\n blockExplorers: {\\n ...;\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n };\\n ... 23 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":249,\"length\":12,\"target\":\"walletClient\",\"line\":6,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createWalletClient | undefined;\\n}, undefined>(parameters: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createWalletClient\",\"docs\":\"Creates a Wallet Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/wallet\\n\\nA Wallet Client is an interface to interact with [Ethereum Account(s)](https://ethereum.org/en/glossary/#account) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction).\\n\\nThe Wallet Client supports signing over:\\n- [JSON-RPC Accounts](https://viem.sh/docs/clients/wallet#json-rpc-accounts) (e.g. Browser Extension Wallets, WalletConnect, etc).\\n- [Local Accounts](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc) (e.g. private key/mnemonic wallets).\",\"tags\":[[\"param\",\"config - {@link WalletClientConfig}\"],[\"returns\",\"A Wallet Client. {@link WalletClient}\"],[\"example\",\"// JSON-RPC Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum),\\n})\"],[\"example\",\"// Local Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { privateKeyToAccount } from 'viem/accounts'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n account: privateKeyToAccount('0x…')\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":264,\"length\":18,\"target\":\"createWalletClient\",\"line\":6,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | {\\n blockExplorers: {\\n ...;\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n} | undefined\",\"docs\":\"Chain for the client.\",\"start\":287,\"length\":5,\"target\":\"chain\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":294,\"length\":7,\"target\":\"sepolia\",\"line\":7,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"docs\":\"The RPC transport\",\"start\":343,\"length\":9,\"target\":\"transport\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) custom(provider: any, config?: CustomTransportConfig | undefined): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":354,\"length\":6,\"target\":\"custom\",\"line\":8,\"character\":13},{\"type\":\"hover\",\"text\":\"const externalProvider: any\",\"start\":361,\"length\":16,\"target\":\"externalProvider\",\"line\":8,\"character\":20},{\"type\":\"hover\",\"text\":\"const signer: SmartAccountSigner\",\"start\":398,\"length\":6,\"target\":\"signer\",\"line\":11,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) interface SmartAccountSigner\\nimport SmartAccountSigner\",\"docs\":\"A signer that can sign messages and typed data.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":406,\"length\":18,\"target\":\"SmartAccountSigner\",\"line\":11,\"character\":21},{\"type\":\"hover\",\"text\":\"(alias) new WalletClientSigner(client: {\\n account: Account | undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n ... 24 more ...;\\n extend: (fn: (client: Client<...>) => client) => Client<...>;\\n}, signerType: string): WalletClientSigner\\nimport WalletClientSigner\",\"docs\":\"Initializes a signer with a given wallet client and signer type.\",\"tags\":[[\"example\",\"```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!)\\n});\\n\\nconst signer = new WalletClientSigner(client, 'wallet');\\n```\"],[\"param\",\"client The wallet client to interact with\"],[\"param\",\"signerType The type of signer; must be a valid signer type, otherwise an error will be thrown\"],[\"throws\",\"{InvalidSignerTypeError} If the signer type is invalid\"]],\"start\":431,\"length\":18,\"target\":\"WalletClientSigner\",\"line\":11,\"character\":46},{\"type\":\"hover\",\"text\":\"const walletClient: {\\n account: undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n chain: {\\n blockExplorers: {\\n ...;\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n };\\n ... 23 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":453,\"length\":12,\"target\":\"walletClient\",\"line\":12,\"character\":2}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":true,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,13]],\"flagNotations\":[{\"type\":\"handbookOptions\",\"name\":\"noErrors\",\"value\":true,\"start\":0,\"end\":13}],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"// @noErrors\\nimport { WalletClientSigner, type SmartAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { createWalletClient, custom } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nconst externalProvider = window.ethereum; // or anyother EIP-1193 provider\\n\\nconst walletClient = createWalletClient({\\n chain: sepolia, // can provide a different chain here\\n transport: custom(externalProvider),\\n});\\n\\nexport const signer: SmartAccountSigner = new WalletClientSigner(\\n walletClient,\\n \\\"json-rpc\\\" // signerType\\n);\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) class WalletClientSigner\\nimport WalletClientSigner\",\"docs\":\"Represents a wallet client signer for smart accounts, providing methods to get the address, sign messages, and sign typed data.\",\"start\":9,\"length\":18,\"target\":\"WalletClientSigner\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) interface SmartAccountSigner\\nimport SmartAccountSigner\",\"docs\":\"A signer that can sign messages and typed data.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":34,\"length\":18,\"target\":\"SmartAccountSigner\",\"line\":0,\"character\":34},{\"type\":\"hover\",\"text\":\"(alias) function createWalletClient(parameters: WalletClientConfig): WalletClient>\\nimport createWalletClient\",\"docs\":\"Creates a Wallet Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/wallet\\n\\nA Wallet Client is an interface to interact with [Ethereum Account(s)](https://ethereum.org/en/glossary/#account) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction).\\n\\nThe Wallet Client supports signing over:\\n- [JSON-RPC Accounts](https://viem.sh/docs/clients/wallet#json-rpc-accounts) (e.g. Browser Extension Wallets, WalletConnect, etc).\\n- [Local Accounts](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc) (e.g. private key/mnemonic wallets).\",\"tags\":[[\"param\",\"config - {@link WalletClientConfig}\"],[\"returns\",\"A Wallet Client. {@link WalletClient}\"],[\"example\",\"// JSON-RPC Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum),\\n})\"],[\"example\",\"// Local Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { privateKeyToAccount } from 'viem/accounts'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n account: privateKeyToAccount('0x…')\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":85,\"length\":18,\"target\":\"createWalletClient\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function custom(provider: TProvider, config?: CustomTransportConfig): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":105,\"length\":6,\"target\":\"custom\",\"line\":1,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":136,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const externalProvider: any\",\"start\":173,\"length\":16,\"target\":\"externalProvider\",\"line\":4,\"character\":6},{\"type\":\"hover\",\"text\":\"var window: Window & typeof globalThis\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/window)\",\"start\":192,\"length\":6,\"target\":\"window\",\"line\":4,\"character\":25},{\"type\":\"hover\",\"text\":\"any\",\"start\":199,\"length\":8,\"target\":\"ethereum\",\"line\":4,\"character\":32},{\"type\":\"hover\",\"text\":\"const walletClient: {\\n account: undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n chain: {\\n blockExplorers: {\\n ...;\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n };\\n ... 23 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":249,\"length\":12,\"target\":\"walletClient\",\"line\":6,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createWalletClient | undefined;\\n}, undefined>(parameters: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createWalletClient\",\"docs\":\"Creates a Wallet Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/wallet\\n\\nA Wallet Client is an interface to interact with [Ethereum Account(s)](https://ethereum.org/en/glossary/#account) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction).\\n\\nThe Wallet Client supports signing over:\\n- [JSON-RPC Accounts](https://viem.sh/docs/clients/wallet#json-rpc-accounts) (e.g. Browser Extension Wallets, WalletConnect, etc).\\n- [Local Accounts](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc) (e.g. private key/mnemonic wallets).\",\"tags\":[[\"param\",\"config - {@link WalletClientConfig}\"],[\"returns\",\"A Wallet Client. {@link WalletClient}\"],[\"example\",\"// JSON-RPC Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum),\\n})\"],[\"example\",\"// Local Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { privateKeyToAccount } from 'viem/accounts'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n account: privateKeyToAccount('0x…')\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":264,\"length\":18,\"target\":\"createWalletClient\",\"line\":6,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | {\\n blockExplorers: {\\n ...;\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n} | undefined\",\"docs\":\"Chain for the client.\",\"start\":287,\"length\":5,\"target\":\"chain\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":294,\"length\":7,\"target\":\"sepolia\",\"line\":7,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) transport: CustomTransport\",\"docs\":\"The RPC transport\",\"start\":343,\"length\":9,\"target\":\"transport\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) custom(provider: any, config?: CustomTransportConfig | undefined): CustomTransport\\nimport custom\",\"tags\":[[\"description\",\"Creates a custom transport given an EIP-1193 compliant `request` attribute.\"]],\"start\":354,\"length\":6,\"target\":\"custom\",\"line\":8,\"character\":13},{\"type\":\"hover\",\"text\":\"const externalProvider: any\",\"start\":361,\"length\":16,\"target\":\"externalProvider\",\"line\":8,\"character\":20},{\"type\":\"hover\",\"text\":\"const signer: SmartAccountSigner\",\"start\":398,\"length\":6,\"target\":\"signer\",\"line\":11,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) interface SmartAccountSigner\\nimport SmartAccountSigner\",\"docs\":\"A signer that can sign messages and typed data.\",\"tags\":[[\"template\",\"Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.\"]],\"start\":406,\"length\":18,\"target\":\"SmartAccountSigner\",\"line\":11,\"character\":21},{\"type\":\"hover\",\"text\":\"(alias) new WalletClientSigner(client: {\\n account: Account | undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n ... 24 more ...;\\n extend: (fn: (client: Client<...>) => client) => Client<...>;\\n}, signerType: string): WalletClientSigner\\nimport WalletClientSigner\",\"docs\":\"Initializes a signer with a given wallet client and signer type.\",\"tags\":[[\"example\",\"```ts\\nimport { WalletClientSigner } from \\\"@aa-sdk/core\\\";\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum!)\\n});\\n\\nconst signer = new WalletClientSigner(client, 'wallet');\\n```\"],[\"param\",\"client The wallet client to interact with\"],[\"param\",\"signerType The type of signer; must be a valid signer type, otherwise an error will be thrown\"],[\"throws\",\"{InvalidSignerTypeError} If the signer type is invalid\"]],\"start\":431,\"length\":18,\"target\":\"WalletClientSigner\",\"line\":11,\"character\":46},{\"type\":\"hover\",\"text\":\"const walletClient: {\\n account: undefined;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n chain: {\\n blockExplorers: {\\n ...;\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n };\\n ... 23 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":453,\"length\":12,\"target\":\"walletClient\",\"line\":12,\"character\":2}],\"tags\":[]}],[\"5c8909c23c3e963af4ad1f2cd2929d516016076a6ec782964cc0edcd3fbf11bc\",{\"code\":\"import React from \\\"react\\\";\\nimport {\\n type UseSendUserOperationResult,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyOpSenderComponent() {\\n const { client } = useSmartAccountClient({ type: \\\"LightAccount\\\" });\\n\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n // optional parameter that will wait for the transaction to be mined before returning\\n waitForTxn: true,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseSendUserOperationResult, TAccount extends SupportedAccounts = SupportedAccounts> = {\\n sendUserOperation: UseMutateFunction, Error, SendUserOperationParameters, unknown>;\\n sendUserOperationAsync: UseMutateAsyncFunction, Error, SendUserOperationParameters, unknown>;\\n sendUserOperationResult: SendUserOperationWithEOA | undefined;\\n isSendingUserOperation: boolean;\\n error: Error | null;\\n}\\nimport UseSendUserOperationResult\",\"start\":43,\"length\":26,\"target\":\"UseSendUserOperationResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useSendUserOperation, TAccount extends SupportedAccounts = SupportedAccounts>(params: UseSendUserOperationArgs): UseSendUserOperationResult\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":73,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult>\\nimport useSmartAccountClient\",\"start\":97,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyOpSenderComponent(): React.JSX.Element\",\"start\":174,\"length\":19,\"target\":\"MyOpSenderComponent\",\"line\":7,\"character\":24},{\"type\":\"hover\",\"text\":\"const client: {\\n account: LightAccount;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 78 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | undefined\",\"start\":208,\"length\":6,\"target\":\"client\",\"line\":8,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult<...>\\nimport useSmartAccountClient\",\"start\":219,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":8,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) type: \\\"LightAccount\\\"\",\"start\":243,\"length\":4,\"target\":\"type\",\"line\":8,\"character\":45},{\"type\":\"hover\",\"text\":\"const sendUserOperation: UseMutateFunction>, Error, SendUserOperationParameters, unknown>\",\"start\":279,\"length\":17,\"target\":\"sendUserOperation\",\"line\":10,\"character\":10},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":298,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":10,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) useSendUserOperation, SupportedAccounts>(params: UseSendUserOperationArgs, SupportedAccounts>): UseSendUserOperationResult<...>\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":325,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":10,\"character\":56},{\"type\":\"hover\",\"text\":\"(property) client: {\\n account: SupportedAccounts;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | {\\n ...;\\n} | undefined\",\"start\":352,\"length\":6,\"target\":\"client\",\"line\":11,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) waitForTxn?: boolean | undefined\",\"start\":454,\"length\":10,\"target\":\"waitForTxn\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) onSuccess?: ((data: SendUserOperationWithEOA>, variables: SendUserOperationParameters, context: unknown) => unknown) | undefined\",\"start\":476,\"length\":9,\"target\":\"onSuccess\",\"line\":14,\"character\":4},{\"type\":\"hover\",\"text\":\"(parameter) hash: `0x${string}`\",\"start\":490,\"length\":4,\"target\":\"hash\",\"line\":14,\"character\":18},{\"type\":\"hover\",\"text\":\"(parameter) request: UserOperationRequest_v6 | UserOperationRequest_v7 | undefined\",\"start\":496,\"length\":7,\"target\":\"request\",\"line\":14,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) onError?: ((error: Error, variables: SendUserOperationParameters, context: unknown) => unknown) | undefined\",\"start\":582,\"length\":7,\"target\":\"onError\",\"line\":17,\"character\":4},{\"type\":\"hover\",\"text\":\"(parameter) error: Error\",\"start\":592,\"length\":5,\"target\":\"error\",\"line\":17,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":682,\"length\":3,\"target\":\"div\",\"line\":23,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":694,\"length\":6,\"target\":\"button\",\"line\":24,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":709,\"length\":7,\"target\":\"onClick\",\"line\":25,\"character\":8},{\"type\":\"hover\",\"text\":\"const sendUserOperation: (variables: SendUserOperationParameters, options?: MutateOptions>, Error, SendUserOperationParameters<...>, unknown> | undefined) => void\",\"start\":734,\"length\":17,\"target\":\"sendUserOperation\",\"line\":26,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":766,\"length\":2,\"target\":\"uo\",\"line\":27,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":786,\"length\":6,\"target\":\"target\",\"line\":28,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":828,\"length\":4,\"target\":\"data\",\"line\":29,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":854,\"length\":5,\"target\":\"value\",\"line\":30,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) React.ButtonHTMLAttributes.disabled?: boolean | undefined\",\"start\":911,\"length\":8,\"target\":\"disabled\",\"line\":34,\"character\":8},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":921,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":34,\"character\":18},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":962,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":36,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":1021,\"length\":6,\"target\":\"button\",\"line\":37,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":1035,\"length\":3,\"target\":\"div\",\"line\":38,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport {\\n type UseSendUserOperationResult,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyOpSenderComponent() {\\n const { client } = useSmartAccountClient({ type: \\\"LightAccount\\\" });\\n\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n // optional parameter that will wait for the transaction to be mined before returning\\n waitForTxn: true,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseSendUserOperationResult, TAccount extends SupportedAccounts = SupportedAccounts> = {\\n sendUserOperation: UseMutateFunction, Error, SendUserOperationParameters, unknown>;\\n sendUserOperationAsync: UseMutateAsyncFunction, Error, SendUserOperationParameters, unknown>;\\n sendUserOperationResult: SendUserOperationWithEOA | undefined;\\n isSendingUserOperation: boolean;\\n error: Error | null;\\n}\\nimport UseSendUserOperationResult\",\"start\":43,\"length\":26,\"target\":\"UseSendUserOperationResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useSendUserOperation, TAccount extends SupportedAccounts = SupportedAccounts>(params: UseSendUserOperationArgs): UseSendUserOperationResult\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":73,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult>\\nimport useSmartAccountClient\",\"start\":97,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyOpSenderComponent(): React.JSX.Element\",\"start\":174,\"length\":19,\"target\":\"MyOpSenderComponent\",\"line\":7,\"character\":24},{\"type\":\"hover\",\"text\":\"const client: {\\n account: LightAccount;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 78 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | undefined\",\"start\":208,\"length\":6,\"target\":\"client\",\"line\":8,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult<...>\\nimport useSmartAccountClient\",\"start\":219,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":8,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) type: \\\"LightAccount\\\"\",\"start\":243,\"length\":4,\"target\":\"type\",\"line\":8,\"character\":45},{\"type\":\"hover\",\"text\":\"const sendUserOperation: UseMutateFunction>, Error, SendUserOperationParameters, unknown>\",\"start\":279,\"length\":17,\"target\":\"sendUserOperation\",\"line\":10,\"character\":10},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":298,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":10,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) useSendUserOperation, SupportedAccounts>(params: UseSendUserOperationArgs, SupportedAccounts>): UseSendUserOperationResult<...>\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":325,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":10,\"character\":56},{\"type\":\"hover\",\"text\":\"(property) client: {\\n account: SupportedAccounts;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | {\\n ...;\\n} | undefined\",\"start\":352,\"length\":6,\"target\":\"client\",\"line\":11,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) waitForTxn?: boolean | undefined\",\"start\":454,\"length\":10,\"target\":\"waitForTxn\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) onSuccess?: ((data: SendUserOperationWithEOA>, variables: SendUserOperationParameters, context: unknown) => unknown) | undefined\",\"start\":476,\"length\":9,\"target\":\"onSuccess\",\"line\":14,\"character\":4},{\"type\":\"hover\",\"text\":\"(parameter) hash: `0x${string}`\",\"start\":490,\"length\":4,\"target\":\"hash\",\"line\":14,\"character\":18},{\"type\":\"hover\",\"text\":\"(parameter) request: UserOperationRequest_v6 | UserOperationRequest_v7 | undefined\",\"start\":496,\"length\":7,\"target\":\"request\",\"line\":14,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) onError?: ((error: Error, variables: SendUserOperationParameters, context: unknown) => unknown) | undefined\",\"start\":582,\"length\":7,\"target\":\"onError\",\"line\":17,\"character\":4},{\"type\":\"hover\",\"text\":\"(parameter) error: Error\",\"start\":592,\"length\":5,\"target\":\"error\",\"line\":17,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":682,\"length\":3,\"target\":\"div\",\"line\":23,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":694,\"length\":6,\"target\":\"button\",\"line\":24,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":709,\"length\":7,\"target\":\"onClick\",\"line\":25,\"character\":8},{\"type\":\"hover\",\"text\":\"const sendUserOperation: (variables: SendUserOperationParameters, options?: MutateOptions>, Error, SendUserOperationParameters<...>, unknown> | undefined) => void\",\"start\":734,\"length\":17,\"target\":\"sendUserOperation\",\"line\":26,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":766,\"length\":2,\"target\":\"uo\",\"line\":27,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":786,\"length\":6,\"target\":\"target\",\"line\":28,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":828,\"length\":4,\"target\":\"data\",\"line\":29,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":854,\"length\":5,\"target\":\"value\",\"line\":30,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) React.ButtonHTMLAttributes.disabled?: boolean | undefined\",\"start\":911,\"length\":8,\"target\":\"disabled\",\"line\":34,\"character\":8},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":921,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":34,\"character\":18},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":962,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":36,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":1021,\"length\":6,\"target\":\"button\",\"line\":37,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":1035,\"length\":3,\"target\":\"div\",\"line\":38,\"character\":6}],\"tags\":[]}],[\"bce2ad647ae0853ee76e960431d2bc9b3f24dcb5f9e148a0edcc0bf39c2d590e\",{\"code\":\"import React from \\\"react\\\";\\nimport {\\n type UseSendUserOperationResult,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyOpSenderComponent() {\\n const { client } = useSmartAccountClient({ type: \\\"LightAccount\\\" });\\n\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n // optional parameter that will wait for the transaction to be mined before returning\\n waitForTxn: true,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n uo: [\\n {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n ],\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseSendUserOperationResult, TAccount extends SupportedAccounts = SupportedAccounts> = {\\n sendUserOperation: UseMutateFunction, Error, SendUserOperationParameters, unknown>;\\n sendUserOperationAsync: UseMutateAsyncFunction, Error, SendUserOperationParameters, unknown>;\\n sendUserOperationResult: SendUserOperationWithEOA | undefined;\\n isSendingUserOperation: boolean;\\n error: Error | null;\\n}\\nimport UseSendUserOperationResult\",\"start\":43,\"length\":26,\"target\":\"UseSendUserOperationResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useSendUserOperation, TAccount extends SupportedAccounts = SupportedAccounts>(params: UseSendUserOperationArgs): UseSendUserOperationResult\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":73,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult>\\nimport useSmartAccountClient\",\"start\":97,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyOpSenderComponent(): React.JSX.Element\",\"start\":174,\"length\":19,\"target\":\"MyOpSenderComponent\",\"line\":7,\"character\":24},{\"type\":\"hover\",\"text\":\"const client: {\\n account: LightAccount;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 78 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | undefined\",\"start\":208,\"length\":6,\"target\":\"client\",\"line\":8,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult<...>\\nimport useSmartAccountClient\",\"start\":219,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":8,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) type: \\\"LightAccount\\\"\",\"start\":243,\"length\":4,\"target\":\"type\",\"line\":8,\"character\":45},{\"type\":\"hover\",\"text\":\"const sendUserOperation: UseMutateFunction>, Error, SendUserOperationParameters, unknown>\",\"start\":279,\"length\":17,\"target\":\"sendUserOperation\",\"line\":10,\"character\":10},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":298,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":10,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) useSendUserOperation, SupportedAccounts>(params: UseSendUserOperationArgs, SupportedAccounts>): UseSendUserOperationResult<...>\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":325,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":10,\"character\":56},{\"type\":\"hover\",\"text\":\"(property) client: {\\n account: SupportedAccounts;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | {\\n ...;\\n} | undefined\",\"start\":352,\"length\":6,\"target\":\"client\",\"line\":11,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) waitForTxn?: boolean | undefined\",\"start\":454,\"length\":10,\"target\":\"waitForTxn\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) onSuccess?: ((data: SendUserOperationWithEOA>, variables: SendUserOperationParameters, context: unknown) => unknown) | undefined\",\"start\":476,\"length\":9,\"target\":\"onSuccess\",\"line\":14,\"character\":4},{\"type\":\"hover\",\"text\":\"(parameter) hash: `0x${string}`\",\"start\":490,\"length\":4,\"target\":\"hash\",\"line\":14,\"character\":18},{\"type\":\"hover\",\"text\":\"(parameter) request: UserOperationRequest_v6 | UserOperationRequest_v7 | undefined\",\"start\":496,\"length\":7,\"target\":\"request\",\"line\":14,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) onError?: ((error: Error, variables: SendUserOperationParameters, context: unknown) => unknown) | undefined\",\"start\":582,\"length\":7,\"target\":\"onError\",\"line\":17,\"character\":4},{\"type\":\"hover\",\"text\":\"(parameter) error: Error\",\"start\":592,\"length\":5,\"target\":\"error\",\"line\":17,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":682,\"length\":3,\"target\":\"div\",\"line\":23,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":694,\"length\":6,\"target\":\"button\",\"line\":24,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":709,\"length\":7,\"target\":\"onClick\",\"line\":25,\"character\":8},{\"type\":\"hover\",\"text\":\"const sendUserOperation: (variables: SendUserOperationParameters, options?: MutateOptions>, Error, SendUserOperationParameters<...>, unknown> | undefined) => void\",\"start\":734,\"length\":17,\"target\":\"sendUserOperation\",\"line\":26,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":766,\"length\":2,\"target\":\"uo\",\"line\":27,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":804,\"length\":6,\"target\":\"target\",\"line\":29,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":848,\"length\":4,\"target\":\"data\",\"line\":30,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":876,\"length\":5,\"target\":\"value\",\"line\":31,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":936,\"length\":6,\"target\":\"target\",\"line\":34,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":980,\"length\":4,\"target\":\"data\",\"line\":35,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":1008,\"length\":5,\"target\":\"value\",\"line\":36,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) React.ButtonHTMLAttributes.disabled?: boolean | undefined\",\"start\":1082,\"length\":8,\"target\":\"disabled\",\"line\":41,\"character\":8},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":1092,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":41,\"character\":18},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":1133,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":43,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":1192,\"length\":6,\"target\":\"button\",\"line\":44,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":1206,\"length\":3,\"target\":\"div\",\"line\":45,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport {\\n type UseSendUserOperationResult,\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyOpSenderComponent() {\\n const { client } = useSmartAccountClient({ type: \\\"LightAccount\\\" });\\n\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n // optional parameter that will wait for the transaction to be mined before returning\\n waitForTxn: true,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n uo: [\\n {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n ],\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseSendUserOperationResult, TAccount extends SupportedAccounts = SupportedAccounts> = {\\n sendUserOperation: UseMutateFunction, Error, SendUserOperationParameters, unknown>;\\n sendUserOperationAsync: UseMutateAsyncFunction, Error, SendUserOperationParameters, unknown>;\\n sendUserOperationResult: SendUserOperationWithEOA | undefined;\\n isSendingUserOperation: boolean;\\n error: Error | null;\\n}\\nimport UseSendUserOperationResult\",\"start\":43,\"length\":26,\"target\":\"UseSendUserOperationResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useSendUserOperation, TAccount extends SupportedAccounts = SupportedAccounts>(params: UseSendUserOperationArgs): UseSendUserOperationResult\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":73,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult>\\nimport useSmartAccountClient\",\"start\":97,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyOpSenderComponent(): React.JSX.Element\",\"start\":174,\"length\":19,\"target\":\"MyOpSenderComponent\",\"line\":7,\"character\":24},{\"type\":\"hover\",\"text\":\"const client: {\\n account: LightAccount;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 78 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | undefined\",\"start\":208,\"length\":6,\"target\":\"client\",\"line\":8,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult<...>\\nimport useSmartAccountClient\",\"start\":219,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":8,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) type: \\\"LightAccount\\\"\",\"start\":243,\"length\":4,\"target\":\"type\",\"line\":8,\"character\":45},{\"type\":\"hover\",\"text\":\"const sendUserOperation: UseMutateFunction>, Error, SendUserOperationParameters, unknown>\",\"start\":279,\"length\":17,\"target\":\"sendUserOperation\",\"line\":10,\"character\":10},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":298,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":10,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) useSendUserOperation, SupportedAccounts>(params: UseSendUserOperationArgs, SupportedAccounts>): UseSendUserOperationResult<...>\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":325,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":10,\"character\":56},{\"type\":\"hover\",\"text\":\"(property) client: {\\n account: SupportedAccounts;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | {\\n ...;\\n} | undefined\",\"start\":352,\"length\":6,\"target\":\"client\",\"line\":11,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) waitForTxn?: boolean | undefined\",\"start\":454,\"length\":10,\"target\":\"waitForTxn\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) onSuccess?: ((data: SendUserOperationWithEOA>, variables: SendUserOperationParameters, context: unknown) => unknown) | undefined\",\"start\":476,\"length\":9,\"target\":\"onSuccess\",\"line\":14,\"character\":4},{\"type\":\"hover\",\"text\":\"(parameter) hash: `0x${string}`\",\"start\":490,\"length\":4,\"target\":\"hash\",\"line\":14,\"character\":18},{\"type\":\"hover\",\"text\":\"(parameter) request: UserOperationRequest_v6 | UserOperationRequest_v7 | undefined\",\"start\":496,\"length\":7,\"target\":\"request\",\"line\":14,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) onError?: ((error: Error, variables: SendUserOperationParameters, context: unknown) => unknown) | undefined\",\"start\":582,\"length\":7,\"target\":\"onError\",\"line\":17,\"character\":4},{\"type\":\"hover\",\"text\":\"(parameter) error: Error\",\"start\":592,\"length\":5,\"target\":\"error\",\"line\":17,\"character\":14},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":682,\"length\":3,\"target\":\"div\",\"line\":23,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":694,\"length\":6,\"target\":\"button\",\"line\":24,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":709,\"length\":7,\"target\":\"onClick\",\"line\":25,\"character\":8},{\"type\":\"hover\",\"text\":\"const sendUserOperation: (variables: SendUserOperationParameters, options?: MutateOptions>, Error, SendUserOperationParameters<...>, unknown> | undefined) => void\",\"start\":734,\"length\":17,\"target\":\"sendUserOperation\",\"line\":26,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":766,\"length\":2,\"target\":\"uo\",\"line\":27,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":804,\"length\":6,\"target\":\"target\",\"line\":29,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":848,\"length\":4,\"target\":\"data\",\"line\":30,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":876,\"length\":5,\"target\":\"value\",\"line\":31,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":936,\"length\":6,\"target\":\"target\",\"line\":34,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":980,\"length\":4,\"target\":\"data\",\"line\":35,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":1008,\"length\":5,\"target\":\"value\",\"line\":36,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) React.ButtonHTMLAttributes.disabled?: boolean | undefined\",\"start\":1082,\"length\":8,\"target\":\"disabled\",\"line\":41,\"character\":8},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":1092,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":41,\"character\":18},{\"type\":\"hover\",\"text\":\"const isSendingUserOperation: boolean\",\"start\":1133,\"length\":22,\"target\":\"isSendingUserOperation\",\"line\":43,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":1192,\"length\":6,\"target\":\"button\",\"line\":44,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":1206,\"length\":3,\"target\":\"div\",\"line\":45,\"character\":6}],\"tags\":[]}],[\"c35ea019a1ad7b2634bdc048ba1b8208d35bcae49fa3b02e93331cf8e57e124c\",{\"code\":\"import React from \\\"react\\\";\\nimport { useAuthModal } from \\\"@account-kit/react\\\";\\n\\nexport default function MyPage() {\\n const { openAuthModal } = useAuthModal();\\n\\n return ;\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) const useAuthModal: () => {\\n isOpen: boolean;\\n openAuthModal: () => void;\\n closeAuthModal: () => void;\\n}\\nimport useAuthModal\",\"docs\":\"A hook that returns the open and close functions for the Auth Modal if uiConfig\\nis enabled on the Account Provider\",\"tags\":[[\"example\",\"```tsx\\nimport { useAuthModal } from \\\"@account-kit/react\\\";\\n\\nconst ComponentWithAuthModal = () => {\\n const { openAuthModal } = useAuthModal();\\n\\n return (\\n
\\n \\n
\\n );\\n};\\n```\"],[\"returns\",\"an object containing methods for opening or closing the auth modal\"]],\"start\":36,\"length\":12,\"target\":\"useAuthModal\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"function MyPage(): React.JSX.Element\",\"start\":103,\"length\":6,\"target\":\"MyPage\",\"line\":3,\"character\":24},{\"type\":\"hover\",\"text\":\"const openAuthModal: () => void\",\"start\":124,\"length\":13,\"target\":\"openAuthModal\",\"line\":4,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useAuthModal(): {\\n isOpen: boolean;\\n openAuthModal: () => void;\\n closeAuthModal: () => void;\\n}\\nimport useAuthModal\",\"docs\":\"A hook that returns the open and close functions for the Auth Modal if uiConfig\\nis enabled on the Account Provider\",\"tags\":[[\"example\",\"```tsx\\nimport { useAuthModal } from \\\"@account-kit/react\\\";\\n\\nconst ComponentWithAuthModal = () => {\\n const { openAuthModal } = useAuthModal();\\n\\n return (\\n
\\n \\n
\\n );\\n};\\n```\"],[\"returns\",\"an object containing methods for opening or closing the auth modal\"]],\"start\":142,\"length\":12,\"target\":\"useAuthModal\",\"line\":4,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":169,\"length\":6,\"target\":\"button\",\"line\":6,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":176,\"length\":7,\"target\":\"onClick\",\"line\":6,\"character\":17},{\"type\":\"hover\",\"text\":\"const openAuthModal: () => void\",\"start\":185,\"length\":13,\"target\":\"openAuthModal\",\"line\":6,\"character\":26},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":214,\"length\":6,\"target\":\"button\",\"line\":6,\"character\":55}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport { useAuthModal } from \\\"@account-kit/react\\\";\\n\\nexport default function MyPage() {\\n const { openAuthModal } = useAuthModal();\\n\\n return ;\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) const useAuthModal: () => {\\n isOpen: boolean;\\n openAuthModal: () => void;\\n closeAuthModal: () => void;\\n}\\nimport useAuthModal\",\"docs\":\"A hook that returns the open and close functions for the Auth Modal if uiConfig\\nis enabled on the Account Provider\",\"tags\":[[\"example\",\"```tsx\\nimport { useAuthModal } from \\\"@account-kit/react\\\";\\n\\nconst ComponentWithAuthModal = () => {\\n const { openAuthModal } = useAuthModal();\\n\\n return (\\n
\\n \\n
\\n );\\n};\\n```\"],[\"returns\",\"an object containing methods for opening or closing the auth modal\"]],\"start\":36,\"length\":12,\"target\":\"useAuthModal\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"function MyPage(): React.JSX.Element\",\"start\":103,\"length\":6,\"target\":\"MyPage\",\"line\":3,\"character\":24},{\"type\":\"hover\",\"text\":\"const openAuthModal: () => void\",\"start\":124,\"length\":13,\"target\":\"openAuthModal\",\"line\":4,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useAuthModal(): {\\n isOpen: boolean;\\n openAuthModal: () => void;\\n closeAuthModal: () => void;\\n}\\nimport useAuthModal\",\"docs\":\"A hook that returns the open and close functions for the Auth Modal if uiConfig\\nis enabled on the Account Provider\",\"tags\":[[\"example\",\"```tsx\\nimport { useAuthModal } from \\\"@account-kit/react\\\";\\n\\nconst ComponentWithAuthModal = () => {\\n const { openAuthModal } = useAuthModal();\\n\\n return (\\n
\\n \\n
\\n );\\n};\\n```\"],[\"returns\",\"an object containing methods for opening or closing the auth modal\"]],\"start\":142,\"length\":12,\"target\":\"useAuthModal\",\"line\":4,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":169,\"length\":6,\"target\":\"button\",\"line\":6,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":176,\"length\":7,\"target\":\"onClick\",\"line\":6,\"character\":17},{\"type\":\"hover\",\"text\":\"const openAuthModal: () => void\",\"start\":185,\"length\":13,\"target\":\"openAuthModal\",\"line\":6,\"character\":26},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":214,\"length\":6,\"target\":\"button\",\"line\":6,\"character\":55}],\"tags\":[]}],[\"c1d7abd206346d50efc6743a1bfed7c0cdee986aa2c06e4e0a544b34cbe14626\",{\"code\":\"import React from \\\"react\\\";\\nimport { AuthCard } from \\\"@account-kit/react\\\";\\n\\nexport default function MyLoginPage() {\\n return (\\n
\\n \\n
\\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) const AuthCard: (props: AuthCardProps) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AuthCard\",\"docs\":\"React component containing an Auth view with configured auth methods\\nand options based on the config passed to the AlchemyAccountProvider\",\"tags\":[[\"example\",\"```tsx\\nimport { AuthCard, useAlchemyAccountContext } from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithAuthCard() {\\n // assumes you've passed in a UI config to the Account Provider\\n // you can also directly set the properties on the AuthCard component\\n const { uiConfig } = useAlchemyAccountContext();\\n\\n return (\\n \\n );\\n}\\n```\"],[\"param\",\"props Card Props\"],[\"returns\",\"a react component containing the AuthCard\"]],\"start\":36,\"length\":8,\"target\":\"AuthCard\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"function MyLoginPage(): React.JSX.Element\",\"start\":99,\"length\":11,\"target\":\"MyLoginPage\",\"line\":3,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":131,\"length\":3,\"target\":\"div\",\"line\":5,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) React.HTMLAttributes.className?: string | undefined\",\"start\":135,\"length\":9,\"target\":\"className\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const AuthCard: (props: AuthCardProps) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AuthCard\",\"docs\":\"React component containing an Auth view with configured auth methods\\nand options based on the config passed to the AlchemyAccountProvider\",\"tags\":[[\"example\",\"```tsx\\nimport { AuthCard, useAlchemyAccountContext } from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithAuthCard() {\\n // assumes you've passed in a UI config to the Account Provider\\n // you can also directly set the properties on the AuthCard component\\n const { uiConfig } = useAlchemyAccountContext();\\n\\n return (\\n \\n );\\n}\\n```\"],[\"param\",\"props Card Props\"],[\"returns\",\"a react component containing the AuthCard\"]],\"start\":216,\"length\":8,\"target\":\"AuthCard\",\"line\":6,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":234,\"length\":3,\"target\":\"div\",\"line\":7,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport { AuthCard } from \\\"@account-kit/react\\\";\\n\\nexport default function MyLoginPage() {\\n return (\\n
\\n \\n
\\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) const AuthCard: (props: AuthCardProps) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AuthCard\",\"docs\":\"React component containing an Auth view with configured auth methods\\nand options based on the config passed to the AlchemyAccountProvider\",\"tags\":[[\"example\",\"```tsx\\nimport { AuthCard, useAlchemyAccountContext } from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithAuthCard() {\\n // assumes you've passed in a UI config to the Account Provider\\n // you can also directly set the properties on the AuthCard component\\n const { uiConfig } = useAlchemyAccountContext();\\n\\n return (\\n \\n );\\n}\\n```\"],[\"param\",\"props Card Props\"],[\"returns\",\"a react component containing the AuthCard\"]],\"start\":36,\"length\":8,\"target\":\"AuthCard\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"function MyLoginPage(): React.JSX.Element\",\"start\":99,\"length\":11,\"target\":\"MyLoginPage\",\"line\":3,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":131,\"length\":3,\"target\":\"div\",\"line\":5,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) React.HTMLAttributes.className?: string | undefined\",\"start\":135,\"length\":9,\"target\":\"className\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const AuthCard: (props: AuthCardProps) => import(\\\"react/jsx-runtime\\\").JSX.Element\\nimport AuthCard\",\"docs\":\"React component containing an Auth view with configured auth methods\\nand options based on the config passed to the AlchemyAccountProvider\",\"tags\":[[\"example\",\"```tsx\\nimport { AuthCard, useAlchemyAccountContext } from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithAuthCard() {\\n // assumes you've passed in a UI config to the Account Provider\\n // you can also directly set the properties on the AuthCard component\\n const { uiConfig } = useAlchemyAccountContext();\\n\\n return (\\n \\n );\\n}\\n```\"],[\"param\",\"props Card Props\"],[\"returns\",\"a react component containing the AuthCard\"]],\"start\":216,\"length\":8,\"target\":\"AuthCard\",\"line\":6,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":234,\"length\":3,\"target\":\"div\",\"line\":7,\"character\":6}],\"tags\":[]}],[\"04d20404a60e0035f28ee6d961ae1c4437120a07d004cced7bb2c7fce7efc6e1\",{\"code\":\"import React from \\\"react\\\";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from \\\"@account-kit/react\\\";\\n\\n// This examples uses email authentication\\n// you can also use passkeys if the user has one created\\nexport default function MyLoginPage() {\\n const { authenticate, isPending } = useAuthenticate();\\n const [email, setEmail] = React.useState(\\\"\\\");\\n\\n return (\\n
\\n setEmail(e.target.value)}\\n />\\n \\n
\\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseAuthenticateResult = {\\n authenticate: UseMutateFunction;\\n authenticateAsync: UseMutateAsyncFunction;\\n isPending: boolean;\\n error: Error | null;\\n}\\nimport UseAuthenticateResult\",\"start\":43,\"length\":21,\"target\":\"UseAuthenticateResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useAuthenticate(mutationArgs?: UseAuthenticateMutationArgs): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":68,\"length\":15,\"target\":\"useAuthenticate\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyLoginPage(): React.JSX.Element\",\"start\":239,\"length\":11,\"target\":\"MyLoginPage\",\"line\":8,\"character\":24},{\"type\":\"hover\",\"text\":\"const authenticate: UseMutateFunction\",\"start\":265,\"length\":12,\"target\":\"authenticate\",\"line\":9,\"character\":10},{\"type\":\"hover\",\"text\":\"const isPending: boolean\",\"start\":279,\"length\":9,\"target\":\"isPending\",\"line\":9,\"character\":24},{\"type\":\"hover\",\"text\":\"(alias) useAuthenticate(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":293,\"length\":15,\"target\":\"useAuthenticate\",\"line\":9,\"character\":38},{\"type\":\"hover\",\"text\":\"const email: string\",\"start\":321,\"length\":5,\"target\":\"email\",\"line\":10,\"character\":9},{\"type\":\"hover\",\"text\":\"const setEmail: React.Dispatch>\",\"start\":328,\"length\":8,\"target\":\"setEmail\",\"line\":10,\"character\":16},{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":340,\"length\":5,\"target\":\"React\",\"line\":10,\"character\":28},{\"type\":\"hover\",\"text\":\"function React.useState(initialState: string | (() => string)): [string, React.Dispatch>] (+1 overload)\",\"docs\":\"Returns a stateful value, and a function to update it.\",\"tags\":[[\"version\",\"16.8.0\"],[\"see\",\"https://react.dev/reference/react/useState\"]],\"start\":346,\"length\":8,\"target\":\"useState\",\"line\":10,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":377,\"length\":3,\"target\":\"div\",\"line\":13,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.input: React.DetailedHTMLProps, HTMLInputElement>\",\"start\":389,\"length\":5,\"target\":\"input\",\"line\":14,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.type?: React.HTMLInputTypeAttribute | undefined\",\"start\":403,\"length\":4,\"target\":\"type\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.value?: string | number | readonly string[] | undefined\",\"start\":424,\"length\":5,\"target\":\"value\",\"line\":16,\"character\":8},{\"type\":\"hover\",\"text\":\"const email: string\",\"start\":431,\"length\":5,\"target\":\"email\",\"line\":16,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.onChange?: React.ChangeEventHandler | undefined\",\"start\":446,\"length\":8,\"target\":\"onChange\",\"line\":17,\"character\":8},{\"type\":\"hover\",\"text\":\"(parameter) e: React.ChangeEvent\",\"start\":457,\"length\":1,\"target\":\"e\",\"line\":17,\"character\":19},{\"type\":\"hover\",\"text\":\"const setEmail: (value: React.SetStateAction) => void\",\"start\":463,\"length\":8,\"target\":\"setEmail\",\"line\":17,\"character\":25},{\"type\":\"hover\",\"text\":\"(parameter) e: React.ChangeEvent\",\"start\":472,\"length\":1,\"target\":\"e\",\"line\":17,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) React.ChangeEvent.target: EventTarget & HTMLInputElement\",\"start\":474,\"length\":6,\"target\":\"target\",\"line\":17,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) HTMLInputElement.value: string\",\"docs\":\"Returns the value of the data at the cursor's current position.\",\"start\":481,\"length\":5,\"target\":\"value\",\"line\":17,\"character\":43},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":505,\"length\":6,\"target\":\"button\",\"line\":19,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":512,\"length\":7,\"target\":\"onClick\",\"line\":19,\"character\":14},{\"type\":\"hover\",\"text\":\"const authenticate: (variables: AuthParams, options?: MutateOptions | undefined) => void\",\"start\":527,\"length\":12,\"target\":\"authenticate\",\"line\":19,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":542,\"length\":4,\"target\":\"type\",\"line\":19,\"character\":44},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":557,\"length\":5,\"target\":\"email\",\"line\":19,\"character\":59},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":590,\"length\":6,\"target\":\"button\",\"line\":21,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":604,\"length\":3,\"target\":\"div\",\"line\":22,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from \\\"@account-kit/react\\\";\\n\\n// This examples uses email authentication\\n// you can also use passkeys if the user has one created\\nexport default function MyLoginPage() {\\n const { authenticate, isPending } = useAuthenticate();\\n const [email, setEmail] = React.useState(\\\"\\\");\\n\\n return (\\n
\\n setEmail(e.target.value)}\\n />\\n \\n
\\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseAuthenticateResult = {\\n authenticate: UseMutateFunction;\\n authenticateAsync: UseMutateAsyncFunction;\\n isPending: boolean;\\n error: Error | null;\\n}\\nimport UseAuthenticateResult\",\"start\":43,\"length\":21,\"target\":\"UseAuthenticateResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useAuthenticate(mutationArgs?: UseAuthenticateMutationArgs): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":68,\"length\":15,\"target\":\"useAuthenticate\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyLoginPage(): React.JSX.Element\",\"start\":239,\"length\":11,\"target\":\"MyLoginPage\",\"line\":8,\"character\":24},{\"type\":\"hover\",\"text\":\"const authenticate: UseMutateFunction\",\"start\":265,\"length\":12,\"target\":\"authenticate\",\"line\":9,\"character\":10},{\"type\":\"hover\",\"text\":\"const isPending: boolean\",\"start\":279,\"length\":9,\"target\":\"isPending\",\"line\":9,\"character\":24},{\"type\":\"hover\",\"text\":\"(alias) useAuthenticate(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":293,\"length\":15,\"target\":\"useAuthenticate\",\"line\":9,\"character\":38},{\"type\":\"hover\",\"text\":\"const email: string\",\"start\":321,\"length\":5,\"target\":\"email\",\"line\":10,\"character\":9},{\"type\":\"hover\",\"text\":\"const setEmail: React.Dispatch>\",\"start\":328,\"length\":8,\"target\":\"setEmail\",\"line\":10,\"character\":16},{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":340,\"length\":5,\"target\":\"React\",\"line\":10,\"character\":28},{\"type\":\"hover\",\"text\":\"function React.useState(initialState: string | (() => string)): [string, React.Dispatch>] (+1 overload)\",\"docs\":\"Returns a stateful value, and a function to update it.\",\"tags\":[[\"version\",\"16.8.0\"],[\"see\",\"https://react.dev/reference/react/useState\"]],\"start\":346,\"length\":8,\"target\":\"useState\",\"line\":10,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":377,\"length\":3,\"target\":\"div\",\"line\":13,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.input: React.DetailedHTMLProps, HTMLInputElement>\",\"start\":389,\"length\":5,\"target\":\"input\",\"line\":14,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.type?: React.HTMLInputTypeAttribute | undefined\",\"start\":403,\"length\":4,\"target\":\"type\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.value?: string | number | readonly string[] | undefined\",\"start\":424,\"length\":5,\"target\":\"value\",\"line\":16,\"character\":8},{\"type\":\"hover\",\"text\":\"const email: string\",\"start\":431,\"length\":5,\"target\":\"email\",\"line\":16,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.onChange?: React.ChangeEventHandler | undefined\",\"start\":446,\"length\":8,\"target\":\"onChange\",\"line\":17,\"character\":8},{\"type\":\"hover\",\"text\":\"(parameter) e: React.ChangeEvent\",\"start\":457,\"length\":1,\"target\":\"e\",\"line\":17,\"character\":19},{\"type\":\"hover\",\"text\":\"const setEmail: (value: React.SetStateAction) => void\",\"start\":463,\"length\":8,\"target\":\"setEmail\",\"line\":17,\"character\":25},{\"type\":\"hover\",\"text\":\"(parameter) e: React.ChangeEvent\",\"start\":472,\"length\":1,\"target\":\"e\",\"line\":17,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) React.ChangeEvent.target: EventTarget & HTMLInputElement\",\"start\":474,\"length\":6,\"target\":\"target\",\"line\":17,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) HTMLInputElement.value: string\",\"docs\":\"Returns the value of the data at the cursor's current position.\",\"start\":481,\"length\":5,\"target\":\"value\",\"line\":17,\"character\":43},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":505,\"length\":6,\"target\":\"button\",\"line\":19,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":512,\"length\":7,\"target\":\"onClick\",\"line\":19,\"character\":14},{\"type\":\"hover\",\"text\":\"const authenticate: (variables: AuthParams, options?: MutateOptions | undefined) => void\",\"start\":527,\"length\":12,\"target\":\"authenticate\",\"line\":19,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":542,\"length\":4,\"target\":\"type\",\"line\":19,\"character\":44},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":557,\"length\":5,\"target\":\"email\",\"line\":19,\"character\":59},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":590,\"length\":6,\"target\":\"button\",\"line\":21,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":604,\"length\":3,\"target\":\"div\",\"line\":22,\"character\":6}],\"tags\":[]}],[\"ca09b279a1eb6f9ee97226ced3b01a3eb20e1147582073539953019d637886d4\",{\"code\":\"import React from \\\"react\\\";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyLoginPage() {\\n const { authenticate, isPending } = useAuthenticate();\\n const [email, setEmail] = React.useState(\\\"\\\");\\n\\n return (\\n
\\n setEmail(e.target.value)}\\n />\\n \\n
\\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseAuthenticateResult = {\\n authenticate: UseMutateFunction;\\n authenticateAsync: UseMutateAsyncFunction;\\n isPending: boolean;\\n error: Error | null;\\n}\\nimport UseAuthenticateResult\",\"start\":43,\"length\":21,\"target\":\"UseAuthenticateResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useAuthenticate(mutationArgs?: UseAuthenticateMutationArgs): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":68,\"length\":15,\"target\":\"useAuthenticate\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyLoginPage(): React.JSX.Element\",\"start\":139,\"length\":11,\"target\":\"MyLoginPage\",\"line\":6,\"character\":24},{\"type\":\"hover\",\"text\":\"const authenticate: UseMutateFunction\",\"start\":165,\"length\":12,\"target\":\"authenticate\",\"line\":7,\"character\":10},{\"type\":\"hover\",\"text\":\"const isPending: boolean\",\"start\":179,\"length\":9,\"target\":\"isPending\",\"line\":7,\"character\":24},{\"type\":\"hover\",\"text\":\"(alias) useAuthenticate(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":193,\"length\":15,\"target\":\"useAuthenticate\",\"line\":7,\"character\":38},{\"type\":\"hover\",\"text\":\"const email: string\",\"start\":221,\"length\":5,\"target\":\"email\",\"line\":8,\"character\":9},{\"type\":\"hover\",\"text\":\"const setEmail: React.Dispatch>\",\"start\":228,\"length\":8,\"target\":\"setEmail\",\"line\":8,\"character\":16},{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":240,\"length\":5,\"target\":\"React\",\"line\":8,\"character\":28},{\"type\":\"hover\",\"text\":\"function React.useState(initialState: string | (() => string)): [string, React.Dispatch>] (+1 overload)\",\"docs\":\"Returns a stateful value, and a function to update it.\",\"tags\":[[\"version\",\"16.8.0\"],[\"see\",\"https://react.dev/reference/react/useState\"]],\"start\":246,\"length\":8,\"target\":\"useState\",\"line\":8,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":277,\"length\":3,\"target\":\"div\",\"line\":11,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.input: React.DetailedHTMLProps, HTMLInputElement>\",\"start\":289,\"length\":5,\"target\":\"input\",\"line\":12,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.type?: React.HTMLInputTypeAttribute | undefined\",\"start\":303,\"length\":4,\"target\":\"type\",\"line\":13,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.value?: string | number | readonly string[] | undefined\",\"start\":324,\"length\":5,\"target\":\"value\",\"line\":14,\"character\":8},{\"type\":\"hover\",\"text\":\"const email: string\",\"start\":331,\"length\":5,\"target\":\"email\",\"line\":14,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.onChange?: React.ChangeEventHandler | undefined\",\"start\":346,\"length\":8,\"target\":\"onChange\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"(parameter) e: React.ChangeEvent\",\"start\":357,\"length\":1,\"target\":\"e\",\"line\":15,\"character\":19},{\"type\":\"hover\",\"text\":\"const setEmail: (value: React.SetStateAction) => void\",\"start\":363,\"length\":8,\"target\":\"setEmail\",\"line\":15,\"character\":25},{\"type\":\"hover\",\"text\":\"(parameter) e: React.ChangeEvent\",\"start\":372,\"length\":1,\"target\":\"e\",\"line\":15,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) React.ChangeEvent.target: EventTarget & HTMLInputElement\",\"start\":374,\"length\":6,\"target\":\"target\",\"line\":15,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) HTMLInputElement.value: string\",\"docs\":\"Returns the value of the data at the cursor's current position.\",\"start\":381,\"length\":5,\"target\":\"value\",\"line\":15,\"character\":43},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":405,\"length\":6,\"target\":\"button\",\"line\":17,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":412,\"length\":7,\"target\":\"onClick\",\"line\":17,\"character\":14},{\"type\":\"hover\",\"text\":\"const authenticate: (variables: AuthParams, options?: MutateOptions | undefined) => void\",\"start\":427,\"length\":12,\"target\":\"authenticate\",\"line\":17,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":442,\"length\":4,\"target\":\"type\",\"line\":17,\"character\":44},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":459,\"length\":5,\"target\":\"email\",\"line\":17,\"character\":61},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":492,\"length\":6,\"target\":\"button\",\"line\":19,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":506,\"length\":3,\"target\":\"div\",\"line\":20,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyLoginPage() {\\n const { authenticate, isPending } = useAuthenticate();\\n const [email, setEmail] = React.useState(\\\"\\\");\\n\\n return (\\n
\\n setEmail(e.target.value)}\\n />\\n \\n
\\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseAuthenticateResult = {\\n authenticate: UseMutateFunction;\\n authenticateAsync: UseMutateAsyncFunction;\\n isPending: boolean;\\n error: Error | null;\\n}\\nimport UseAuthenticateResult\",\"start\":43,\"length\":21,\"target\":\"UseAuthenticateResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useAuthenticate(mutationArgs?: UseAuthenticateMutationArgs): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":68,\"length\":15,\"target\":\"useAuthenticate\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyLoginPage(): React.JSX.Element\",\"start\":139,\"length\":11,\"target\":\"MyLoginPage\",\"line\":6,\"character\":24},{\"type\":\"hover\",\"text\":\"const authenticate: UseMutateFunction\",\"start\":165,\"length\":12,\"target\":\"authenticate\",\"line\":7,\"character\":10},{\"type\":\"hover\",\"text\":\"const isPending: boolean\",\"start\":179,\"length\":9,\"target\":\"isPending\",\"line\":7,\"character\":24},{\"type\":\"hover\",\"text\":\"(alias) useAuthenticate(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":193,\"length\":15,\"target\":\"useAuthenticate\",\"line\":7,\"character\":38},{\"type\":\"hover\",\"text\":\"const email: string\",\"start\":221,\"length\":5,\"target\":\"email\",\"line\":8,\"character\":9},{\"type\":\"hover\",\"text\":\"const setEmail: React.Dispatch>\",\"start\":228,\"length\":8,\"target\":\"setEmail\",\"line\":8,\"character\":16},{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":240,\"length\":5,\"target\":\"React\",\"line\":8,\"character\":28},{\"type\":\"hover\",\"text\":\"function React.useState(initialState: string | (() => string)): [string, React.Dispatch>] (+1 overload)\",\"docs\":\"Returns a stateful value, and a function to update it.\",\"tags\":[[\"version\",\"16.8.0\"],[\"see\",\"https://react.dev/reference/react/useState\"]],\"start\":246,\"length\":8,\"target\":\"useState\",\"line\":8,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":277,\"length\":3,\"target\":\"div\",\"line\":11,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.input: React.DetailedHTMLProps, HTMLInputElement>\",\"start\":289,\"length\":5,\"target\":\"input\",\"line\":12,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.type?: React.HTMLInputTypeAttribute | undefined\",\"start\":303,\"length\":4,\"target\":\"type\",\"line\":13,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.value?: string | number | readonly string[] | undefined\",\"start\":324,\"length\":5,\"target\":\"value\",\"line\":14,\"character\":8},{\"type\":\"hover\",\"text\":\"const email: string\",\"start\":331,\"length\":5,\"target\":\"email\",\"line\":14,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) React.InputHTMLAttributes.onChange?: React.ChangeEventHandler | undefined\",\"start\":346,\"length\":8,\"target\":\"onChange\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"(parameter) e: React.ChangeEvent\",\"start\":357,\"length\":1,\"target\":\"e\",\"line\":15,\"character\":19},{\"type\":\"hover\",\"text\":\"const setEmail: (value: React.SetStateAction) => void\",\"start\":363,\"length\":8,\"target\":\"setEmail\",\"line\":15,\"character\":25},{\"type\":\"hover\",\"text\":\"(parameter) e: React.ChangeEvent\",\"start\":372,\"length\":1,\"target\":\"e\",\"line\":15,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) React.ChangeEvent.target: EventTarget & HTMLInputElement\",\"start\":374,\"length\":6,\"target\":\"target\",\"line\":15,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) HTMLInputElement.value: string\",\"docs\":\"Returns the value of the data at the cursor's current position.\",\"start\":381,\"length\":5,\"target\":\"value\",\"line\":15,\"character\":43},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":405,\"length\":6,\"target\":\"button\",\"line\":17,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":412,\"length\":7,\"target\":\"onClick\",\"line\":17,\"character\":14},{\"type\":\"hover\",\"text\":\"const authenticate: (variables: AuthParams, options?: MutateOptions | undefined) => void\",\"start\":427,\"length\":12,\"target\":\"authenticate\",\"line\":17,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":442,\"length\":4,\"target\":\"type\",\"line\":17,\"character\":44},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":459,\"length\":5,\"target\":\"email\",\"line\":17,\"character\":61},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":492,\"length\":6,\"target\":\"button\",\"line\":19,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":506,\"length\":3,\"target\":\"div\",\"line\":20,\"character\":6}],\"tags\":[]}],[\"082e1aa6ef5a9639a3742e7a5ccdd724af72d1954a47ab473ba45b29bdaf5d86\",{\"code\":\"import React from \\\"react\\\";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyLoginPage() {\\n const { authenticate } = useAuthenticate();\\n\\n return (\\n
\\n authenticate({ type: \\\"passkey\\\", createNew: false })}\\n >\\n Login\\n \\n
\\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseAuthenticateResult = {\\n authenticate: UseMutateFunction;\\n authenticateAsync: UseMutateAsyncFunction;\\n isPending: boolean;\\n error: Error | null;\\n}\\nimport UseAuthenticateResult\",\"start\":43,\"length\":21,\"target\":\"UseAuthenticateResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useAuthenticate(mutationArgs?: UseAuthenticateMutationArgs): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":68,\"length\":15,\"target\":\"useAuthenticate\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyLoginPage(): React.JSX.Element\",\"start\":139,\"length\":11,\"target\":\"MyLoginPage\",\"line\":6,\"character\":24},{\"type\":\"hover\",\"text\":\"const authenticate: UseMutateFunction\",\"start\":165,\"length\":12,\"target\":\"authenticate\",\"line\":7,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useAuthenticate(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":182,\"length\":15,\"target\":\"useAuthenticate\",\"line\":7,\"character\":27},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":218,\"length\":3,\"target\":\"div\",\"line\":10,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":230,\"length\":6,\"target\":\"button\",\"line\":11,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":245,\"length\":7,\"target\":\"onClick\",\"line\":12,\"character\":8},{\"type\":\"hover\",\"text\":\"const authenticate: (variables: AuthParams, options?: MutateOptions | undefined) => void\",\"start\":260,\"length\":12,\"target\":\"authenticate\",\"line\":12,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":275,\"length\":4,\"target\":\"type\",\"line\":12,\"character\":38},{\"type\":\"hover\",\"text\":\"(property) createNew: false\",\"start\":292,\"length\":9,\"target\":\"createNew\",\"line\":12,\"character\":55},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":343,\"length\":6,\"target\":\"button\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":357,\"length\":3,\"target\":\"div\",\"line\":16,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport {\\n type UseAuthenticateResult,\\n useAuthenticate,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyLoginPage() {\\n const { authenticate } = useAuthenticate();\\n\\n return (\\n
\\n authenticate({ type: \\\"passkey\\\", createNew: false })}\\n >\\n Login\\n \\n
\\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) type UseAuthenticateResult = {\\n authenticate: UseMutateFunction;\\n authenticateAsync: UseMutateAsyncFunction;\\n isPending: boolean;\\n error: Error | null;\\n}\\nimport UseAuthenticateResult\",\"start\":43,\"length\":21,\"target\":\"UseAuthenticateResult\",\"line\":2,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useAuthenticate(mutationArgs?: UseAuthenticateMutationArgs): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":68,\"length\":15,\"target\":\"useAuthenticate\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyLoginPage(): React.JSX.Element\",\"start\":139,\"length\":11,\"target\":\"MyLoginPage\",\"line\":6,\"character\":24},{\"type\":\"hover\",\"text\":\"const authenticate: UseMutateFunction\",\"start\":165,\"length\":12,\"target\":\"authenticate\",\"line\":7,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useAuthenticate(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseAuthenticateResult\\nimport useAuthenticate\",\"docs\":\"Provides functions and state for authenticating a user using a signer. It includes methods for both synchronous and asynchronous mutations.\",\"tags\":[[\"example\",\"```ts\\nimport { useAuthenticate } from \\\"@account-kit/react\\\";\\n\\nconst { authenticate, authenticateAsync, isPending, error } = useAuthenticate({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional mutation arguments to configure the authentication mutation\"],[\"returns\",\"An object containing functions and state for handling user authentication, including methods for synchronously and asynchronously executing the authentication\"]],\"start\":182,\"length\":15,\"target\":\"useAuthenticate\",\"line\":7,\"character\":27},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":218,\"length\":3,\"target\":\"div\",\"line\":10,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":230,\"length\":6,\"target\":\"button\",\"line\":11,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":245,\"length\":7,\"target\":\"onClick\",\"line\":12,\"character\":8},{\"type\":\"hover\",\"text\":\"const authenticate: (variables: AuthParams, options?: MutateOptions | undefined) => void\",\"start\":260,\"length\":12,\"target\":\"authenticate\",\"line\":12,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":275,\"length\":4,\"target\":\"type\",\"line\":12,\"character\":38},{\"type\":\"hover\",\"text\":\"(property) createNew: false\",\"start\":292,\"length\":9,\"target\":\"createNew\",\"line\":12,\"character\":55},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":343,\"length\":6,\"target\":\"button\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":357,\"length\":3,\"target\":\"div\",\"line\":16,\"character\":6}],\"tags\":[]}],[\"3920a8dccf044763fc65671dd1bba4fbe569fe40ccec8c3bd87067f8a29d7f30\",{\"code\":\"import { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig({\\n apiKey: \\\"ALCHEMY_API_KEY\\\",\\n chain: sepolia,\\n policyId: \\\"GAS_MANAGER_POLICY_ID\\\", // [!code ++]\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":60,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":111,\"length\":6,\"target\":\"config\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":120,\"length\":12,\"target\":\"createConfig\",\"line\":3,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":137,\"length\":6,\"target\":\"apiKey\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":166,\"length\":5,\"target\":\"chain\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":173,\"length\":7,\"target\":\"sepolia\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":184,\"length\":8,\"target\":\"policyId\",\"line\":6,\"character\":2}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":true,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,13]],\"flagNotations\":[{\"type\":\"handbookOptions\",\"name\":\"noErrors\",\"value\":true,\"start\":0,\"end\":13}],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"// @noErrors\\nimport { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig({\\n apiKey: \\\"ALCHEMY_API_KEY\\\",\\n chain: sepolia,\\n policyId: \\\"GAS_MANAGER_POLICY_ID\\\", // [!code ++]\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":60,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":111,\"length\":6,\"target\":\"config\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":120,\"length\":12,\"target\":\"createConfig\",\"line\":3,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":137,\"length\":6,\"target\":\"apiKey\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":166,\"length\":5,\"target\":\"chain\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":173,\"length\":7,\"target\":\"sepolia\",\"line\":5,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":184,\"length\":8,\"target\":\"policyId\",\"line\":6,\"character\":2}],\"tags\":[]}],[\"07f7b33adae9d6dab582f3dd7363a8c5d188fb4a867813dc9d25ab94f76c319c\",{\"code\":\"import React from \\\"react\\\";\\nimport {\\n useSmartAccountClient,\\n useSendUserOperation,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyComponent() {\\n const { client } = useSmartAccountClient({\\n type: \\\"LightAccount\\\",\\n policyId: \\\"GAS_MANAGER_POLICY_ID\\\",\\n });\\n const { sendUserOperation } = useSendUserOperation({ client });\\n\\n return (\\n \\n sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n })\\n }\\n >\\n Send Sponsored User Operation\\n \\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult>\\nimport useSmartAccountClient\",\"start\":38,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function useSendUserOperation, TAccount extends SupportedAccounts = SupportedAccounts>(params: UseSendUserOperationArgs): UseSendUserOperationResult\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":63,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyComponent(): React.JSX.Element\",\"start\":139,\"length\":11,\"target\":\"MyComponent\",\"line\":6,\"character\":24},{\"type\":\"hover\",\"text\":\"const client: {\\n account: LightAccount;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 78 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | undefined\",\"start\":165,\"length\":6,\"target\":\"client\",\"line\":7,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult<...>\\nimport useSmartAccountClient\",\"start\":176,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":7,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) type: \\\"LightAccount\\\"\",\"start\":204,\"length\":4,\"target\":\"type\",\"line\":8,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":230,\"length\":8,\"target\":\"policyId\",\"line\":9,\"character\":4},{\"type\":\"hover\",\"text\":\"const sendUserOperation: UseMutateFunction>, Error, SendUserOperationParameters, unknown>\",\"start\":281,\"length\":17,\"target\":\"sendUserOperation\",\"line\":11,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useSendUserOperation, SupportedAccounts>(params: UseSendUserOperationArgs, SupportedAccounts>): UseSendUserOperationResult<...>\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":303,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":11,\"character\":32},{\"type\":\"hover\",\"text\":\"(property) client: {\\n account: SupportedAccounts;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | {\\n ...;\\n} | undefined\",\"start\":326,\"length\":6,\"target\":\"client\",\"line\":11,\"character\":55},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":354,\"length\":6,\"target\":\"button\",\"line\":14,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":367,\"length\":7,\"target\":\"onClick\",\"line\":15,\"character\":6},{\"type\":\"hover\",\"text\":\"const sendUserOperation: (variables: SendUserOperationParameters, options?: MutateOptions>, Error, SendUserOperationParameters<...>, unknown> | undefined) => void\",\"start\":390,\"length\":17,\"target\":\"sendUserOperation\",\"line\":16,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":420,\"length\":2,\"target\":\"uo\",\"line\":17,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":438,\"length\":6,\"target\":\"target\",\"line\":18,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":478,\"length\":4,\"target\":\"data\",\"line\":19,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":502,\"length\":5,\"target\":\"value\",\"line\":20,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":593,\"length\":6,\"target\":\"button\",\"line\":26,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport {\\n useSmartAccountClient,\\n useSendUserOperation,\\n} from \\\"@account-kit/react\\\";\\n\\nexport default function MyComponent() {\\n const { client } = useSmartAccountClient({\\n type: \\\"LightAccount\\\",\\n policyId: \\\"GAS_MANAGER_POLICY_ID\\\",\\n });\\n const { sendUserOperation } = useSendUserOperation({ client });\\n\\n return (\\n \\n sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n })\\n }\\n >\\n Send Sponsored User Operation\\n \\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult>\\nimport useSmartAccountClient\",\"start\":38,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":2,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) function useSendUserOperation, TAccount extends SupportedAccounts = SupportedAccounts>(params: UseSendUserOperationArgs): UseSendUserOperationResult\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":63,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"function MyComponent(): React.JSX.Element\",\"start\":139,\"length\":11,\"target\":\"MyComponent\",\"line\":6,\"character\":24},{\"type\":\"hover\",\"text\":\"const client: {\\n account: LightAccount;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n ... 78 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | undefined\",\"start\":165,\"length\":6,\"target\":\"client\",\"line\":7,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useSmartAccountClient(args: UseSmartAccountClientProps): UseSmartAccountClientResult<...>\\nimport useSmartAccountClient\",\"start\":176,\"length\":21,\"target\":\"useSmartAccountClient\",\"line\":7,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) type: \\\"LightAccount\\\"\",\"start\":204,\"length\":4,\"target\":\"type\",\"line\":8,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":230,\"length\":8,\"target\":\"policyId\",\"line\":9,\"character\":4},{\"type\":\"hover\",\"text\":\"const sendUserOperation: UseMutateFunction>, Error, SendUserOperationParameters, unknown>\",\"start\":281,\"length\":17,\"target\":\"sendUserOperation\",\"line\":11,\"character\":10},{\"type\":\"hover\",\"text\":\"(alias) useSendUserOperation, SupportedAccounts>(params: UseSendUserOperationArgs, SupportedAccounts>): UseSendUserOperationResult<...>\\nimport useSendUserOperation\",\"docs\":\"A hook that returns functions for sending user operations.\\nYou can also optionally wait for a user operation to be mined before returning.\",\"tags\":[[\"example\",\"```tsx\\nimport {\\n useSendUserOperation,\\n useSmartAccountClient,\\n} from \\\"@account-kit/react\\\";\\n\\nfunction ComponentWithSendUserOperation() {\\n const { client } = useSmartAccountClient({\\n type: \\\"MultiOwnerModularAccount\\\",\\n });\\n const { sendUserOperation, isSendingUserOperation } = useSendUserOperation({\\n client,\\n onSuccess: ({ hash, request }) => {\\n // [optional] Do something with the hash and request\\n },\\n onError: (error) => {\\n // [optional] Do something with the error\\n },\\n // [optional] ...additional mutationArgs\\n });\\n\\n return (\\n
\\n \\n sendUserOperation({\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n })\\n }\\n disabled={isSendingUserOperation}\\n >\\n {isSendingUserOperation ? \\\"Sending...\\\" : \\\"Send UO\\\"}\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"params the parameters for the hook including the client, a flag to wait for tx mining, and mutation args\"],[\"returns\",\"functions and state for sending UOs\"]],\"start\":303,\"length\":20,\"target\":\"useSendUserOperation\",\"line\":11,\"character\":32},{\"type\":\"hover\",\"text\":\"(property) client: {\\n account: SupportedAccounts;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n} | {\\n ...;\\n} | undefined\",\"start\":326,\"length\":6,\"target\":\"client\",\"line\":11,\"character\":55},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":354,\"length\":6,\"target\":\"button\",\"line\":14,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":367,\"length\":7,\"target\":\"onClick\",\"line\":15,\"character\":6},{\"type\":\"hover\",\"text\":\"const sendUserOperation: (variables: SendUserOperationParameters, options?: MutateOptions>, Error, SendUserOperationParameters<...>, unknown> | undefined) => void\",\"start\":390,\"length\":17,\"target\":\"sendUserOperation\",\"line\":16,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":420,\"length\":2,\"target\":\"uo\",\"line\":17,\"character\":10},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":438,\"length\":6,\"target\":\"target\",\"line\":18,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":478,\"length\":4,\"target\":\"data\",\"line\":19,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":502,\"length\":5,\"target\":\"value\",\"line\":20,\"character\":12},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":593,\"length\":6,\"target\":\"button\",\"line\":26,\"character\":6}],\"tags\":[]}],[\"6befd98f3403b0bbc3f77b0b71185c2a75387fddb78891512059c4748eff4c46\",{\"code\":\"import { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig(\\n {\\n chain: sepolia,\\n apiKey: \\\"ALCHEMY_API_KEY\\\",\\n },\\n {\\n illustrationStyle: \\\"outline\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true, // [!code ++]\\n },\\n }\\n);\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":60,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":111,\"length\":6,\"target\":\"config\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":120,\"length\":12,\"target\":\"createConfig\",\"line\":3,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":142,\"length\":5,\"target\":\"chain\",\"line\":5,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":149,\"length\":7,\"target\":\"sepolia\",\"line\":5,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":162,\"length\":6,\"target\":\"apiKey\",\"line\":6,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) illustrationStyle?: \\\"outline\\\" | \\\"linear\\\" | \\\"filled\\\" | \\\"flat\\\" | undefined\",\"start\":202,\"length\":17,\"target\":\"illustrationStyle\",\"line\":9,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) auth?: {\\n addPasskeyOnSignup?: boolean | undefined;\\n header?: React.ReactNode;\\n hideError?: boolean | undefined;\\n onAuthSuccess?: (() => void) | undefined;\\n sections: AuthType[][];\\n hideSignInText?: boolean | undefined;\\n} | undefined\",\"start\":236,\"length\":4,\"target\":\"auth\",\"line\":10,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) sections: AuthType[][]\",\"docs\":\"Each section can contain multiple auth types which will be grouped together\\nand separated by an OR divider\",\"start\":250,\"length\":8,\"target\":\"sections\",\"line\":11,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":264,\"length\":4,\"target\":\"type\",\"line\":11,\"character\":20},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":285,\"length\":4,\"target\":\"type\",\"line\":11,\"character\":41},{\"type\":\"hover\",\"text\":\"(property) addPasskeyOnSignup?: boolean | undefined\",\"docs\":\"If this is true, then auth components will prompt users to add\\na passkey after signing in for the first time\",\"start\":312,\"length\":18,\"target\":\"addPasskeyOnSignup\",\"line\":12,\"character\":6}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":true,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,13]],\"flagNotations\":[{\"type\":\"handbookOptions\",\"name\":\"noErrors\",\"value\":true,\"start\":0,\"end\":13}],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"// @noErrors\\nimport { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig(\\n {\\n chain: sepolia,\\n apiKey: \\\"ALCHEMY_API_KEY\\\",\\n },\\n {\\n illustrationStyle: \\\"outline\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true, // [!code ++]\\n },\\n }\\n);\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":60,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":111,\"length\":6,\"target\":\"config\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":120,\"length\":12,\"target\":\"createConfig\",\"line\":3,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":142,\"length\":5,\"target\":\"chain\",\"line\":5,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":149,\"length\":7,\"target\":\"sepolia\",\"line\":5,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":162,\"length\":6,\"target\":\"apiKey\",\"line\":6,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) illustrationStyle?: \\\"outline\\\" | \\\"linear\\\" | \\\"filled\\\" | \\\"flat\\\" | undefined\",\"start\":202,\"length\":17,\"target\":\"illustrationStyle\",\"line\":9,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) auth?: {\\n addPasskeyOnSignup?: boolean | undefined;\\n header?: React.ReactNode;\\n hideError?: boolean | undefined;\\n onAuthSuccess?: (() => void) | undefined;\\n sections: AuthType[][];\\n hideSignInText?: boolean | undefined;\\n} | undefined\",\"start\":236,\"length\":4,\"target\":\"auth\",\"line\":10,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) sections: AuthType[][]\",\"docs\":\"Each section can contain multiple auth types which will be grouped together\\nand separated by an OR divider\",\"start\":250,\"length\":8,\"target\":\"sections\",\"line\":11,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":264,\"length\":4,\"target\":\"type\",\"line\":11,\"character\":20},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":285,\"length\":4,\"target\":\"type\",\"line\":11,\"character\":41},{\"type\":\"hover\",\"text\":\"(property) addPasskeyOnSignup?: boolean | undefined\",\"docs\":\"If this is true, then auth components will prompt users to add\\na passkey after signing in for the first time\",\"start\":312,\"length\":18,\"target\":\"addPasskeyOnSignup\",\"line\":12,\"character\":6}],\"tags\":[]}],[\"d27f0d6dbbc33f07a5d9a2e6a4e29077dac3f859a1c44bec9f38e6be037c65e5\",{\"code\":\"import React from \\\"react\\\";\\nimport { useAddPasskey } from \\\"@account-kit/react\\\";\\n\\nexport default function MyComponent() {\\n const { addPasskey, isAddingPasskey } = useAddPasskey();\\n\\n return (\\n {\\n addPasskey();\\n }}\\n >\\n Add Passkey\\n \\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useAddPasskey(mutationArgs?: UseAddPasskeyMutationArgs): UseAddPasskeyResult\\nimport useAddPasskey\",\"docs\":\"A custom hook to handle the addition of a passkey, which includes executing a mutation with optional parameters.\",\"tags\":[[\"example\",\"```ts\\nimport { useAddPasskey } from \\\"@account-kit/react\\\";\\n\\nconst { addPasskey, isAddingPasskey, error } = useAddPasskey({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional arguments for the mutation used for adding a passkey\"],[\"returns\",\"An object containing the `addPasskey` function, a boolean `isAddingPasskey` to track the mutation status, and any error encountered\"]],\"start\":36,\"length\":13,\"target\":\"useAddPasskey\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"function MyComponent(): React.JSX.Element\",\"start\":104,\"length\":11,\"target\":\"MyComponent\",\"line\":3,\"character\":24},{\"type\":\"hover\",\"text\":\"const addPasskey: UseMutateFunction\",\"start\":130,\"length\":10,\"target\":\"addPasskey\",\"line\":4,\"character\":10},{\"type\":\"hover\",\"text\":\"const isAddingPasskey: boolean\",\"start\":142,\"length\":15,\"target\":\"isAddingPasskey\",\"line\":4,\"character\":22},{\"type\":\"hover\",\"text\":\"(alias) useAddPasskey(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseAddPasskeyResult\\nimport useAddPasskey\",\"docs\":\"A custom hook to handle the addition of a passkey, which includes executing a mutation with optional parameters.\",\"tags\":[[\"example\",\"```ts\\nimport { useAddPasskey } from \\\"@account-kit/react\\\";\\n\\nconst { addPasskey, isAddingPasskey, error } = useAddPasskey({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional arguments for the mutation used for adding a passkey\"],[\"returns\",\"An object containing the `addPasskey` function, a boolean `isAddingPasskey` to track the mutation status, and any error encountered\"]],\"start\":162,\"length\":13,\"target\":\"useAddPasskey\",\"line\":4,\"character\":42},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":196,\"length\":6,\"target\":\"button\",\"line\":7,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) React.ButtonHTMLAttributes.disabled?: boolean | undefined\",\"start\":209,\"length\":8,\"target\":\"disabled\",\"line\":8,\"character\":6},{\"type\":\"hover\",\"text\":\"const isAddingPasskey: boolean\",\"start\":219,\"length\":15,\"target\":\"isAddingPasskey\",\"line\":8,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":242,\"length\":7,\"target\":\"onClick\",\"line\":9,\"character\":6},{\"type\":\"hover\",\"text\":\"const addPasskey: (variables: void | CredentialCreationOptions | undefined, options?: MutateOptions | undefined) => void\",\"start\":267,\"length\":10,\"target\":\"addPasskey\",\"line\":10,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":320,\"length\":6,\"target\":\"button\",\"line\":14,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport { useAddPasskey } from \\\"@account-kit/react\\\";\\n\\nexport default function MyComponent() {\\n const { addPasskey, isAddingPasskey } = useAddPasskey();\\n\\n return (\\n {\\n addPasskey();\\n }}\\n >\\n Add Passkey\\n \\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useAddPasskey(mutationArgs?: UseAddPasskeyMutationArgs): UseAddPasskeyResult\\nimport useAddPasskey\",\"docs\":\"A custom hook to handle the addition of a passkey, which includes executing a mutation with optional parameters.\",\"tags\":[[\"example\",\"```ts\\nimport { useAddPasskey } from \\\"@account-kit/react\\\";\\n\\nconst { addPasskey, isAddingPasskey, error } = useAddPasskey({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional arguments for the mutation used for adding a passkey\"],[\"returns\",\"An object containing the `addPasskey` function, a boolean `isAddingPasskey` to track the mutation status, and any error encountered\"]],\"start\":36,\"length\":13,\"target\":\"useAddPasskey\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"function MyComponent(): React.JSX.Element\",\"start\":104,\"length\":11,\"target\":\"MyComponent\",\"line\":3,\"character\":24},{\"type\":\"hover\",\"text\":\"const addPasskey: UseMutateFunction\",\"start\":130,\"length\":10,\"target\":\"addPasskey\",\"line\":4,\"character\":10},{\"type\":\"hover\",\"text\":\"const isAddingPasskey: boolean\",\"start\":142,\"length\":15,\"target\":\"isAddingPasskey\",\"line\":4,\"character\":22},{\"type\":\"hover\",\"text\":\"(alias) useAddPasskey(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseAddPasskeyResult\\nimport useAddPasskey\",\"docs\":\"A custom hook to handle the addition of a passkey, which includes executing a mutation with optional parameters.\",\"tags\":[[\"example\",\"```ts\\nimport { useAddPasskey } from \\\"@account-kit/react\\\";\\n\\nconst { addPasskey, isAddingPasskey, error } = useAddPasskey({\\n // these are optional\\n onSuccess: () => {\\n // do something on success\\n },\\n onError: (error) => console.error(error),\\n});\\n```\"],[\"param\",\"mutationArgs Optional arguments for the mutation used for adding a passkey\"],[\"returns\",\"An object containing the `addPasskey` function, a boolean `isAddingPasskey` to track the mutation status, and any error encountered\"]],\"start\":162,\"length\":13,\"target\":\"useAddPasskey\",\"line\":4,\"character\":42},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":196,\"length\":6,\"target\":\"button\",\"line\":7,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) React.ButtonHTMLAttributes.disabled?: boolean | undefined\",\"start\":209,\"length\":8,\"target\":\"disabled\",\"line\":8,\"character\":6},{\"type\":\"hover\",\"text\":\"const isAddingPasskey: boolean\",\"start\":219,\"length\":15,\"target\":\"isAddingPasskey\",\"line\":8,\"character\":16},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":242,\"length\":7,\"target\":\"onClick\",\"line\":9,\"character\":6},{\"type\":\"hover\",\"text\":\"const addPasskey: (variables: void | CredentialCreationOptions | undefined, options?: MutateOptions | undefined) => void\",\"start\":267,\"length\":10,\"target\":\"addPasskey\",\"line\":10,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":320,\"length\":6,\"target\":\"button\",\"line\":14,\"character\":6}],\"tags\":[]}],[\"3f8958d8c710b99545053b7aeab0d8a96395c0c16f2b83a922fa46d5c34da30a\",{\"code\":\"import { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia, mainnet } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig({\\n apiKey: \\\"ALCHEMY_API_KEY\\\",\\n // this is the default chain\\n chain: sepolia,\\n chains: [\\n {\\n chain: mainnet, // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n policyId: \\\"MAINNET_GAS_MANAGER_POLICY_ID\\\",\\n },\\n {\\n chain: sepolia,\\n // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n policyId: \\\"SEPOLIA_GAS_MANAGER_POLICY_ID\\\",\\n },\\n ],\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":60,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const mainnet: Chain\\nimport mainnet\",\"start\":69,\"length\":7,\"target\":\"mainnet\",\"line\":1,\"character\":18},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":120,\"length\":6,\"target\":\"config\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":129,\"length\":12,\"target\":\"createConfig\",\"line\":3,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":146,\"length\":6,\"target\":\"apiKey\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":206,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":213,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) chains: {\\n chain: Chain;\\n policyId?: string | undefined;\\n}[]\",\"start\":224,\"length\":6,\"target\":\"chains\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":246,\"length\":5,\"target\":\"chain\",\"line\":9,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const mainnet: Chain\\nimport mainnet\",\"start\":253,\"length\":7,\"target\":\"mainnet\",\"line\":9,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":352,\"length\":8,\"target\":\"policyId\",\"line\":10,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":414,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":421,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":526,\"length\":8,\"target\":\"policyId\",\"line\":15,\"character\":6}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":true,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,13]],\"flagNotations\":[{\"type\":\"handbookOptions\",\"name\":\"noErrors\",\"value\":true,\"start\":0,\"end\":13}],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"// @noErrors\\nimport { createConfig } from \\\"@account-kit/react\\\";\\nimport { sepolia, mainnet } from \\\"@account-kit/infra\\\";\\n\\nexport const config = createConfig({\\n apiKey: \\\"ALCHEMY_API_KEY\\\",\\n // this is the default chain\\n chain: sepolia,\\n chains: [\\n {\\n chain: mainnet, // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n policyId: \\\"MAINNET_GAS_MANAGER_POLICY_ID\\\",\\n },\\n {\\n chain: sepolia,\\n // optional: you can specify a policy ID for this chain, if you want to sponsor gas\\n policyId: \\\"SEPOLIA_GAS_MANAGER_POLICY_ID\\\",\\n },\\n ],\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const createConfig: (props: CreateConfigProps, ui?: AlchemyAccountsUIConfig) => AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":9,\"length\":12,\"target\":\"createConfig\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":60,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const mainnet: Chain\\nimport mainnet\",\"start\":69,\"length\":7,\"target\":\"mainnet\",\"line\":1,\"character\":18},{\"type\":\"hover\",\"text\":\"const config: AlchemyAccountsConfigWithUI\",\"start\":120,\"length\":6,\"target\":\"config\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createConfig(props: CreateConfigProps, ui?: AlchemyAccountsUIConfig | undefined): AlchemyAccountsConfigWithUI\\nimport createConfig\",\"docs\":\"Wraps the `createConfig` that is exported from `@aa-sdk/core` to allow passing\\nan additional argument, the configuration object for the Auth Components UI\\n(the modal and AuthCard).\",\"tags\":[[\"example\",\"```ts\\nimport { sepolia } from \\\"@account-kit/infra\\\"\\nimport { AlchemyAccountsUIConfig, createConfig } from \\\"@account-kit/react\\\"\\nimport { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nconst uiConfig: AlchemyAccountsUIConfig = {\\n illustrationStyle: \\\"linear\\\",\\n auth: {\\n sections: [[{ type: \\\"email\\\" }], [{ type: \\\"passkey\\\" }]],\\n addPasskeyOnSignup: true,\\n },\\n}\\n\\nconst config = createConfig({\\n rpcUrl: \\\"/api/rpc\\\",\\n chain: sepolia,\\n ssr: true,\\n}, uiConfig)\\n\\nexport const queryClient = new QueryClient();\\n```\"],[\"param\",\"props for creating an alchemy account config\"],[\"param\",\"ui (optional) configuration to use for the Auth Components UI\"],[\"returns\",\"an alchemy account config object containing the core and client store, as well as the UI config\"]],\"start\":129,\"length\":12,\"target\":\"createConfig\",\"line\":3,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":146,\"length\":6,\"target\":\"apiKey\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":206,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":213,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) chains: {\\n chain: Chain;\\n policyId?: string | undefined;\\n}[]\",\"start\":224,\"length\":6,\"target\":\"chains\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":246,\"length\":5,\"target\":\"chain\",\"line\":9,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const mainnet: Chain\\nimport mainnet\",\"start\":253,\"length\":7,\"target\":\"mainnet\",\"line\":9,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":352,\"length\":8,\"target\":\"policyId\",\"line\":10,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":414,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":421,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) policyId?: string | undefined\",\"start\":526,\"length\":8,\"target\":\"policyId\",\"line\":15,\"character\":6}],\"tags\":[]}],[\"b51abdca4e43e1f3ed016532ffea31cea80e6bee168c0906f93a4dc222abb8ec\",{\"code\":\"import React from \\\"react\\\";\\nimport { useChain } from \\\"@account-kit/react\\\";\\nimport { mainnet, sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport default function MyComponent() {\\n const { chain, setChain } = useChain();\\n\\n return (\\n
\\n

Current chain: {chain.name}

\\n \\n \\n
\\n );\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useChain(mutationArgs?: UseChainParams): UseChainResult\\nimport useChain\",\"docs\":\"A hook that returns the current chain as well as a function to set the chain.\\nNote: when calling `setChain` the chain that's passed in must be defined in\\nyour initial `createConfig` call.\",\"tags\":[[\"example\",\"```tsx\\nimport { useChain } from \\\"@account-kit/react\\\";\\n// Assuming the chain sepolia is defined in your initial createConfig call\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nfunction ComponentUsingChain() {\\n const { chain, setChain, isSettingChain } = useChain();\\n\\n return (\\n
\\n

Current Chain: {chain.id}

\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"mutationArgs optional properties which contain mutation arg overrides\"],[\"returns\",\"an object containing the current chain and a function to set the chain as well as loading state of setting the chain\"]],\"start\":36,\"length\":8,\"target\":\"useChain\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const mainnet: Chain\\nimport mainnet\",\"start\":83,\"length\":7,\"target\":\"mainnet\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":92,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":18},{\"type\":\"hover\",\"text\":\"function MyComponent(): React.JSX.Element\",\"start\":154,\"length\":11,\"target\":\"MyComponent\",\"line\":4,\"character\":24},{\"type\":\"hover\",\"text\":\"const chain: Chain\",\"start\":180,\"length\":5,\"target\":\"chain\",\"line\":5,\"character\":10},{\"type\":\"hover\",\"text\":\"const setChain: (params: {\\n chain: Chain;\\n}) => void\",\"start\":187,\"length\":8,\"target\":\"setChain\",\"line\":5,\"character\":17},{\"type\":\"hover\",\"text\":\"(alias) useChain(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseChainResult\\nimport useChain\",\"docs\":\"A hook that returns the current chain as well as a function to set the chain.\\nNote: when calling `setChain` the chain that's passed in must be defined in\\nyour initial `createConfig` call.\",\"tags\":[[\"example\",\"```tsx\\nimport { useChain } from \\\"@account-kit/react\\\";\\n// Assuming the chain sepolia is defined in your initial createConfig call\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nfunction ComponentUsingChain() {\\n const { chain, setChain, isSettingChain } = useChain();\\n\\n return (\\n
\\n

Current Chain: {chain.id}

\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"mutationArgs optional properties which contain mutation arg overrides\"],[\"returns\",\"an object containing the current chain and a function to set the chain as well as loading state of setting the chain\"]],\"start\":200,\"length\":8,\"target\":\"useChain\",\"line\":5,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":229,\"length\":3,\"target\":\"div\",\"line\":8,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.p: React.DetailedHTMLProps, HTMLParagraphElement>\",\"start\":241,\"length\":1,\"target\":\"p\",\"line\":9,\"character\":7},{\"type\":\"hover\",\"text\":\"const chain: Chain\",\"start\":259,\"length\":5,\"target\":\"chain\",\"line\":9,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) name: string\",\"docs\":\"Human-readable name\",\"start\":265,\"length\":4,\"target\":\"name\",\"line\":9,\"character\":31},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.p: React.DetailedHTMLProps, HTMLParagraphElement>\",\"start\":272,\"length\":1,\"target\":\"p\",\"line\":9,\"character\":38},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":282,\"length\":6,\"target\":\"button\",\"line\":10,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":289,\"length\":7,\"target\":\"onClick\",\"line\":10,\"character\":14},{\"type\":\"hover\",\"text\":\"const setChain: (params: {\\n chain: Chain;\\n}) => void\",\"start\":304,\"length\":8,\"target\":\"setChain\",\"line\":10,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":315,\"length\":5,\"target\":\"chain\",\"line\":10,\"character\":40},{\"type\":\"hover\",\"text\":\"(alias) const mainnet: Chain\\nimport mainnet\",\"start\":322,\"length\":7,\"target\":\"mainnet\",\"line\":10,\"character\":47},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":369,\"length\":6,\"target\":\"button\",\"line\":12,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":384,\"length\":6,\"target\":\"button\",\"line\":13,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":391,\"length\":7,\"target\":\"onClick\",\"line\":13,\"character\":14},{\"type\":\"hover\",\"text\":\"const setChain: (params: {\\n chain: Chain;\\n}) => void\",\"start\":406,\"length\":8,\"target\":\"setChain\",\"line\":13,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":417,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":40},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":424,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":47},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":471,\"length\":6,\"target\":\"button\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":485,\"length\":3,\"target\":\"div\",\"line\":16,\"character\":6}],\"meta\":{\"extension\":\"tsx\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.tsx\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.tsx\",\"content\":\"import React from \\\"react\\\";\\nimport { useChain } from \\\"@account-kit/react\\\";\\nimport { mainnet, sepolia } from \\\"@account-kit/infra\\\";\\n\\nexport default function MyComponent() {\\n const { chain, setChain } = useChain();\\n\\n return (\\n
\\n

Current chain: {chain.name}

\\n \\n \\n
\\n );\\n}\",\"extension\":\"tsx\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) namespace React\\nimport React\",\"start\":7,\"length\":5,\"target\":\"React\",\"line\":0,\"character\":7},{\"type\":\"hover\",\"text\":\"(alias) function useChain(mutationArgs?: UseChainParams): UseChainResult\\nimport useChain\",\"docs\":\"A hook that returns the current chain as well as a function to set the chain.\\nNote: when calling `setChain` the chain that's passed in must be defined in\\nyour initial `createConfig` call.\",\"tags\":[[\"example\",\"```tsx\\nimport { useChain } from \\\"@account-kit/react\\\";\\n// Assuming the chain sepolia is defined in your initial createConfig call\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nfunction ComponentUsingChain() {\\n const { chain, setChain, isSettingChain } = useChain();\\n\\n return (\\n
\\n

Current Chain: {chain.id}

\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"mutationArgs optional properties which contain mutation arg overrides\"],[\"returns\",\"an object containing the current chain and a function to set the chain as well as loading state of setting the chain\"]],\"start\":36,\"length\":8,\"target\":\"useChain\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const mainnet: Chain\\nimport mainnet\",\"start\":83,\"length\":7,\"target\":\"mainnet\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":92,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":18},{\"type\":\"hover\",\"text\":\"function MyComponent(): React.JSX.Element\",\"start\":154,\"length\":11,\"target\":\"MyComponent\",\"line\":4,\"character\":24},{\"type\":\"hover\",\"text\":\"const chain: Chain\",\"start\":180,\"length\":5,\"target\":\"chain\",\"line\":5,\"character\":10},{\"type\":\"hover\",\"text\":\"const setChain: (params: {\\n chain: Chain;\\n}) => void\",\"start\":187,\"length\":8,\"target\":\"setChain\",\"line\":5,\"character\":17},{\"type\":\"hover\",\"text\":\"(alias) useChain(mutationArgs?: Partial, \\\"mutationFn\\\" | \\\"mutationKey\\\">> | undefined): UseChainResult\\nimport useChain\",\"docs\":\"A hook that returns the current chain as well as a function to set the chain.\\nNote: when calling `setChain` the chain that's passed in must be defined in\\nyour initial `createConfig` call.\",\"tags\":[[\"example\",\"```tsx\\nimport { useChain } from \\\"@account-kit/react\\\";\\n// Assuming the chain sepolia is defined in your initial createConfig call\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\n\\nfunction ComponentUsingChain() {\\n const { chain, setChain, isSettingChain } = useChain();\\n\\n return (\\n
\\n

Current Chain: {chain.id}

\\n \\n
\\n );\\n}\\n```\"],[\"param\",\"mutationArgs optional properties which contain mutation arg overrides\"],[\"returns\",\"an object containing the current chain and a function to set the chain as well as loading state of setting the chain\"]],\"start\":200,\"length\":8,\"target\":\"useChain\",\"line\":5,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":229,\"length\":3,\"target\":\"div\",\"line\":8,\"character\":5},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.p: React.DetailedHTMLProps, HTMLParagraphElement>\",\"start\":241,\"length\":1,\"target\":\"p\",\"line\":9,\"character\":7},{\"type\":\"hover\",\"text\":\"const chain: Chain\",\"start\":259,\"length\":5,\"target\":\"chain\",\"line\":9,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) name: string\",\"docs\":\"Human-readable name\",\"start\":265,\"length\":4,\"target\":\"name\",\"line\":9,\"character\":31},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.p: React.DetailedHTMLProps, HTMLParagraphElement>\",\"start\":272,\"length\":1,\"target\":\"p\",\"line\":9,\"character\":38},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":282,\"length\":6,\"target\":\"button\",\"line\":10,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":289,\"length\":7,\"target\":\"onClick\",\"line\":10,\"character\":14},{\"type\":\"hover\",\"text\":\"const setChain: (params: {\\n chain: Chain;\\n}) => void\",\"start\":304,\"length\":8,\"target\":\"setChain\",\"line\":10,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":315,\"length\":5,\"target\":\"chain\",\"line\":10,\"character\":40},{\"type\":\"hover\",\"text\":\"(alias) const mainnet: Chain\\nimport mainnet\",\"start\":322,\"length\":7,\"target\":\"mainnet\",\"line\":10,\"character\":47},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":369,\"length\":6,\"target\":\"button\",\"line\":12,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":384,\"length\":6,\"target\":\"button\",\"line\":13,\"character\":7},{\"type\":\"hover\",\"text\":\"(property) React.DOMAttributes.onClick?: React.MouseEventHandler | undefined\",\"start\":391,\"length\":7,\"target\":\"onClick\",\"line\":13,\"character\":14},{\"type\":\"hover\",\"text\":\"const setChain: (params: {\\n chain: Chain;\\n}) => void\",\"start\":406,\"length\":8,\"target\":\"setChain\",\"line\":13,\"character\":29},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":417,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":40},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":424,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":47},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.button: React.DetailedHTMLProps, HTMLButtonElement>\",\"start\":471,\"length\":6,\"target\":\"button\",\"line\":15,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) JSX.IntrinsicElements.div: React.DetailedHTMLProps, HTMLDivElement>\",\"start\":485,\"length\":3,\"target\":\"div\",\"line\":16,\"character\":6}],\"tags\":[]}],[\"737aceddb12881bf009de7e7c4a6c2b5d3d17627ca9aa10dbcd5268e25e18aa6\",{\"code\":\"import { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":9,\"length\":6,\"target\":\"client\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const hash: `0x${string}`\",\"start\":44,\"length\":4,\"target\":\"hash\",\"line\":2,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":59,\"length\":6,\"target\":\"client\",\"line\":2,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) sendUserOperation: (args: SendUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined, keyof EntryPointRegistryBase<...>>) => Promise<...>\",\"start\":66,\"length\":17,\"target\":\"sendUserOperation\",\"line\":2,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":88,\"length\":2,\"target\":\"uo\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":98,\"length\":6,\"target\":\"target\",\"line\":4,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":130,\"length\":4,\"target\":\"data\",\"line\":5,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":146,\"length\":5,\"target\":\"value\",\"line\":6,\"character\":4}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,1595]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"client.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/client.ts\",\"content\":\"// @filename: client.ts\\n\\nimport { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const client = createAlchemySmartAccountClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n policyId: \\\"YOUR_POLICY_ID\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":778,\"filename\":\"client.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/client.ts\",\"content\":\"// @filename: client.ts\\n\\nimport { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const client = createAlchemySmartAccountClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n policyId: \\\"YOUR_POLICY_ID\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":1556,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":9,\"length\":6,\"target\":\"client\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const hash: `0x${string}`\",\"start\":44,\"length\":4,\"target\":\"hash\",\"line\":2,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":59,\"length\":6,\"target\":\"client\",\"line\":2,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) sendUserOperation: (args: SendUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined, keyof EntryPointRegistryBase<...>>) => Promise<...>\",\"start\":66,\"length\":17,\"target\":\"sendUserOperation\",\"line\":2,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":88,\"length\":2,\"target\":\"uo\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":98,\"length\":6,\"target\":\"target\",\"line\":4,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":130,\"length\":4,\"target\":\"data\",\"line\":5,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":146,\"length\":5,\"target\":\"value\",\"line\":6,\"character\":4}],\"tags\":[]}],[\"f4cdaf3cab4fb7e38e6f5661bdc86f7cacd1f50e88412fb09f74e57532c5e5c4\",{\"code\":\"import { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: [\\n {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n {\\n target: \\\"0xTARGET_ADDRESS_2\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n ],\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":9,\"length\":6,\"target\":\"client\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const hash: `0x${string}`\",\"start\":44,\"length\":4,\"target\":\"hash\",\"line\":2,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":59,\"length\":6,\"target\":\"client\",\"line\":2,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) sendUserOperation: (args: SendUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined, keyof EntryPointRegistryBase<...>>) => Promise<...>\",\"start\":66,\"length\":17,\"target\":\"sendUserOperation\",\"line\":2,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":88,\"length\":2,\"target\":\"uo\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":106,\"length\":6,\"target\":\"target\",\"line\":5,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":140,\"length\":4,\"target\":\"data\",\"line\":6,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":158,\"length\":5,\"target\":\"value\",\"line\":7,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":188,\"length\":6,\"target\":\"target\",\"line\":10,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":224,\"length\":4,\"target\":\"data\",\"line\":11,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":242,\"length\":5,\"target\":\"value\",\"line\":12,\"character\":6}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,1595]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"client.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/client.ts\",\"content\":\"// @filename: client.ts\\n\\nimport { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const client = createAlchemySmartAccountClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n policyId: \\\"YOUR_POLICY_ID\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":778,\"filename\":\"client.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/client.ts\",\"content\":\"// @filename: client.ts\\n\\nimport { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const client = createAlchemySmartAccountClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n policyId: \\\"YOUR_POLICY_ID\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":1556,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { client } from \\\"./client\\\";\\n\\nconst { hash } = await client.sendUserOperation({\\n uo: [\\n {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n {\\n target: \\\"0xTARGET_ADDRESS_2\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n ],\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":9,\"length\":6,\"target\":\"client\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const hash: `0x${string}`\",\"start\":44,\"length\":4,\"target\":\"hash\",\"line\":2,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":59,\"length\":6,\"target\":\"client\",\"line\":2,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) sendUserOperation: (args: SendUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined, keyof EntryPointRegistryBase<...>>) => Promise<...>\",\"start\":66,\"length\":17,\"target\":\"sendUserOperation\",\"line\":2,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":88,\"length\":2,\"target\":\"uo\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":106,\"length\":6,\"target\":\"target\",\"line\":5,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":140,\"length\":4,\"target\":\"data\",\"line\":6,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":158,\"length\":5,\"target\":\"value\",\"line\":7,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":188,\"length\":6,\"target\":\"target\",\"line\":10,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":224,\"length\":4,\"target\":\"data\",\"line\":11,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":242,\"length\":5,\"target\":\"value\",\"line\":12,\"character\":6}],\"tags\":[]}],[\"3bfead061c0c5cb9eaa0fd797ab9282aff66006b3ea36efa2168c45708dcc2fc\",{\"code\":\"import { client } from \\\"./client\\\";\\n\\n// 1. send a user operation\\nconst { hash, request } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\\n\\ntry {\\n // 2. wait for it to be mined\\n const txHash = await client.waitForUserOperationTransaction({ hash });\\n} catch (e) {\\n // 3. if it fails, resubmit the user operation via drop and replace\\n const { hash: newHash } = await client.dropAndReplaceUserOperation({\\n uoToDrop: request,\\n });\\n\\n // 4. wait for the new user operation to be mined\\n await client.waitForUserOperationTransaction({ hash: newHash });\\n}\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":9,\"length\":6,\"target\":\"client\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const hash: `0x${string}`\",\"start\":72,\"length\":4,\"target\":\"hash\",\"line\":3,\"character\":8},{\"type\":\"hover\",\"text\":\"const request: UserOperationRequest_v6 | UserOperationRequest_v7\",\"start\":78,\"length\":7,\"target\":\"request\",\"line\":3,\"character\":14},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":96,\"length\":6,\"target\":\"client\",\"line\":3,\"character\":32},{\"type\":\"hover\",\"text\":\"(property) sendUserOperation: (args: SendUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined, keyof EntryPointRegistryBase<...>>) => Promise<...>\",\"start\":103,\"length\":17,\"target\":\"sendUserOperation\",\"line\":3,\"character\":39},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":125,\"length\":2,\"target\":\"uo\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":135,\"length\":6,\"target\":\"target\",\"line\":5,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":167,\"length\":4,\"target\":\"data\",\"line\":6,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":183,\"length\":5,\"target\":\"value\",\"line\":7,\"character\":4},{\"type\":\"hover\",\"text\":\"const txHash: `0x${string}`\",\"start\":250,\"length\":6,\"target\":\"txHash\",\"line\":13,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":265,\"length\":6,\"target\":\"client\",\"line\":13,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) waitForUserOperationTransaction: (args: WaitForUserOperationTxParameters) => Promise<`0x${string}`>\",\"start\":272,\"length\":31,\"target\":\"waitForUserOperationTransaction\",\"line\":13,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) hash: `0x${string}`\",\"start\":306,\"length\":4,\"target\":\"hash\",\"line\":13,\"character\":64},{\"type\":\"hover\",\"text\":\"var e: unknown\",\"start\":324,\"length\":1,\"target\":\"e\",\"line\":14,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) hash: `0x${string}`\",\"start\":409,\"length\":4,\"target\":\"hash\",\"line\":16,\"character\":10},{\"type\":\"hover\",\"text\":\"const newHash: `0x${string}`\",\"start\":415,\"length\":7,\"target\":\"newHash\",\"line\":16,\"character\":16},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":433,\"length\":6,\"target\":\"client\",\"line\":16,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) dropAndReplaceUserOperation: (args: DropAndReplaceUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined>) => Promise<...>\",\"start\":440,\"length\":27,\"target\":\"dropAndReplaceUserOperation\",\"line\":16,\"character\":41},{\"type\":\"hover\",\"text\":\"(property) uoToDrop: UserOperationRequest_v6 | UserOperationRequest_v7\",\"start\":474,\"length\":8,\"target\":\"uoToDrop\",\"line\":17,\"character\":4},{\"type\":\"hover\",\"text\":\"const request: UserOperationRequest_v6 | UserOperationRequest_v7\",\"start\":484,\"length\":7,\"target\":\"request\",\"line\":17,\"character\":14},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":560,\"length\":6,\"target\":\"client\",\"line\":21,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) waitForUserOperationTransaction: (args: WaitForUserOperationTxParameters) => Promise<`0x${string}`>\",\"start\":567,\"length\":31,\"target\":\"waitForUserOperationTransaction\",\"line\":21,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) hash: `0x${string}`\",\"start\":601,\"length\":4,\"target\":\"hash\",\"line\":21,\"character\":49},{\"type\":\"hover\",\"text\":\"const newHash: `0x${string}`\",\"start\":607,\"length\":7,\"target\":\"newHash\",\"line\":21,\"character\":55}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,817]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"client.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/client.ts\",\"content\":\"// @filename: client.ts\\n\\nimport { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\n// You can replace this with any signer you'd like\\n// We're using a LocalAccountSigner to generate a local key to sign with\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\nexport const client = createAlchemySmartAccountClient({\\n apiKey: \\\"YOUR_API_KEY\\\",\\n policyId: \\\"YOUR_POLICY_ID\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/YOUR_API_KEY`),\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n }),\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":778,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { client } from \\\"./client\\\";\\n\\n// 1. send a user operation\\nconst { hash, request } = await client.sendUserOperation({\\n uo: {\\n target: \\\"0xTARGET_ADDRESS\\\",\\n data: \\\"0x\\\",\\n value: 0n,\\n },\\n});\\n\\ntry {\\n // 2. wait for it to be mined\\n const txHash = await client.waitForUserOperationTransaction({ hash });\\n} catch (e) {\\n // 3. if it fails, resubmit the user operation via drop and replace\\n const { hash: newHash } = await client.dropAndReplaceUserOperation({\\n uoToDrop: request,\\n });\\n\\n // 4. wait for the new user operation to be mined\\n await client.waitForUserOperationTransaction({ hash: newHash });\\n}\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":9,\"length\":6,\"target\":\"client\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const hash: `0x${string}`\",\"start\":72,\"length\":4,\"target\":\"hash\",\"line\":3,\"character\":8},{\"type\":\"hover\",\"text\":\"const request: UserOperationRequest_v6 | UserOperationRequest_v7\",\"start\":78,\"length\":7,\"target\":\"request\",\"line\":3,\"character\":14},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":96,\"length\":6,\"target\":\"client\",\"line\":3,\"character\":32},{\"type\":\"hover\",\"text\":\"(property) sendUserOperation: (args: SendUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined, keyof EntryPointRegistryBase<...>>) => Promise<...>\",\"start\":103,\"length\":17,\"target\":\"sendUserOperation\",\"line\":3,\"character\":39},{\"type\":\"hover\",\"text\":\"(property) uo: UserOperationCallData | BatchUserOperationCallData\",\"start\":125,\"length\":2,\"target\":\"uo\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) target: `0x${string}`\",\"start\":135,\"length\":6,\"target\":\"target\",\"line\":5,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) data: `0x${string}`\",\"start\":167,\"length\":4,\"target\":\"data\",\"line\":6,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) value?: bigint | undefined\",\"start\":183,\"length\":5,\"target\":\"value\",\"line\":7,\"character\":4},{\"type\":\"hover\",\"text\":\"const txHash: `0x${string}`\",\"start\":250,\"length\":6,\"target\":\"txHash\",\"line\":13,\"character\":8},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":265,\"length\":6,\"target\":\"client\",\"line\":13,\"character\":23},{\"type\":\"hover\",\"text\":\"(property) waitForUserOperationTransaction: (args: WaitForUserOperationTxParameters) => Promise<`0x${string}`>\",\"start\":272,\"length\":31,\"target\":\"waitForUserOperationTransaction\",\"line\":13,\"character\":30},{\"type\":\"hover\",\"text\":\"(property) hash: `0x${string}`\",\"start\":306,\"length\":4,\"target\":\"hash\",\"line\":13,\"character\":64},{\"type\":\"hover\",\"text\":\"var e: unknown\",\"start\":324,\"length\":1,\"target\":\"e\",\"line\":14,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) hash: `0x${string}`\",\"start\":409,\"length\":4,\"target\":\"hash\",\"line\":16,\"character\":10},{\"type\":\"hover\",\"text\":\"const newHash: `0x${string}`\",\"start\":415,\"length\":7,\"target\":\"newHash\",\"line\":16,\"character\":16},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":433,\"length\":6,\"target\":\"client\",\"line\":16,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) dropAndReplaceUserOperation: (args: DropAndReplaceUserOperationParameters, \\\"v2.0.0\\\">, UserOperationContext | undefined>) => Promise<...>\",\"start\":440,\"length\":27,\"target\":\"dropAndReplaceUserOperation\",\"line\":16,\"character\":41},{\"type\":\"hover\",\"text\":\"(property) uoToDrop: UserOperationRequest_v6 | UserOperationRequest_v7\",\"start\":474,\"length\":8,\"target\":\"uoToDrop\",\"line\":17,\"character\":4},{\"type\":\"hover\",\"text\":\"const request: UserOperationRequest_v6 | UserOperationRequest_v7\",\"start\":484,\"length\":7,\"target\":\"request\",\"line\":17,\"character\":14},{\"type\":\"hover\",\"text\":\"(alias) const client: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\\nimport client\",\"start\":560,\"length\":6,\"target\":\"client\",\"line\":21,\"character\":8},{\"type\":\"hover\",\"text\":\"(property) waitForUserOperationTransaction: (args: WaitForUserOperationTxParameters) => Promise<`0x${string}`>\",\"start\":567,\"length\":31,\"target\":\"waitForUserOperationTransaction\",\"line\":21,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) hash: `0x${string}`\",\"start\":601,\"length\":4,\"target\":\"hash\",\"line\":21,\"character\":49},{\"type\":\"hover\",\"text\":\"const newHash: `0x${string}`\",\"start\":607,\"length\":7,\"target\":\"newHash\",\"line\":21,\"character\":55}],\"tags\":[]}],[\"d6166f61f48e776eed1a37b5e24b1f490fed1e5781141a265bc4b0b008e812a2\",{\"code\":\"import { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) class AlchemyWebSigner\\nimport AlchemyWebSigner\",\"docs\":\"A SmartAccountSigner that can be used with any SmartContractAccount\",\"start\":9,\"length\":16,\"target\":\"AlchemyWebSigner\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const signer: AlchemyWebSigner\",\"start\":70,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) new AlchemyWebSigner(params: {\\n client: ({\\n connection: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n } | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n } | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n } | {\\n ...;\\n };\\n iframeConfig: {\\n ...;\\n };\\n rpId?: string | undefined;\\n rootOrgId?: string | undefined;\\n } | AlchemySignerWebClient) & (AlchemySignerWebClient | ... 1 more ... | undefined);\\n sessionConfig?: {\\n ...;\\n } | undefined;\\n}): AlchemyWebSigner\\nimport AlchemyWebSigner\",\"docs\":\"Initializes an instance with the provided Alchemy signer parameters after parsing them with a schema.\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n```\"],[\"param\",\"params The parameters for the Alchemy signer, including the client and session configuration\"]],\"start\":83,\"length\":16,\"target\":\"AlchemyWebSigner\",\"line\":2,\"character\":26},{\"type\":\"hover\",\"text\":\"(property) client: ({\\n connection: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n } | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n } | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n } | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n };\\n iframeConfig: {\\n ...;\\n };\\n rpId?: string | undefined;\\n rootOrgId?: string | undefined;\\n} | AlchemySignerWebClient) & (AlchemySignerWebClient | ... 1 more ... | undefined)\",\"start\":104,\"length\":6,\"target\":\"client\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) connection: {\\n apiKey: string;\\n}\",\"start\":118,\"length\":10,\"target\":\"connection\",\"line\":4,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":138,\"length\":6,\"target\":\"apiKey\",\"line\":5,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) iframeConfig: {\\n iframeContainerId: string;\\n}\",\"start\":168,\"length\":12,\"target\":\"iframeConfig\",\"line\":7,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) iframeContainerId: string\",\"start\":190,\"length\":17,\"target\":\"iframeContainerId\",\"line\":8,\"character\":6}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"import { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) class AlchemyWebSigner\\nimport AlchemyWebSigner\",\"docs\":\"A SmartAccountSigner that can be used with any SmartContractAccount\",\"start\":9,\"length\":16,\"target\":\"AlchemyWebSigner\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const signer: AlchemyWebSigner\",\"start\":70,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) new AlchemyWebSigner(params: {\\n client: ({\\n connection: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n } | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n } | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n } | {\\n ...;\\n };\\n iframeConfig: {\\n ...;\\n };\\n rpId?: string | undefined;\\n rootOrgId?: string | undefined;\\n } | AlchemySignerWebClient) & (AlchemySignerWebClient | ... 1 more ... | undefined);\\n sessionConfig?: {\\n ...;\\n } | undefined;\\n}): AlchemyWebSigner\\nimport AlchemyWebSigner\",\"docs\":\"Initializes an instance with the provided Alchemy signer parameters after parsing them with a schema.\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n```\"],[\"param\",\"params The parameters for the Alchemy signer, including the client and session configuration\"]],\"start\":83,\"length\":16,\"target\":\"AlchemyWebSigner\",\"line\":2,\"character\":26},{\"type\":\"hover\",\"text\":\"(property) client: ({\\n connection: {\\n apiKey: string;\\n rpcUrl?: undefined;\\n jwt?: undefined;\\n } | {\\n jwt: string;\\n rpcUrl?: undefined;\\n apiKey?: undefined;\\n } | {\\n rpcUrl: string;\\n apiKey?: undefined;\\n jwt?: undefined;\\n } | {\\n rpcUrl: string;\\n jwt: string;\\n apiKey?: undefined;\\n };\\n iframeConfig: {\\n ...;\\n };\\n rpId?: string | undefined;\\n rootOrgId?: string | undefined;\\n} | AlchemySignerWebClient) & (AlchemySignerWebClient | ... 1 more ... | undefined)\",\"start\":104,\"length\":6,\"target\":\"client\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) connection: {\\n apiKey: string;\\n}\",\"start\":118,\"length\":10,\"target\":\"connection\",\"line\":4,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":138,\"length\":6,\"target\":\"apiKey\",\"line\":5,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) iframeConfig: {\\n iframeContainerId: string;\\n}\",\"start\":168,\"length\":12,\"target\":\"iframeConfig\",\"line\":7,\"character\":4},{\"type\":\"hover\",\"text\":\"(property) iframeContainerId: string\",\"start\":190,\"length\":17,\"target\":\"iframeContainerId\",\"line\":8,\"character\":6}],\"tags\":[]}],[\"8945a3fc67fdb5f816ca98660fd5cc5a7d91683a2faa2023d6cfa947efeff958\",{\"code\":\"import { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"example@mail.com\\\",\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const result: User\",\"start\":42,\"length\":6,\"target\":\"result\",\"line\":2,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":57,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":64,\"length\":12,\"target\":\"authenticate\",\"line\":2,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":81,\"length\":4,\"target\":\"type\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":98,\"length\":5,\"target\":\"email\",\"line\":4,\"character\":2}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,609]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":285,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":570,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"example@mail.com\\\",\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const result: User\",\"start\":42,\"length\":6,\"target\":\"result\",\"line\":2,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":57,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":64,\"length\":12,\"target\":\"authenticate\",\"line\":2,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":81,\"length\":4,\"target\":\"type\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":98,\"length\":5,\"target\":\"email\",\"line\":4,\"character\":2}],\"tags\":[]}],[\"39a54543463376162884542fd2dce75c9f94d422f613a3a6ff8d7af959d4e3f4\",{\"code\":\"import { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { http } from \\\"viem\\\";\\nimport { signer } from \\\"./signer\\\";\\n\\nconst account = await createLightAccount({\\n signer,\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/API_KEY`),\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":9,\"length\":18,\"target\":\"createLightAccount\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":76,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":122,\"length\":4,\"target\":\"http\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":151,\"length\":6,\"target\":\"signer\",\"line\":3,\"character\":9},{\"type\":\"hover\",\"text\":\"const account: LightAccount\",\"start\":184,\"length\":7,\"target\":\"account\",\"line\":5,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount(config: CreateLightAccountParams): Promise<...>\\nimport createLightAccount\",\"start\":200,\"length\":18,\"target\":\"createLightAccount\",\"line\":5,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) signer: AlchemyWebSigner\",\"start\":223,\"length\":6,\"target\":\"signer\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":233,\"length\":5,\"target\":\"chain\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":240,\"length\":7,\"target\":\"sepolia\",\"line\":7,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":251,\"length\":9,\"target\":\"transport\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":262,\"length\":4,\"target\":\"http\",\"line\":8,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":270,\"length\":7,\"target\":\"sepolia\",\"line\":8,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":278,\"length\":7,\"target\":\"rpcUrls\",\"line\":8,\"character\":29},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":286,\"length\":7,\"target\":\"alchemy\",\"line\":8,\"character\":37},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":294,\"length\":4,\"target\":\"http\",\"line\":8,\"character\":45}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,609]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":285,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":570,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { sepolia } from \\\"@account-kit/infra\\\";\\nimport { http } from \\\"viem\\\";\\nimport { signer } from \\\"./signer\\\";\\n\\nconst account = await createLightAccount({\\n signer,\\n chain: sepolia,\\n transport: http(`${sepolia.rpcUrls.alchemy.http[0]}/API_KEY`),\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":9,\"length\":18,\"target\":\"createLightAccount\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":76,\"length\":7,\"target\":\"sepolia\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":122,\"length\":4,\"target\":\"http\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":151,\"length\":6,\"target\":\"signer\",\"line\":3,\"character\":9},{\"type\":\"hover\",\"text\":\"const account: LightAccount\",\"start\":184,\"length\":7,\"target\":\"account\",\"line\":5,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount(config: CreateLightAccountParams): Promise<...>\\nimport createLightAccount\",\"start\":200,\"length\":18,\"target\":\"createLightAccount\",\"line\":5,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) signer: AlchemyWebSigner\",\"start\":223,\"length\":6,\"target\":\"signer\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":233,\"length\":5,\"target\":\"chain\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":240,\"length\":7,\"target\":\"sepolia\",\"line\":7,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":251,\"length\":9,\"target\":\"transport\",\"line\":8,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":262,\"length\":4,\"target\":\"http\",\"line\":8,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":270,\"length\":7,\"target\":\"sepolia\",\"line\":8,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":278,\"length\":7,\"target\":\"rpcUrls\",\"line\":8,\"character\":29},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":286,\"length\":7,\"target\":\"alchemy\",\"line\":8,\"character\":37},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":294,\"length\":4,\"target\":\"http\",\"line\":8,\"character\":45}],\"tags\":[]}],[\"393e006214a8032530b58d213b1890f21de969bfbcd09399fe789c16d55c1b56\",{\"code\":\"import { signer } from \\\"./signer\\\";\\n\\n// send the email\\nawait signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"user@mail.com\\\",\\n});\\n\\n// later once the user has clicked the link\\nconst url = new URL(window.location.href);\\nconst bundle = url.searchParams.get(\\\"bundle\\\");\\nif (!bundle) {\\n throw new Error(\\\"No bundle found in URL\\\");\\n}\\n\\nawait signer.authenticate({\\n type: \\\"email\\\",\\n bundle,\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":60,\"length\":6,\"target\":\"signer\",\"line\":3,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":67,\"length\":12,\"target\":\"authenticate\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":84,\"length\":4,\"target\":\"type\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":101,\"length\":5,\"target\":\"email\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"const url: URL\",\"start\":180,\"length\":3,\"target\":\"url\",\"line\":9,\"character\":6},{\"type\":\"hover\",\"text\":\"var URL: new (url: string | URL, base?: string | URL | undefined) => URL\",\"docs\":\"The URL interface represents an object providing static methods used for creating object URLs.\\n\\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/URL)\",\"start\":190,\"length\":3,\"target\":\"URL\",\"line\":9,\"character\":16},{\"type\":\"hover\",\"text\":\"var window: Window & typeof globalThis\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/window)\",\"start\":194,\"length\":6,\"target\":\"window\",\"line\":9,\"character\":20},{\"type\":\"hover\",\"text\":\"(property) location: Location\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/location)\",\"start\":201,\"length\":8,\"target\":\"location\",\"line\":9,\"character\":27},{\"type\":\"hover\",\"text\":\"(property) Location.href: string\",\"docs\":\"Returns the Location object's URL.\\n\\nCan be set, to navigate to the given URL.\\n\\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Location/href)\",\"start\":210,\"length\":4,\"target\":\"href\",\"line\":9,\"character\":36},{\"type\":\"hover\",\"text\":\"const bundle: string | null\",\"start\":223,\"length\":6,\"target\":\"bundle\",\"line\":10,\"character\":6},{\"type\":\"hover\",\"text\":\"const url: URL\",\"start\":232,\"length\":3,\"target\":\"url\",\"line\":10,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) URL.searchParams: URLSearchParams\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/searchParams)\",\"start\":236,\"length\":12,\"target\":\"searchParams\",\"line\":10,\"character\":19},{\"type\":\"hover\",\"text\":\"(method) URLSearchParams.get(name: string): string | null\",\"docs\":\"Returns the first value associated to the given search parameter.\\n\\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/get)\",\"start\":249,\"length\":3,\"target\":\"get\",\"line\":10,\"character\":32},{\"type\":\"hover\",\"text\":\"const bundle: string | null\",\"start\":269,\"length\":6,\"target\":\"bundle\",\"line\":11,\"character\":5},{\"type\":\"hover\",\"text\":\"var Error: ErrorConstructor\\nnew (message?: string | undefined, options?: ErrorOptions | undefined) => Error (+1 overload)\",\"start\":291,\"length\":5,\"target\":\"Error\",\"line\":12,\"character\":12},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":333,\"length\":6,\"target\":\"signer\",\"line\":15,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":340,\"length\":12,\"target\":\"authenticate\",\"line\":15,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":357,\"length\":4,\"target\":\"type\",\"line\":16,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) bundle: string\",\"start\":374,\"length\":6,\"target\":\"bundle\",\"line\":17,\"character\":2}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,324]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":285,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { signer } from \\\"./signer\\\";\\n\\n// send the email\\nawait signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"user@mail.com\\\",\\n});\\n\\n// later once the user has clicked the link\\nconst url = new URL(window.location.href);\\nconst bundle = url.searchParams.get(\\\"bundle\\\");\\nif (!bundle) {\\n throw new Error(\\\"No bundle found in URL\\\");\\n}\\n\\nawait signer.authenticate({\\n type: \\\"email\\\",\\n bundle,\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":60,\"length\":6,\"target\":\"signer\",\"line\":3,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":67,\"length\":12,\"target\":\"authenticate\",\"line\":3,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":84,\"length\":4,\"target\":\"type\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":101,\"length\":5,\"target\":\"email\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"const url: URL\",\"start\":180,\"length\":3,\"target\":\"url\",\"line\":9,\"character\":6},{\"type\":\"hover\",\"text\":\"var URL: new (url: string | URL, base?: string | URL | undefined) => URL\",\"docs\":\"The URL interface represents an object providing static methods used for creating object URLs.\\n\\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/URL)\",\"start\":190,\"length\":3,\"target\":\"URL\",\"line\":9,\"character\":16},{\"type\":\"hover\",\"text\":\"var window: Window & typeof globalThis\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/window)\",\"start\":194,\"length\":6,\"target\":\"window\",\"line\":9,\"character\":20},{\"type\":\"hover\",\"text\":\"(property) location: Location\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/location)\",\"start\":201,\"length\":8,\"target\":\"location\",\"line\":9,\"character\":27},{\"type\":\"hover\",\"text\":\"(property) Location.href: string\",\"docs\":\"Returns the Location object's URL.\\n\\nCan be set, to navigate to the given URL.\\n\\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Location/href)\",\"start\":210,\"length\":4,\"target\":\"href\",\"line\":9,\"character\":36},{\"type\":\"hover\",\"text\":\"const bundle: string | null\",\"start\":223,\"length\":6,\"target\":\"bundle\",\"line\":10,\"character\":6},{\"type\":\"hover\",\"text\":\"const url: URL\",\"start\":232,\"length\":3,\"target\":\"url\",\"line\":10,\"character\":15},{\"type\":\"hover\",\"text\":\"(property) URL.searchParams: URLSearchParams\",\"docs\":\"[MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/searchParams)\",\"start\":236,\"length\":12,\"target\":\"searchParams\",\"line\":10,\"character\":19},{\"type\":\"hover\",\"text\":\"(method) URLSearchParams.get(name: string): string | null\",\"docs\":\"Returns the first value associated to the given search parameter.\\n\\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/get)\",\"start\":249,\"length\":3,\"target\":\"get\",\"line\":10,\"character\":32},{\"type\":\"hover\",\"text\":\"const bundle: string | null\",\"start\":269,\"length\":6,\"target\":\"bundle\",\"line\":11,\"character\":5},{\"type\":\"hover\",\"text\":\"var Error: ErrorConstructor\\nnew (message?: string | undefined, options?: ErrorOptions | undefined) => Error (+1 overload)\",\"start\":291,\"length\":5,\"target\":\"Error\",\"line\":12,\"character\":12},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":333,\"length\":6,\"target\":\"signer\",\"line\":15,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":340,\"length\":12,\"target\":\"authenticate\",\"line\":15,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) type: \\\"email\\\"\",\"start\":357,\"length\":4,\"target\":\"type\",\"line\":16,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) bundle: string\",\"start\":374,\"length\":6,\"target\":\"bundle\",\"line\":17,\"character\":2}],\"tags\":[]}],[\"2f53881be885694db51dd7f71acd152cd1eaa757691d2b1a2fc5647e67bf8448\",{\"code\":\"import { signer } from \\\"./signer\\\";\\n\\n// NOTE: this assumes you have already authenticated the user\\n// you can further customize the Credential Creation Options here\\nawait signer.addPasskey({});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":170,\"length\":6,\"target\":\"signer\",\"line\":4,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.addPasskey: (params?: CredentialCreationOptions | undefined) => Promise\",\"docs\":\"Adds a passkey to the user's account\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.addPasskey()\\n```\"],[\"param\",\"params optional parameters for the passkey creation\"],[\"returns\",\"an array of the authenticator ids added to the user\"]],\"start\":177,\"length\":10,\"target\":\"addPasskey\",\"line\":4,\"character\":13}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,324]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":285,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { signer } from \\\"./signer\\\";\\n\\n// NOTE: this assumes you have already authenticated the user\\n// you can further customize the Credential Creation Options here\\nawait signer.addPasskey({});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":170,\"length\":6,\"target\":\"signer\",\"line\":4,\"character\":6},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.addPasskey: (params?: CredentialCreationOptions | undefined) => Promise\",\"docs\":\"Adds a passkey to the user's account\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.addPasskey()\\n```\"],[\"param\",\"params optional parameters for the passkey creation\"],[\"returns\",\"an array of the authenticator ids added to the user\"]],\"start\":177,\"length\":10,\"target\":\"addPasskey\",\"line\":4,\"character\":13}],\"tags\":[]}],[\"8c9c8b861c967ea87cd63f34ce68b4359af9253540f416800457a75a484c6d67\",{\"code\":\"import { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n email: \\\"user@mail.com\\\",\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const result: User\",\"start\":42,\"length\":6,\"target\":\"result\",\"line\":2,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":57,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":64,\"length\":12,\"target\":\"authenticate\",\"line\":2,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":81,\"length\":4,\"target\":\"type\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":100,\"length\":5,\"target\":\"email\",\"line\":4,\"character\":2}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,609]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":285,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":570,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n email: \\\"user@mail.com\\\",\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const result: User\",\"start\":42,\"length\":6,\"target\":\"result\",\"line\":2,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":57,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":64,\"length\":12,\"target\":\"authenticate\",\"line\":2,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":81,\"length\":4,\"target\":\"type\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) email: string\",\"start\":100,\"length\":5,\"target\":\"email\",\"line\":4,\"character\":2}],\"tags\":[]}],[\"7a8a618997e2205b020a7f0f83ffb75d2c13f0197afd965fa685d69f4022aca5\",{\"code\":\"import { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n createNew: false,\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const result: User\",\"start\":42,\"length\":6,\"target\":\"result\",\"line\":2,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":57,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":64,\"length\":12,\"target\":\"authenticate\",\"line\":2,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":81,\"length\":4,\"target\":\"type\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) createNew: false\",\"start\":100,\"length\":9,\"target\":\"createNew\",\"line\":4,\"character\":2}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,609]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":285,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":570,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n createNew: false,\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const result: User\",\"start\":42,\"length\":6,\"target\":\"result\",\"line\":2,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":57,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":64,\"length\":12,\"target\":\"authenticate\",\"line\":2,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":81,\"length\":4,\"target\":\"type\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) createNew: false\",\"start\":100,\"length\":9,\"target\":\"createNew\",\"line\":4,\"character\":2}],\"tags\":[]}],[\"4627d0538e5b486bfe6844f24793152b5153149c8ff89bc94f73f917bd46a79b\",{\"code\":\"import { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n createNew: true,\\n username: \\\"SOME_USER_NAME_OR_PASSKEY_IDENTIFIER\\\",\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const result: User\",\"start\":42,\"length\":6,\"target\":\"result\",\"line\":2,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":57,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":64,\"length\":12,\"target\":\"authenticate\",\"line\":2,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":81,\"length\":4,\"target\":\"type\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) createNew: true\",\"start\":100,\"length\":9,\"target\":\"createNew\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) username: string\",\"start\":119,\"length\":8,\"target\":\"username\",\"line\":5,\"character\":2}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,609]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":285,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":570,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { signer } from \\\"./signer\\\";\\n\\nconst result = await signer.authenticate({\\n type: \\\"passkey\\\",\\n createNew: true,\\n username: \\\"SOME_USER_NAME_OR_PASSKEY_IDENTIFIER\\\",\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"const result: User\",\"start\":42,\"length\":6,\"target\":\"result\",\"line\":2,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":57,\"length\":6,\"target\":\"signer\",\"line\":2,\"character\":21},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.authenticate: (params: AuthParams) => Promise\",\"docs\":\"Authenticate a user with either an email or a passkey and create a session for that user\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst result = await signer.authenticate({\\n type: \\\"email\\\",\\n email: \\\"foo@mail.com\\\",\\n});\\n```\"],[\"param\",\"params - undefined if passkey login, otherwise an object with email and bundle to resolve\"],[\"returns\",\"the user that was authenticated\"]],\"start\":64,\"length\":12,\"target\":\"authenticate\",\"line\":2,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) type: \\\"passkey\\\"\",\"start\":81,\"length\":4,\"target\":\"type\",\"line\":3,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) createNew: true\",\"start\":100,\"length\":9,\"target\":\"createNew\",\"line\":4,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) username: string\",\"start\":119,\"length\":8,\"target\":\"username\",\"line\":5,\"character\":2}],\"tags\":[]}],[\"77ba9493b8fdb7b82611f8685536d4d2ab7ac33eb138ba3724c20853b45cbb04\",{\"code\":\"import { signer } from \\\"./signer\\\";\\nimport { createWalletClient, http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nexport const walletClient = createWalletClient({\\n transport: http(\\\"alchemy_rpc_url\\\"),\\n chain: sepolia,\\n account: signer.toViemAccount(),\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function createWalletClient(parameters: WalletClientConfig): WalletClient>\\nimport createWalletClient\",\"docs\":\"Creates a Wallet Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/wallet\\n\\nA Wallet Client is an interface to interact with [Ethereum Account(s)](https://ethereum.org/en/glossary/#account) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction).\\n\\nThe Wallet Client supports signing over:\\n- [JSON-RPC Accounts](https://viem.sh/docs/clients/wallet#json-rpc-accounts) (e.g. Browser Extension Wallets, WalletConnect, etc).\\n- [Local Accounts](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc) (e.g. private key/mnemonic wallets).\",\"tags\":[[\"param\",\"config - {@link WalletClientConfig}\"],[\"returns\",\"A Wallet Client. {@link WalletClient}\"],[\"example\",\"// JSON-RPC Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum),\\n})\"],[\"example\",\"// Local Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { privateKeyToAccount } from 'viem/accounts'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n account: privateKeyToAccount('0x…')\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":44,\"length\":18,\"target\":\"createWalletClient\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":64,\"length\":4,\"target\":\"http\",\"line\":1,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":93,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const walletClient: {\\n account: LocalAccount;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n chain: {\\n ...;\\n };\\n ... 23 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":137,\"length\":12,\"target\":\"walletClient\",\"line\":4,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createWalletClient | undefined;\\n}, LocalAccount>(parameters: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createWalletClient\",\"docs\":\"Creates a Wallet Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/wallet\\n\\nA Wallet Client is an interface to interact with [Ethereum Account(s)](https://ethereum.org/en/glossary/#account) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction).\\n\\nThe Wallet Client supports signing over:\\n- [JSON-RPC Accounts](https://viem.sh/docs/clients/wallet#json-rpc-accounts) (e.g. Browser Extension Wallets, WalletConnect, etc).\\n- [Local Accounts](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc) (e.g. private key/mnemonic wallets).\",\"tags\":[[\"param\",\"config - {@link WalletClientConfig}\"],[\"returns\",\"A Wallet Client. {@link WalletClient}\"],[\"example\",\"// JSON-RPC Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum),\\n})\"],[\"example\",\"// Local Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { privateKeyToAccount } from 'viem/accounts'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n account: privateKeyToAccount('0x…')\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":152,\"length\":18,\"target\":\"createWalletClient\",\"line\":4,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"docs\":\"The RPC transport\",\"start\":175,\"length\":9,\"target\":\"transport\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":186,\"length\":4,\"target\":\"http\",\"line\":5,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n} | undefined\",\"docs\":\"Chain for the client.\",\"start\":213,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":220,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: `0x${string}` | Account | LocalAccount | undefined\",\"docs\":\"The Account to use for the Client. This will be used for Actions that require an account as an argument.\",\"start\":231,\"length\":7,\"target\":\"account\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":240,\"length\":6,\"target\":\"signer\",\"line\":7,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.toViemAccount: () => LocalAccount\",\"docs\":\"This method lets you adapt your AlchemySigner to a viem LocalAccount, which\\nwill let you use the signer as an EOA directly.\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst account = signer.toViemAccount();\\n```\"],[\"throws\",\"if your signer is not authenticated\"],[\"returns\",\"a LocalAccount object that can be used with viem's wallet client\"]],\"start\":247,\"length\":13,\"target\":\"toViemAccount\",\"line\":7,\"character\":18}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[[0,324]],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"signer.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/signer.ts\",\"content\":\"// @filename: signer.ts\\n\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nexport const signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n apiKey: \\\"API_KEY\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\",\"extension\":\"ts\",\"supportLsp\":true},{\"offset\":285,\"filename\":\"example.js\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/example.js\",\"content\":\"// @filename: example.js\\n\\n// ---cut---\\nimport { signer } from \\\"./signer\\\";\\nimport { createWalletClient, http } from \\\"viem\\\";\\nimport { sepolia } from \\\"viem/chains\\\";\\n\\nexport const walletClient = createWalletClient({\\n transport: http(\\\"alchemy_rpc_url\\\"),\\n chain: sepolia,\\n account: signer.toViemAccount(),\\n});\",\"extension\":\"js\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":9,\"length\":6,\"target\":\"signer\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function createWalletClient(parameters: WalletClientConfig): WalletClient>\\nimport createWalletClient\",\"docs\":\"Creates a Wallet Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/wallet\\n\\nA Wallet Client is an interface to interact with [Ethereum Account(s)](https://ethereum.org/en/glossary/#account) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction).\\n\\nThe Wallet Client supports signing over:\\n- [JSON-RPC Accounts](https://viem.sh/docs/clients/wallet#json-rpc-accounts) (e.g. Browser Extension Wallets, WalletConnect, etc).\\n- [Local Accounts](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc) (e.g. private key/mnemonic wallets).\",\"tags\":[[\"param\",\"config - {@link WalletClientConfig}\"],[\"returns\",\"A Wallet Client. {@link WalletClient}\"],[\"example\",\"// JSON-RPC Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum),\\n})\"],[\"example\",\"// Local Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { privateKeyToAccount } from 'viem/accounts'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n account: privateKeyToAccount('0x…')\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":44,\"length\":18,\"target\":\"createWalletClient\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":64,\"length\":4,\"target\":\"http\",\"line\":1,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":93,\"length\":7,\"target\":\"sepolia\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"const walletClient: {\\n account: LocalAccount;\\n batch?: {\\n multicall?: boolean | {\\n batchSize?: number | undefined;\\n wait?: number | undefined;\\n } | undefined;\\n } | undefined;\\n cacheTime: number;\\n chain: {\\n ...;\\n };\\n ... 23 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":137,\"length\":12,\"target\":\"walletClient\",\"line\":4,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) createWalletClient | undefined;\\n}, LocalAccount>(parameters: {\\n ...;\\n}): {\\n ...;\\n}\\nimport createWalletClient\",\"docs\":\"Creates a Wallet Client with a given [Transport](https://viem.sh/docs/clients/intro) configured for a [Chain](https://viem.sh/docs/clients/chains).\\n\\n- Docs: https://viem.sh/docs/clients/wallet\\n\\nA Wallet Client is an interface to interact with [Ethereum Account(s)](https://ethereum.org/en/glossary/#account) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction).\\n\\nThe Wallet Client supports signing over:\\n- [JSON-RPC Accounts](https://viem.sh/docs/clients/wallet#json-rpc-accounts) (e.g. Browser Extension Wallets, WalletConnect, etc).\\n- [Local Accounts](https://viem.sh/docs/clients/wallet#local-accounts-private-key-mnemonic-etc) (e.g. private key/mnemonic wallets).\",\"tags\":[[\"param\",\"config - {@link WalletClientConfig}\"],[\"returns\",\"A Wallet Client. {@link WalletClient}\"],[\"example\",\"// JSON-RPC Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n chain: mainnet,\\n transport: custom(window.ethereum),\\n})\"],[\"example\",\"// Local Account\\nimport { createWalletClient, custom } from 'viem'\\nimport { privateKeyToAccount } from 'viem/accounts'\\nimport { mainnet } from 'viem/chains'\\n\\nconst client = createWalletClient({\\n account: privateKeyToAccount('0x…')\\n chain: mainnet,\\n transport: http(),\\n})\"]],\"start\":152,\"length\":18,\"target\":\"createWalletClient\",\"line\":4,\"character\":28},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"docs\":\"The RPC transport\",\"start\":175,\"length\":9,\"target\":\"transport\",\"line\":5,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":186,\"length\":4,\"target\":\"http\",\"line\":5,\"character\":13},{\"type\":\"hover\",\"text\":\"(property) chain?: Chain | {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n ... 10 more ...;\\n fees?: ChainFees<...> | undefined;\\n} | undefined\",\"docs\":\"Chain for the client.\",\"start\":213,\"length\":5,\"target\":\"chain\",\"line\":6,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: {\\n blockExplorers: {\\n readonly default: {\\n readonly name: \\\"Etherscan\\\";\\n readonly url: \\\"https://sepolia.etherscan.io\\\";\\n readonly apiUrl: \\\"https://api-sepolia.etherscan.io/api\\\";\\n };\\n };\\n contracts: {\\n readonly multicall3: {\\n readonly address: \\\"0xca11bde05977b3631167028862be2a173976ca11\\\";\\n readonly blockCreated: 751532;\\n };\\n readonly ensRegistry: {\\n readonly address: \\\"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\\\";\\n };\\n readonly ensUniversalResolver: {\\n readonly address: \\\"0xc8Af999e38273D658BE1b921b88A9Ddf005769cC\\\";\\n readonly blockCreated: 5317080;\\n };\\n };\\n id: 11155111;\\n name: \\\"Sepolia\\\";\\n nativeCurrency: {\\n readonly name: \\\"Sepolia Ether\\\";\\n readonly symbol: \\\"SEP\\\";\\n readonly decimals: 18;\\n };\\n rpcUrls: {\\n readonly default: {\\n readonly http: readonly [\\\"https://rpc.sepolia.org\\\"];\\n };\\n };\\n sourceId?: number | undefined;\\n testnet: true;\\n custom?: Record | undefined;\\n formatters?: undefined;\\n serializers?: import(\\\"../../index.js\\\").ChainSerializers | undefined;\\n fees?: import(\\\"../../index.js\\\").ChainFees | undefined;\\n}\\nimport sepolia\",\"start\":220,\"length\":7,\"target\":\"sepolia\",\"line\":6,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: `0x${string}` | Account | LocalAccount | undefined\",\"docs\":\"The Account to use for the Client. This will be used for Actions that require an account as an argument.\",\"start\":231,\"length\":7,\"target\":\"account\",\"line\":7,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const signer: AlchemyWebSigner\\nimport signer\",\"start\":240,\"length\":6,\"target\":\"signer\",\"line\":7,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) BaseAlchemySigner.toViemAccount: () => LocalAccount\",\"docs\":\"This method lets you adapt your AlchemySigner to a viem LocalAccount, which\\nwill let you use the signer as an EOA directly.\",\"tags\":[[\"example\",\"```ts\\nimport { AlchemyWebSigner } from \\\"@account-kit/signer\\\";\\n\\nconst signer = new AlchemyWebSigner({\\n client: {\\n connection: {\\n rpcUrl: \\\"/api/rpc\\\",\\n },\\n iframeConfig: {\\n iframeContainerId: \\\"alchemy-signer-iframe-container\\\",\\n },\\n },\\n});\\n\\nconst account = signer.toViemAccount();\\n```\"],[\"throws\",\"if your signer is not authenticated\"],[\"returns\",\"a LocalAccount object that can be used with viem's wallet client\"]],\"start\":247,\"length\":13,\"target\":\"toViemAccount\",\"line\":7,\"character\":18}],\"tags\":[]}],[\"5525a2c08c69f6d1cc1490d5f5f09349a598950a98c1696bba4c0832df8fd5d0\",{\"code\":\"import { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\n// with account hoisting\\n\\nconst hoistedClient = createAlchemySmartAccountClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n }),\\n});\\n\\nconst signature = await hoistedClient.signMessage({ message: \\\"Hello world! \\\" });\\n\\n// without account hoisting\\nconst nonHoistedClient = createAlchemySmartAccountClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst lightAccount = await createLightAccount({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n});\\n\\nconst signature2 = await nonHoistedClient.signMessage({\\n message: \\\"Hello world! \\\",\\n account: lightAccount,\\n});\",\"nodes\":[{\"type\":\"hover\",\"text\":\"(alias) function createAlchemySmartAccountClient({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig): AlchemySmartAccountClient, TContext>\\nimport createAlchemySmartAccountClient\",\"start\":9,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":42,\"length\":7,\"target\":\"sepolia\",\"line\":0,\"character\":42},{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":88,\"length\":18,\"target\":\"createLightAccount\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":155,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":206,\"length\":4,\"target\":\"http\",\"line\":3,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function generatePrivateKey(): Hex\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":235,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"const hoistedClient: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":311,\"length\":13,\"target\":\"hoistedClient\",\"line\":8,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createAlchemySmartAccountClient, \\\"v2.0.0\\\">, UserOperationContext | undefined>({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig<...>): {\\n ...;\\n}\\nimport createAlchemySmartAccountClient\",\"start\":327,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":8,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":363,\"length\":6,\"target\":\"apiKey\",\"line\":9,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":389,\"length\":5,\"target\":\"chain\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":396,\"length\":7,\"target\":\"sepolia\",\"line\":10,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: LightAccount, \\\"v2.0.0\\\"> | undefined\",\"start\":407,\"length\":7,\"target\":\"account\",\"line\":11,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":422,\"length\":18,\"target\":\"createLightAccount\",\"line\":11,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":447,\"length\":6,\"target\":\"signer\",\"line\":12,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":455,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":12,\"character\":12},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":474,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":12,\"character\":31},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":500,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":12,\"character\":57},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":527,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":534,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":547,\"length\":9,\"target\":\"transport\",\"line\":14,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":558,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":563,\"length\":7,\"target\":\"sepolia\",\"line\":14,\"character\":20},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":571,\"length\":7,\"target\":\"rpcUrls\",\"line\":14,\"character\":28},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":579,\"length\":7,\"target\":\"alchemy\",\"line\":14,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":587,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":44},{\"type\":\"hover\",\"text\":\"const signature: `0x${string}`\",\"start\":614,\"length\":9,\"target\":\"signature\",\"line\":18,\"character\":6},{\"type\":\"hover\",\"text\":\"const hoistedClient: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":632,\"length\":13,\"target\":\"hoistedClient\",\"line\":18,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) signMessage: (args: SignMessageParameters, \\\"v2.0.0\\\">>) => Promise<...>\",\"start\":646,\"length\":11,\"target\":\"signMessage\",\"line\":18,\"character\":38},{\"type\":\"hover\",\"text\":\"(property) message: SignableMessage\",\"start\":660,\"length\":7,\"target\":\"message\",\"line\":18,\"character\":52},{\"type\":\"hover\",\"text\":\"const nonHoistedClient: {\\n [x: string]: never;\\n account: SmartContractAccount | undefined;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":724,\"length\":16,\"target\":\"nonHoistedClient\",\"line\":21,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createAlchemySmartAccountClient({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig): {\\n ...;\\n}\\nimport createAlchemySmartAccountClient\",\"start\":743,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":21,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":779,\"length\":6,\"target\":\"apiKey\",\"line\":22,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":805,\"length\":5,\"target\":\"chain\",\"line\":23,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":812,\"length\":7,\"target\":\"sepolia\",\"line\":23,\"character\":9},{\"type\":\"hover\",\"text\":\"const lightAccount: LightAccount, \\\"v2.0.0\\\">\",\"start\":832,\"length\":12,\"target\":\"lightAccount\",\"line\":26,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":853,\"length\":18,\"target\":\"createLightAccount\",\"line\":26,\"character\":27},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":876,\"length\":6,\"target\":\"signer\",\"line\":27,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":884,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":27,\"character\":10},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":903,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":27,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":929,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":27,\"character\":55},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":954,\"length\":5,\"target\":\"chain\",\"line\":28,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":961,\"length\":7,\"target\":\"sepolia\",\"line\":28,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":972,\"length\":9,\"target\":\"transport\",\"line\":29,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":983,\"length\":4,\"target\":\"http\",\"line\":29,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":988,\"length\":7,\"target\":\"sepolia\",\"line\":29,\"character\":18},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":996,\"length\":7,\"target\":\"rpcUrls\",\"line\":29,\"character\":26},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":1004,\"length\":7,\"target\":\"alchemy\",\"line\":29,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":1012,\"length\":4,\"target\":\"http\",\"line\":29,\"character\":42},{\"type\":\"hover\",\"text\":\"const signature2: `0x${string}`\",\"start\":1033,\"length\":10,\"target\":\"signature2\",\"line\":32,\"character\":6},{\"type\":\"hover\",\"text\":\"const nonHoistedClient: {\\n [x: string]: never;\\n account: SmartContractAccount | undefined;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":1052,\"length\":16,\"target\":\"nonHoistedClient\",\"line\":32,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) signMessage: (args: SignMessageParameters) => Promise<`0x${string}`>\",\"start\":1069,\"length\":11,\"target\":\"signMessage\",\"line\":32,\"character\":42},{\"type\":\"hover\",\"text\":\"(property) message: SignableMessage\",\"start\":1085,\"length\":7,\"target\":\"message\",\"line\":33,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) account: SmartContractAccount>\",\"start\":1113,\"length\":7,\"target\":\"account\",\"line\":34,\"character\":2},{\"type\":\"hover\",\"text\":\"const lightAccount: LightAccount, \\\"v2.0.0\\\">\",\"start\":1122,\"length\":12,\"target\":\"lightAccount\",\"line\":34,\"character\":11}],\"meta\":{\"extension\":\"ts\",\"compilerOptions\":{\"strict\":true,\"module\":99,\"target\":99,\"allowJs\":true,\"skipDefaultLibCheck\":true,\"skipLibCheck\":true,\"moduleDetection\":3,\"baseUrl\":\"/Users/moldy/alchemy/aa-sdk/site/\"},\"handbookOptions\":{\"errors\":[],\"noErrors\":false,\"noErrorsCutted\":false,\"noErrorValidation\":false,\"noStaticSemanticInfo\":false,\"showEmit\":false,\"keepNotations\":false},\"removals\":[],\"flagNotations\":[],\"virtualFiles\":[{\"offset\":0,\"filename\":\"index.ts\",\"filepath\":\"/Users/moldy/alchemy/aa-sdk/site/index.ts\",\"content\":\"import { createAlchemySmartAccountClient, sepolia } from \\\"@account-kit/infra\\\";\\nimport { createLightAccount } from \\\"@account-kit/smart-contracts\\\";\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { http } from \\\"viem\\\";\\nimport { generatePrivateKey } from \\\"viem/accounts\\\";\\n\\n// with account hoisting\\n\\nconst hoistedClient = createAlchemySmartAccountClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n account: await createLightAccount({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n }),\\n});\\n\\nconst signature = await hoistedClient.signMessage({ message: \\\"Hello world! \\\" });\\n\\n// without account hoisting\\nconst nonHoistedClient = createAlchemySmartAccountClient({\\n apiKey: \\\"your-api-key\\\",\\n chain: sepolia,\\n});\\n\\nconst lightAccount = await createLightAccount({\\n signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()),\\n chain: sepolia,\\n transport: http(sepolia.rpcUrls.alchemy.http[0]),\\n});\\n\\nconst signature2 = await nonHoistedClient.signMessage({\\n message: \\\"Hello world! \\\",\\n account: lightAccount,\\n});\",\"extension\":\"ts\",\"supportLsp\":true}],\"positionQueries\":[],\"positionCompletions\":[],\"positionHighlights\":[]},\"queries\":[],\"completions\":[],\"errors\":[],\"highlights\":[],\"hovers\":[{\"type\":\"hover\",\"text\":\"(alias) function createAlchemySmartAccountClient({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig): AlchemySmartAccountClient, TContext>\\nimport createAlchemySmartAccountClient\",\"start\":9,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":0,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":42,\"length\":7,\"target\":\"sepolia\",\"line\":0,\"character\":42},{\"type\":\"hover\",\"text\":\"(alias) function createLightAccount = SmartAccountSigner, TLightAccountVersion extends \\\"v1.0.1\\\" | \\\"v1.0.2\\\" | \\\"v1.1.0\\\" | \\\"v2.0.0\\\" = \\\"v2.0.0\\\">(config: CreateLightAccountParams): Promise>\\nimport createLightAccount\",\"start\":88,\"length\":18,\"target\":\"createLightAccount\",\"line\":1,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":155,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":2,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function http(url?: string, config?: HttpTransportConfig): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":206,\"length\":4,\"target\":\"http\",\"line\":3,\"character\":9},{\"type\":\"hover\",\"text\":\"(alias) function generatePrivateKey(): Hex\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":235,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":4,\"character\":9},{\"type\":\"hover\",\"text\":\"const hoistedClient: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":311,\"length\":13,\"target\":\"hoistedClient\",\"line\":8,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createAlchemySmartAccountClient, \\\"v2.0.0\\\">, UserOperationContext | undefined>({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig<...>): {\\n ...;\\n}\\nimport createAlchemySmartAccountClient\",\"start\":327,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":8,\"character\":22},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":363,\"length\":6,\"target\":\"apiKey\",\"line\":9,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":389,\"length\":5,\"target\":\"chain\",\"line\":10,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":396,\"length\":7,\"target\":\"sepolia\",\"line\":10,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) account?: LightAccount, \\\"v2.0.0\\\"> | undefined\",\"start\":407,\"length\":7,\"target\":\"account\",\"line\":11,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":422,\"length\":18,\"target\":\"createLightAccount\",\"line\":11,\"character\":17},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":447,\"length\":6,\"target\":\"signer\",\"line\":12,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":455,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":12,\"character\":12},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":474,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":12,\"character\":31},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":500,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":12,\"character\":57},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":527,\"length\":5,\"target\":\"chain\",\"line\":13,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":534,\"length\":7,\"target\":\"sepolia\",\"line\":13,\"character\":11},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":547,\"length\":9,\"target\":\"transport\",\"line\":14,\"character\":4},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":558,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":15},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":563,\"length\":7,\"target\":\"sepolia\",\"line\":14,\"character\":20},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":571,\"length\":7,\"target\":\"rpcUrls\",\"line\":14,\"character\":28},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":579,\"length\":7,\"target\":\"alchemy\",\"line\":14,\"character\":36},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":587,\"length\":4,\"target\":\"http\",\"line\":14,\"character\":44},{\"type\":\"hover\",\"text\":\"const signature: `0x${string}`\",\"start\":614,\"length\":9,\"target\":\"signature\",\"line\":18,\"character\":6},{\"type\":\"hover\",\"text\":\"const hoistedClient: {\\n [x: string]: never;\\n account: LightAccount, \\\"v2.0.0\\\">;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":632,\"length\":13,\"target\":\"hoistedClient\",\"line\":18,\"character\":24},{\"type\":\"hover\",\"text\":\"(property) signMessage: (args: SignMessageParameters, \\\"v2.0.0\\\">>) => Promise<...>\",\"start\":646,\"length\":11,\"target\":\"signMessage\",\"line\":18,\"character\":38},{\"type\":\"hover\",\"text\":\"(property) message: SignableMessage\",\"start\":660,\"length\":7,\"target\":\"message\",\"line\":18,\"character\":52},{\"type\":\"hover\",\"text\":\"const nonHoistedClient: {\\n [x: string]: never;\\n account: SmartContractAccount | undefined;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":724,\"length\":16,\"target\":\"nonHoistedClient\",\"line\":21,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createAlchemySmartAccountClient({ account, policyId, useSimulation, feeEstimator, customMiddleware, gasEstimator, signUserOperation, ...config_ }: AlchemySmartAccountClientConfig): {\\n ...;\\n}\\nimport createAlchemySmartAccountClient\",\"start\":743,\"length\":31,\"target\":\"createAlchemySmartAccountClient\",\"line\":21,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) apiKey: string\",\"start\":779,\"length\":6,\"target\":\"apiKey\",\"line\":22,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":805,\"length\":5,\"target\":\"chain\",\"line\":23,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":812,\"length\":7,\"target\":\"sepolia\",\"line\":23,\"character\":9},{\"type\":\"hover\",\"text\":\"const lightAccount: LightAccount, \\\"v2.0.0\\\">\",\"start\":832,\"length\":12,\"target\":\"lightAccount\",\"line\":26,\"character\":6},{\"type\":\"hover\",\"text\":\"(alias) createLightAccount, \\\"v2.0.0\\\">(config: CreateLightAccountParams, \\\"v2.0.0\\\">): Promise<...>\\nimport createLightAccount\",\"start\":853,\"length\":18,\"target\":\"createLightAccount\",\"line\":26,\"character\":27},{\"type\":\"hover\",\"text\":\"(property) signer: LocalAccountSigner\",\"start\":876,\"length\":6,\"target\":\"signer\",\"line\":27,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) class LocalAccountSigner\\nimport LocalAccountSigner\",\"docs\":\"Represents a local account signer and provides methods to sign messages and transactions, as well as static methods to create the signer from mnemonic or private key.\",\"start\":884,\"length\":18,\"target\":\"LocalAccountSigner\",\"line\":27,\"character\":10},{\"type\":\"hover\",\"text\":\"(method) LocalAccountSigner.privateKeyToAccountSigner(key: `0x${string}`): LocalAccountSigner\",\"docs\":\"Creates a `LocalAccountSigner` instance using the provided private key.\",\"tags\":[[\"example\",\"```ts\\nimport { LocalAccountSigner } from \\\"@aa-sdk/core\\\";\\nimport { generatePrivateKey } from \\\"viem\\\";\\n\\nconst signer = LocalAccountSigner.mnemonicToAccountSigner(generatePrivateKey());\\n```\"],[\"param\",\"key The private key in hexadecimal format\"],[\"returns\",\"An instance of `LocalAccountSigner` initialized with the provided private key\"]],\"start\":903,\"length\":25,\"target\":\"privateKeyToAccountSigner\",\"line\":27,\"character\":29},{\"type\":\"hover\",\"text\":\"(alias) generatePrivateKey(): `0x${string}`\\nimport generatePrivateKey\",\"tags\":[[\"description\",\"Generates a random private key.\"],[\"returns\",\"A randomly generated private key.\"]],\"start\":929,\"length\":18,\"target\":\"generatePrivateKey\",\"line\":27,\"character\":55},{\"type\":\"hover\",\"text\":\"(property) chain: Chain\",\"start\":954,\"length\":5,\"target\":\"chain\",\"line\":28,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":961,\"length\":7,\"target\":\"sepolia\",\"line\":28,\"character\":9},{\"type\":\"hover\",\"text\":\"(property) transport: HttpTransport\",\"start\":972,\"length\":9,\"target\":\"transport\",\"line\":29,\"character\":2},{\"type\":\"hover\",\"text\":\"(alias) http(url?: string | undefined, config?: HttpTransportConfig | undefined): HttpTransport\\nimport http\",\"tags\":[[\"description\",\"Creates a HTTP transport that connects to a JSON-RPC API.\"]],\"start\":983,\"length\":4,\"target\":\"http\",\"line\":29,\"character\":13},{\"type\":\"hover\",\"text\":\"(alias) const sepolia: Chain\\nimport sepolia\",\"start\":988,\"length\":7,\"target\":\"sepolia\",\"line\":29,\"character\":18},{\"type\":\"hover\",\"text\":\"(property) rpcUrls: {\\n [key: string]: ChainRpcUrls;\\n default: ChainRpcUrls;\\n}\",\"docs\":\"Collection of RPC endpoints\",\"start\":996,\"length\":7,\"target\":\"rpcUrls\",\"line\":29,\"character\":26},{\"type\":\"hover\",\"text\":\"(index) __type[string]: ChainRpcUrls\",\"start\":1004,\"length\":7,\"target\":\"alchemy\",\"line\":29,\"character\":34},{\"type\":\"hover\",\"text\":\"(property) http: readonly string[]\",\"start\":1012,\"length\":4,\"target\":\"http\",\"line\":29,\"character\":42},{\"type\":\"hover\",\"text\":\"const signature2: `0x${string}`\",\"start\":1033,\"length\":10,\"target\":\"signature2\",\"line\":32,\"character\":6},{\"type\":\"hover\",\"text\":\"const nonHoistedClient: {\\n [x: string]: never;\\n account: SmartContractAccount | undefined;\\n batch?: {\\n multicall?: boolean | {\\n ...;\\n } | undefined;\\n } | undefined;\\n ... 77 more ...;\\n extend: >(fn: (client: Client<...>) => client) => Client<...>;\\n}\",\"start\":1052,\"length\":16,\"target\":\"nonHoistedClient\",\"line\":32,\"character\":25},{\"type\":\"hover\",\"text\":\"(property) signMessage: (args: SignMessageParameters) => Promise<`0x${string}`>\",\"start\":1069,\"length\":11,\"target\":\"signMessage\",\"line\":32,\"character\":42},{\"type\":\"hover\",\"text\":\"(property) message: SignableMessage\",\"start\":1085,\"length\":7,\"target\":\"message\",\"line\":33,\"character\":2},{\"type\":\"hover\",\"text\":\"(property) account: SmartContractAccount>\",\"start\":1113,\"length\":7,\"target\":\"account\",\"line\":34,\"character\":2},{\"type\":\"hover\",\"text\":\"const lightAccount: LightAccount, \\\"v2.0.0\\\">\",\"start\":1122,\"length\":12,\"target\":\"lightAccount\",\"line\":34,\"character\":11}],\"tags\":[]}]]" -diff --git a/node_modules/vocs/_lib/vite/.vocs/theme.css b/node_modules/vocs/_lib/vite/.vocs/theme.css -new file mode 100644 -index 0000000..336a35e ---- /dev/null -+++ b/node_modules/vocs/_lib/vite/.vocs/theme.css -@@ -0,0 +1,12 @@ -+:root { --vocs-color_backgroundAccent: #ce26a2; } -+:root.dark { --vocs-color_backgroundAccent: #ce26a2; } -+:root { --vocs-color_backgroundAccentHover: #c10d96; } -+:root.dark { --vocs-color_backgroundAccentHover: #c10d96; } -+:root { --vocs-color_backgroundAccentText: white; } -+:root.dark { --vocs-color_backgroundAccentText: white; } -+:root { --vocs-color_borderAccent: #c10d96; } -+:root.dark { --vocs-color_borderAccent: #e946ba; } -+:root { --vocs-color_textAccent: #ce26a2; } -+:root.dark { --vocs-color_textAccent: #ce26a2; } -+:root { --vocs-color_textAccentHover: #b3008a; } -+:root.dark { --vocs-color_textAccentHover: #b3008a; } diff --git a/patches/vocs+1.0.0-alpha.62.patch b/patches/vocs+1.0.0-alpha.62.patch new file mode 100644 index 0000000000..7a7bcc40db --- /dev/null +++ b/patches/vocs+1.0.0-alpha.62.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/vocs/_lib/app/components/Sidebar.js b/node_modules/vocs/_lib/app/components/Sidebar.js +index 203ded0..cc1acc0 100644 +--- a/node_modules/vocs/_lib/app/components/Sidebar.js ++++ b/node_modules/vocs/_lib/app/components/Sidebar.js +@@ -48,7 +48,7 @@ function getSidebarGroups(sidebar) { + } + function getActiveChildItem(items, pathname) { + return items.find((item) => { +- if (matchPath(pathname, item.link ?? '')) ++ if (matchPath(pathname, item.link ?? '') && pathname !== '/') + return true; + if (item.link === pathname) + return true; +@@ -64,7 +64,7 @@ function SidebarItem(props) { + const match = useMatch(item.link || ''); + const hasActiveChildItem = useMemo(() => (item.items ? Boolean(getActiveChildItem(item.items, pathname)) : false), [item.items, pathname]); + const [collapsed, setCollapsed] = useState(() => { +- if (item.link && match) ++ if (item.link && match && pathname !== '/') + return false; + if (!item.items) + return false; diff --git a/site/package.json b/site/package.json index 43d75d31d4..4d382237ed 100644 --- a/site/package.json +++ b/site/package.json @@ -7,7 +7,7 @@ "predev": "npx tsx ./scripts/prebuild.ts", "dev": "vocs dev", "prebuild": "npx tsx ./scripts/prebuild.ts", - "build": "./retry-build.sh", + "build": "vocs build", "preview": "vocs preview" }, "devDependencies": { @@ -31,7 +31,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "viem": "2.20.0", - "vocs": "^1.0.0-alpha.55", + "vocs": "^1.0.0-alpha.62", "wagmi": "2.12.7" } } diff --git a/site/pages/infra/sponsor-gas.mdx b/site/pages/infra/sponsor-gas.mdx index a517ecf84b..e75c87e6b7 100644 --- a/site/pages/infra/sponsor-gas.mdx +++ b/site/pages/infra/sponsor-gas.mdx @@ -142,6 +142,7 @@ import { sepolia, alchemyFeeEstimator, createAlchemyPublicRpcClient, + alchemy, } from "@account-kit/infra"; import { createLightAccount } from "@account-kit/smart-contracts"; // You can replace this with any signer you'd like @@ -157,9 +158,7 @@ const alchemyTransport = alchemy({ const alchemyRpcClient = createAlchemyPublicRpcClient({ chain: sepolia, - connectionConfig: { - apiKey: "API_KEY", - }, + transport: alchemyTransport, }); // 2. create a split transport to route traffic between the paymaster and the bundler diff --git a/site/pages/react/customization/authentication-modal.mdx b/site/pages/react/customization/authentication-modal.mdx index 14294bd2ea..b2384f6a0c 100644 --- a/site/pages/react/customization/authentication-modal.mdx +++ b/site/pages/react/customization/authentication-modal.mdx @@ -15,11 +15,11 @@ In this example, we hide the default header text and replace it with our own. ```tsx twoslash // @jsx: react-jsx import { createConfig } from "@account-kit/react"; -import { sepolia } from "@account-kit/infra"; +import { sepolia, alchemy } from "@account-kit/infra"; export const confg = createConfig( { - apiKey: "YOUR_API_KEY", + transport: alchemy({ apiKey: "YOUR_API_KEY" }), chain: sepolia, }, { @@ -38,11 +38,11 @@ In this example, we leave the `Sign in` text in the modal and add an icon above ```tsx twoslash // @jsx: react-jsx import { createConfig } from "@account-kit/react"; -import { sepolia } from "@account-kit/infra"; +import { sepolia, alchemy } from "@account-kit/infra"; export const confg = createConfig( { - apiKey: "YOUR_API_KEY", + transport: alchemy({ apiKey: "YOUR_API_KEY" }), chain: sepolia, }, { diff --git a/site/pages/smart-contracts/modular-account/upgrading-to-modular-account.mdx b/site/pages/smart-contracts/modular-account/upgrading-to-modular-account.mdx index 4144ed2b73..19b56fcebf 100644 --- a/site/pages/smart-contracts/modular-account/upgrading-to-modular-account.mdx +++ b/site/pages/smart-contracts/modular-account/upgrading-to-modular-account.mdx @@ -30,12 +30,12 @@ const upgradedAccount = await createMAAccount(); ```ts [lightAccountClient.ts] twoslash filename="lightAccountClient.ts" import { createLightAccountAlchemyClient } from "@account-kit/smart-contracts"; -import { sepolia } from "@account-kit/infra"; +import { sepolia, alchemy } from "@account-kit/infra"; import { LocalAccountSigner } from "@aa-sdk/core"; import { generatePrivateKey } from "viem/accounts"; export const lightAccountClient = await createLightAccountAlchemyClient({ - apiKey: "YOUR_API_KEY", + transport: alchemy({ apiKey: "YOUR_API_KEY" }), chain: sepolia, signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()), }); @@ -48,12 +48,12 @@ That is all! Now, you can create a smart account client to connect with the upgr :::code-group ```ts twoslash [example.ts] -import { createAlchemySmartAccountClient } from "@account-kit/infra"; +import { createAlchemySmartAccountClient, alchemy } from "@account-kit/infra"; import { multiOwnerPluginActions } from "@account-kit/smart-contracts"; import { upgradedAccount } from "./upgradedAccount"; const upgradedAccountClient = await createAlchemySmartAccountClient({ - apiKey: "YOUR_API_KEY", + transport: alchemy({ apiKey: "YOUR_API_KEY" }), chain: lightAccountClient.chain, account: upgradedAccount, }).extend(multiOwnerPluginActions); @@ -80,12 +80,12 @@ export const upgradedAccount = await createMAAccount(); ```ts [lightAccountClient.ts] twoslash filename="lightAccountClient.ts" import { createLightAccountAlchemyClient } from "@account-kit/smart-contracts"; -import { sepolia } from "@account-kit/infra"; +import { sepolia, alchemy } from "@account-kit/infra"; import { LocalAccountSigner } from "@aa-sdk/core"; import { generatePrivateKey } from "viem/accounts"; export const lightAccountClient = await createLightAccountAlchemyClient({ - apiKey: "YOUR_API_KEY", + transport: alchemy({ apiKey: "YOUR_API_KEY" }), chain: sepolia, signer: LocalAccountSigner.privateKeyToAccountSigner(generatePrivateKey()), }); diff --git a/site/tailwind.config.cjs b/site/tailwind.config.cjs index 786b6152ac..efbebd1e84 100644 --- a/site/tailwind.config.cjs +++ b/site/tailwind.config.cjs @@ -1,5 +1,10 @@ module.exports = { - content: ["./**/*.{js,ts,jsx,tsx,md,mdx}"], + content: [ + "./components/**/*.{js,ts,jsx,tsx,md,mdx}", + "./pages/**/*.{js,ts,jsx,tsx,md,mdx}", + "./shared/**/*.{js,ts,jsx,tsx,md,mdx}", + "./sidebar/**/*.{js,ts,jsx,tsx,md,mdx}", + ], darkMode: "class", important: true, theme: { diff --git a/site/turbo.json b/site/turbo.json new file mode 100644 index 0000000000..eb89ffb61a --- /dev/null +++ b/site/turbo.json @@ -0,0 +1,9 @@ +{ + "extends": ["//"], + "tasks": { + "build": { + "outputs": ["dist/**", "sidebar/*"], + "dependsOn": ["^build"] + } + } +} diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000000..689618d8e6 --- /dev/null +++ b/turbo.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "build": { + "dependsOn": ["^build", "generate"], + "outputs": [".next/**", "!.next/cache/**", "dist/**"], + "cache": true + }, + "test": { + "dependsOn": ["^build"], + "cache": true + }, + "docs:gen": { + "outputs": ["../../site/pages/reference/**"] + }, + "generate": { + "dependsOn": ["^build"], + "outputs": ["src/**/plugins/**"], + "cache": true + } + } +} diff --git a/yarn.lock b/yarn.lock index 7f7f21eb61..a99d2c7e38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2999,20 +2999,20 @@ dependencies: "@floating-ui/dom" "^1.0.0" -"@floating-ui/react-dom@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz" - integrity sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg== +"@floating-ui/react-dom@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== dependencies: "@floating-ui/dom" "^1.0.0" -"@floating-ui/react@^0.26.6": - version "0.26.22" - resolved "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.22.tgz" - integrity sha512-LNv4azPt8SpT4WW7Kku5JNVjLk2GcS0bGGjFTAgqOONRFo9r/aaGHHPpdiIuQbB1t8shmWyWqTTUDmZ9fcNshg== +"@floating-ui/react@^0.26.24": + version "0.26.27" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.27.tgz#402f7b4b2702650662705fe9cbe0f1d5607846a1" + integrity sha512-jLP72x0Kr2CgY6eTYi/ra3VA9LOkTo4C+DUTrbFgFOExKy3omYVmwMjNKqxAHdsnyLS96BIDLcO2SlnsNf8KUQ== dependencies: - "@floating-ui/react-dom" "^2.1.1" - "@floating-ui/utils" "^0.2.7" + "@floating-ui/react-dom" "^2.1.2" + "@floating-ui/utils" "^0.2.8" tabbable "^6.0.0" "@floating-ui/utils@^0.2.0": @@ -3020,10 +3020,10 @@ resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz" integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw== -"@floating-ui/utils@^0.2.7": - version "0.2.7" - resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz" - integrity sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA== +"@floating-ui/utils@^0.2.8": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" + integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" @@ -3037,10 +3037,10 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@hono/node-server@^1.2.3": - version "1.11.1" - resolved "https://registry.npmjs.org/@hono/node-server/-/node-server-1.11.1.tgz" - integrity sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA== +"@hono/node-server@^1.13.1": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-1.13.5.tgz#94d055c3e4007cbb5b9768c8234a58f1af6555f9" + integrity sha512-lSo+CFlLqAFB4fX7ePqI9nauEn64wOfJHAfc9duYFTvAG3o416pC0nTGeNjuLHchLedH+XyWda5v79CVx1PIjg== "@humanwhocodes/config-array@^0.11.13": version "0.11.13" @@ -3597,10 +3597,17 @@ dependencies: "@types/mdx" "^2.0.0" -"@mdx-js/rollup@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.0.1.tgz" - integrity sha512-j0II91OCm4ld+l5QVgXXMQGxVVcAWIQJakYWi1dv5pefDHASJyCYER2TsdH7Alf958GoFSM7ugukWyvDq/UY4A== +"@mdx-js/react@^3.0.1": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.0.tgz#c4522e335b3897b9a845db1dbdd2f966ae8fb0ed" + integrity sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ== + dependencies: + "@types/mdx" "^2.0.0" + +"@mdx-js/rollup@^3.0.1": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mdx-js/rollup/-/rollup-3.1.0.tgz#55df5cf4db52ac95be26d0cfa039ebf4e945e6e4" + integrity sha512-q4xOtUXpCzeouE8GaJ8StT4rDxm/U5j6lkMHL2srb2Q3Y7cobE0aXyPzXVVlbeIMBi+5R5MpbiaVE5/vJUdnHg== dependencies: "@mdx-js/mdx" "^3.0.0" "@rollup/pluginutils" "^5.0.0" @@ -4066,6 +4073,11 @@ resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== +"@noble/hashes@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" + integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -4645,21 +4657,20 @@ resolved "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz" integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA== -"@radix-ui/react-accordion@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz" - integrity sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg== +"@radix-ui/react-accordion@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz#5c942c42c24267376b26204ec6847b17d15659b3" + integrity sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collapsible" "1.0.3" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collapsible" "1.1.1" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-arrow@1.0.3": version "1.0.3" @@ -4676,31 +4687,19 @@ dependencies: "@radix-ui/react-primitive" "2.0.0" -"@radix-ui/react-collapsible@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz" - integrity sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-collection@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz" - integrity sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA== +"@radix-ui/react-collapsible@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz#1382cc9ec48f8b473c14f3779d317f0cdf6da5e9" + integrity sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-presence" "1.1.1" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" "@radix-ui/react-collection@1.1.0": version "1.1.0" @@ -4741,33 +4740,25 @@ resolved "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a" integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q== -"@radix-ui/react-dialog@^1.0.5": - version "1.0.5" - resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz" - integrity sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q== +"@radix-ui/react-dialog@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz#d9345575211d6f2d13e209e84aec9a8584b54d6c" + integrity sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.5" - "@radix-ui/react-focus-guards" "1.0.1" - "@radix-ui/react-focus-scope" "1.0.4" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-portal" "1.0.4" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.1" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-focus-scope" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-portal" "1.1.2" + "@radix-ui/react-presence" "1.1.1" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-slot" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" aria-hidden "^1.1.1" - react-remove-scroll "2.5.5" - -"@radix-ui/react-direction@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz" - integrity sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA== - dependencies: - "@babel/runtime" "^7.13.10" + react-remove-scroll "2.6.0" "@radix-ui/react-direction@1.1.0": version "1.1.0" @@ -4859,34 +4850,32 @@ dependencies: "@radix-ui/react-use-layout-effect" "1.1.0" -"@radix-ui/react-label@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz" - integrity sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ== +"@radix-ui/react-label@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.0.tgz#3aa2418d70bb242be37c51ff5e51a2adcbc372e3" + integrity sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-primitive" "2.0.0" -"@radix-ui/react-navigation-menu@^1.1.4": - version "1.1.4" - resolved "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.1.4.tgz" - integrity sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA== +"@radix-ui/react-navigation-menu@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz#31989e026adecfbb2f7bd1108ee6fffb830b2ec1" + integrity sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.5" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - "@radix-ui/react-use-previous" "1.0.1" - "@radix-ui/react-visually-hidden" "1.0.3" + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-presence" "1.1.1" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-previous" "1.1.0" + "@radix-ui/react-visually-hidden" "1.1.0" "@radix-ui/react-popover@^1.0.7": version "1.0.7" @@ -4910,6 +4899,27 @@ aria-hidden "^1.1.1" react-remove-scroll "2.5.5" +"@radix-ui/react-popover@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.1.2.tgz#a0cab25f69aa49ad0077d91e9e9dcd323758020c" + integrity sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w== + dependencies: + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.1" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-focus-scope" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-popper" "1.2.0" + "@radix-ui/react-portal" "1.1.2" + "@radix-ui/react-presence" "1.1.1" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-slot" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + aria-hidden "^1.1.1" + react-remove-scroll "2.6.0" + "@radix-ui/react-popper@1.1.3": version "1.1.3" resolved "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz" @@ -4984,6 +4994,14 @@ "@radix-ui/react-compose-refs" "1.1.0" "@radix-ui/react-use-layout-effect" "1.1.0" +"@radix-ui/react-presence@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.1.tgz#98aba423dba5e0c687a782c0669dcd99de17f9b1" + integrity sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A== + dependencies: + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-primitive@1.0.3": version "1.0.3" resolved "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz" @@ -4999,21 +5017,20 @@ dependencies: "@radix-ui/react-slot" "1.1.0" -"@radix-ui/react-roving-focus@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz" - integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ== +"@radix-ui/react-roving-focus@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz#b30c59daf7e714c748805bfe11c76f96caaac35e" + integrity sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-collection" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-context" "1.1.0" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-select@^2.1.2": version "2.1.2" @@ -5071,20 +5088,19 @@ "@radix-ui/react-use-previous" "1.0.1" "@radix-ui/react-use-size" "1.0.1" -"@radix-ui/react-tabs@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz" - integrity sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog== +"@radix-ui/react-tabs@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz#698bd97923f6bcd629738198a73beebcc4c88b30" + integrity sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-presence" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-roving-focus" "1.0.4" - "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/primitive" "1.1.0" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-presence" "1.1.1" + "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-roving-focus" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-toast@^1.2.1": version "1.2.1" @@ -5218,14 +5234,6 @@ dependencies: "@radix-ui/react-use-layout-effect" "1.1.0" -"@radix-ui/react-visually-hidden@1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz" - integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-visually-hidden@1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz" @@ -5346,81 +5354,171 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.1.tgz#4a5135e88d522dbf85c4ca43ad14af9dab27bd07" integrity sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q== +"@rollup/rollup-android-arm-eabi@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.4.tgz#c460b54c50d42f27f8254c435a4f3b3e01910bc8" + integrity sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw== + "@rollup/rollup-android-arm64@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.1.tgz#e32d5e6511a49ddd64c22f8b3668049f63b7b04c" integrity sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ== +"@rollup/rollup-android-arm64@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.4.tgz#96e01f3a04675d8d5973ab8d3fd6bc3be21fa5e1" + integrity sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA== + "@rollup/rollup-darwin-arm64@4.17.1": version "4.17.1" resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.1.tgz" integrity sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA== +"@rollup/rollup-darwin-arm64@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.4.tgz#9b2ec23b17b47cbb2f771b81f86ede3ac6730bce" + integrity sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ== + "@rollup/rollup-darwin-x64@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.1.tgz#2291592328f6a2fb5dba3f1f41a05a078325a674" integrity sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw== +"@rollup/rollup-darwin-x64@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.4.tgz#f30e4ee6929e048190cf10e0daa8e8ae035b6e46" + integrity sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg== + +"@rollup/rollup-freebsd-arm64@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.4.tgz#c54b2373ec5bcf71f08c4519c7ae80a0b6c8e03b" + integrity sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw== + +"@rollup/rollup-freebsd-x64@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.4.tgz#3bc53aa29d5a34c28ba8e00def76aa612368458e" + integrity sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g== + "@rollup/rollup-linux-arm-gnueabihf@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.1.tgz#8851254fc581d860940ab27009c07dde80666e82" integrity sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw== +"@rollup/rollup-linux-arm-gnueabihf@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.4.tgz#c85aedd1710c9e267ee86b6d1ce355ecf7d9e8d9" + integrity sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA== + "@rollup/rollup-linux-arm-musleabihf@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.1.tgz#31c41636467cb0dd5f19e306929f2f4c54bb98dd" integrity sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg== +"@rollup/rollup-linux-arm-musleabihf@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.4.tgz#e77313408bf13995aecde281aec0cceb08747e42" + integrity sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw== + "@rollup/rollup-linux-arm64-gnu@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.1.tgz#30d3e02585c7b1d2ea96b2834a79aeb1fb10237b" integrity sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw== +"@rollup/rollup-linux-arm64-gnu@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.4.tgz#633f632397b3662108cfaa1abca2a80b85f51102" + integrity sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg== + "@rollup/rollup-linux-arm64-musl@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.1.tgz#e6a4cdb552ff859b2fce275937999789ae72f659" integrity sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ== +"@rollup/rollup-linux-arm64-musl@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.4.tgz#63edd72b29c4cced93e16113a68e1be9fef88907" + integrity sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA== + "@rollup/rollup-linux-powerpc64le-gnu@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.1.tgz#35b5af3ded0b20dd7cc00813d96f9823b321d2ea" integrity sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw== +"@rollup/rollup-linux-powerpc64le-gnu@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.4.tgz#a9418a4173df80848c0d47df0426a0bf183c4e75" + integrity sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA== + "@rollup/rollup-linux-riscv64-gnu@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.1.tgz#59fef3d0a5feee3b072d92898c9d62c0c7e6e95c" integrity sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ== +"@rollup/rollup-linux-riscv64-gnu@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.4.tgz#bc9c195db036a27e5e3339b02f51526b4ce1e988" + integrity sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw== + "@rollup/rollup-linux-s390x-gnu@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.1.tgz#004f361e29c5b6cd6fb35192583ec2adf541c366" integrity sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw== +"@rollup/rollup-linux-s390x-gnu@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.4.tgz#1651fdf8144ae89326c01da5d52c60be63e71a82" + integrity sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ== + "@rollup/rollup-linux-x64-gnu@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.1.tgz#61fbc6580b972893c1e74ac460d41f6ca4143482" integrity sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ== +"@rollup/rollup-linux-x64-gnu@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.4.tgz#e473de5e4acb95fcf930a35cbb7d3e8080e57a6f" + integrity sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA== + "@rollup/rollup-linux-x64-musl@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.1.tgz#9d8f4c016f587bab6a1c21fbb966fdb4d076bbb9" integrity sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ== +"@rollup/rollup-linux-x64-musl@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.4.tgz#0af12dd2578c29af4037f0c834b4321429dd5b01" + integrity sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q== + "@rollup/rollup-win32-arm64-msvc@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.1.tgz#f1b28caca6d97beab3e3a5e623b97610a423bea5" integrity sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg== +"@rollup/rollup-win32-arm64-msvc@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.4.tgz#e48e78cdd45313b977c1390f4bfde7ab79be8871" + integrity sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA== + "@rollup/rollup-win32-ia32-msvc@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.1.tgz#f13b76ecfba6820867f23b805f6626e02c7300ec" integrity sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag== +"@rollup/rollup-win32-ia32-msvc@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.4.tgz#a3fc8536d243fe161c796acb93eba43c250f311c" + integrity sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg== + "@rollup/rollup-win32-x64-msvc@4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.1.tgz#e672de70ce490e5564fe75171373d1653b5694da" integrity sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA== +"@rollup/rollup-win32-x64-msvc@4.24.4": + version "4.24.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.4.tgz#e2a9d1fd56524103a6cc8a54404d9d3ebc73c454" + integrity sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg== + "@rushstack/eslint-patch@^1.1.0", "@rushstack/eslint-patch@^1.3.3": version "1.6.0" resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz" @@ -5558,39 +5656,75 @@ resolved "https://registry.yarnpkg.com/@segment/isodate/-/isodate-1.0.3.tgz#f44e8202d5edd277ce822785239474b2c9411d4a" integrity sha512-BtanDuvJqnACFkeeYje7pWULVv8RgZaqKHWwGFnL/g/TH/CcZjkIVTfGDp/MAxmilYHUkrX70SqwnYSTNEaN7A== -"@shikijs/core@1.14.1": - version "1.14.1" - resolved "https://registry.npmjs.org/@shikijs/core/-/core-1.14.1.tgz" - integrity sha512-KyHIIpKNaT20FtFPFjCQB5WVSTpLR/n+jQXhWHWVUMm9MaOaG9BGOG0MSyt7yA4+Lm+4c9rTc03tt3nYzeYSfw== +"@shikijs/core@1.22.2": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.22.2.tgz#9c22bd4cc8a4d6c062461cfd35e1faa6c617ca25" + integrity sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg== dependencies: + "@shikijs/engine-javascript" "1.22.2" + "@shikijs/engine-oniguruma" "1.22.2" + "@shikijs/types" "1.22.2" + "@shikijs/vscode-textmate" "^9.3.0" "@types/hast" "^3.0.4" + hast-util-to-html "^9.0.3" -"@shikijs/rehype@^1.10.3": - version "1.14.1" - resolved "https://registry.npmjs.org/@shikijs/rehype/-/rehype-1.14.1.tgz" - integrity sha512-52L8RZ8eJ4t7jWk5jAl5fh5whAmseL5TJezZuWogC6GH5X0JZhWxPxk2+Dg3tH/Ga3447HdzAzEVGkJmXX3o3A== +"@shikijs/engine-javascript@1.22.2": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-1.22.2.tgz#62e90dbd2ed1d78b972ad7d0a1f8ffaaf5e43279" + integrity sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw== dependencies: - "@shikijs/transformers" "1.14.1" + "@shikijs/types" "1.22.2" + "@shikijs/vscode-textmate" "^9.3.0" + oniguruma-to-js "0.4.3" + +"@shikijs/engine-oniguruma@1.22.2": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.22.2.tgz#b12a44e3faf486e19fbcf8952f4b56b9b9b8d9b8" + integrity sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA== + dependencies: + "@shikijs/types" "1.22.2" + "@shikijs/vscode-textmate" "^9.3.0" + +"@shikijs/rehype@^1.21.0": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/rehype/-/rehype-1.22.2.tgz#b4ce7cbe64051c7cfaf0119444bc276a227edd44" + integrity sha512-A0RHgiYR5uiHvddwHehBN9j8PhOvfT6/GebSTWrapur6M+fD/4i3mlfUv7aFK4b+4GQ1R42L8fC5N98whZjNcg== + dependencies: + "@shikijs/types" "1.22.2" "@types/hast" "^3.0.4" - hast-util-to-string "^3.0.0" - shiki "1.14.1" + hast-util-to-string "^3.0.1" + shiki "1.22.2" unified "^11.0.5" unist-util-visit "^5.0.0" -"@shikijs/transformers@1.14.1", "@shikijs/transformers@^1.10.3": - version "1.14.1" - resolved "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.14.1.tgz" - integrity sha512-JJqL8QBVCJh3L61jqqEXgFq1cTycwjcGj7aSmqOEsbxnETM9hRlaB74QuXvY/fVJNjbNt8nvWo0VwAXKvMSLRg== +"@shikijs/transformers@^1.21.0": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-1.22.2.tgz#1d6c2d6aed9229f96932096dff7eee5facad3f56" + integrity sha512-8f78OiBa6pZDoZ53lYTmuvpFPlWtevn23bzG+azpPVvZg7ITax57o/K3TC91eYL3OMJOO0onPbgnQyZjRos8XQ== dependencies: - shiki "1.14.1" + shiki "1.22.2" -"@shikijs/twoslash@^1.10.3": - version "1.14.1" - resolved "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.14.1.tgz" - integrity sha512-b0krVIqVCpdh9Gji+gTSJp0n2KyepPmnjKEDs+dUb765MUcyfN9qK/vRr7fA/YdAJxab8IDpz1GbLl0GuzAyFQ== +"@shikijs/twoslash@^1.21.0": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/twoslash/-/twoslash-1.22.2.tgz#c055b60a0759d3e1c4cd5d5d94bc0c17a20eb39a" + integrity sha512-4R3A7aH/toZgtlveXHKk01nIsvn8hjAfPJ1aT550zcV4qK6vK/tfaEyYtaljOaY1wig2l5+8sKjNSEz3PcSiEw== + dependencies: + "@shikijs/core" "1.22.2" + "@shikijs/types" "1.22.2" + twoslash "^0.2.12" + +"@shikijs/types@1.22.2": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.22.2.tgz#695a283f19963fe0638fc2646862ba5cfc4623a8" + integrity sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg== dependencies: - "@shikijs/core" "1.14.1" - twoslash "^0.2.9" + "@shikijs/vscode-textmate" "^9.3.0" + "@types/hast" "^3.0.4" + +"@shikijs/vscode-textmate@^9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz#b2f1776e488c1d6c2b6cd129bab62f71bbc9c7ab" + integrity sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA== "@sideway/address@^4.1.5": version "4.1.5" @@ -6794,6 +6928,11 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" @@ -7360,10 +7499,10 @@ "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" -"@typescript/vfs@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz" - integrity sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg== +"@typescript/vfs@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@typescript/vfs/-/vfs-1.6.0.tgz#9c90d8c43f7ac53cc77d5959e5c4c9b639f0959e" + integrity sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg== dependencies: debug "^4.1.1" @@ -7597,12 +7736,30 @@ modern-ahocorasick "^1.0.0" picocolors "^1.0.0" -"@vanilla-extract/dynamic@^2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.0.tgz" - integrity sha512-8zl0IgBYRtgD1h+56Zu13wHTiMTJSVEa4F7RWX9vTB/5Xe2KtjoiqApy/szHPVFA56c+ex6A4GpCQjT1bKXbYw== +"@vanilla-extract/css@^1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.16.0.tgz#d88276a7beae8953024b9b8dc4ae127dd6f9ab3a" + integrity sha512-05JTbvG1E0IrSZKZ5el2EM9CmAX0XSdsNY+d4aRZxDvYf3/hwxomvFFEz2b/awjgg9yTVHW83Wq19wE4OoTEMg== dependencies: - "@vanilla-extract/private" "^1.0.3" + "@emotion/hash" "^0.9.0" + "@vanilla-extract/private" "^1.0.6" + css-what "^6.1.0" + cssesc "^3.0.0" + csstype "^3.0.7" + dedent "^1.5.3" + deep-object-diff "^1.1.9" + deepmerge "^4.2.2" + lru-cache "^10.4.3" + media-query-parser "^2.0.2" + modern-ahocorasick "^1.0.0" + picocolors "^1.0.0" + +"@vanilla-extract/dynamic@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.1.2.tgz#b1d1c1e0e392934c5a3bbb53f99069a7721311ac" + integrity sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A== + dependencies: + "@vanilla-extract/private" "^1.0.6" "@vanilla-extract/integration@^6.3.0": version "6.5.0" @@ -7623,19 +7780,19 @@ vite "^5.0.11" vite-node "^1.2.0" -"@vanilla-extract/private@^1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz" - integrity sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ== - "@vanilla-extract/private@^1.0.4": version "1.0.4" resolved "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.4.tgz" integrity sha512-8FGD6AejeC/nXcblgNCM5rnZb9KXa4WNkR03HCWtdJBpANjTgjHEglNLFnhuvdQ78tC6afaxBPI+g7F2NX3tgg== -"@vanilla-extract/vite-plugin@^3.9.4": +"@vanilla-extract/private@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.6.tgz#f10bbf3189f7b827d0bd7f804a6219dd03ddbdd4" + integrity sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw== + +"@vanilla-extract/vite-plugin@^3.9.5": version "3.9.5" - resolved "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.9.5.tgz" + resolved "https://registry.yarnpkg.com/@vanilla-extract/vite-plugin/-/vite-plugin-3.9.5.tgz#d9986111001778f52a36d1f9710a11f3aa6d2c4d" integrity sha512-CWI/CtrVW6i3HKccI6T7uGQkTJ8bd8Xl2UMBg3Pkr7dwWMmavXTeucV0I9KSbmXaYXSbEj+Q8c9y0xAZwtmTig== dependencies: "@vanilla-extract/integration" "^6.3.0" @@ -9689,10 +9846,10 @@ chownr@^3.0.0: resolved "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz" integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== -chroma-js@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz" - integrity sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A== +chroma-js@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.6.0.tgz#578743dd359698a75067a19fa5571dec54d0b70b" + integrity sha512-BLHvCB9s8Z1EV4ethr6xnkl/P2YRFOGqfgvuMG/MyCbZPrTA+NeiByY6XvgF0zP4/2deU2CXnWyMa3zu1LqQ3A== ci-info@^3.1.0, ci-info@^3.2.0, ci-info@^3.6.1, ci-info@^3.7.0: version "3.9.0" @@ -9852,7 +10009,7 @@ clsx@^1.2.1: resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -clsx@^2.0.0, clsx@^2.1.1: +clsx@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== @@ -10982,6 +11139,11 @@ encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" @@ -13387,6 +13549,23 @@ hast-util-to-estree@^3.0.0: unist-util-position "^5.0.0" zwitch "^2.0.0" +hast-util-to-html@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz#a9999a0ba6b4919576a9105129fead85d37f302b" + integrity sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^3.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + hast-util-to-jsx-runtime@^2.0.0: version "2.3.0" resolved "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz" @@ -13415,6 +13594,13 @@ hast-util-to-string@^3.0.0: dependencies: "@types/hast" "^3.0.0" +hast-util-to-string@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz#a4f15e682849326dd211c97129c94b0c3e76527c" + integrity sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A== + dependencies: + "@types/hast" "^3.0.0" + hast-util-whitespace@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz" @@ -13475,9 +13661,9 @@ homedir-polyfill@^1.0.0: dependencies: parse-passwd "^1.0.0" -hono@^3.10.2: +hono@^3.12.12: version "3.12.12" - resolved "https://registry.npmjs.org/hono/-/hono-3.12.12.tgz" + resolved "https://registry.yarnpkg.com/hono/-/hono-3.12.12.tgz#1b725feb2604d1b2d50c3a8c11594cca1db462f8" integrity sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg== hosted-git-info@^2.1.4: @@ -13530,6 +13716,11 @@ html-tags@^3.1.0: resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz" integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + htmlparser2@^3.9.2: version "3.10.1" resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz" @@ -15816,6 +16007,11 @@ lru-cache@^10.2.0: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz" integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== +lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" @@ -16026,6 +16222,24 @@ mdast-util-from-markdown@^2.0.0: micromark-util-types "^2.0.0" unist-util-stringify-position "^4.0.0" +mdast-util-from-markdown@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + dependencies: + "@types/mdast" "^4.0.0" + "@types/unist" "^3.0.0" + decode-named-character-reference "^1.0.0" + devlop "^1.0.0" + mdast-util-to-string "^4.0.0" + micromark "^4.0.0" + micromark-util-decode-numeric-character-reference "^2.0.0" + micromark-util-decode-string "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + unist-util-stringify-position "^4.0.0" + mdast-util-frontmatter@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz" @@ -16165,7 +16379,7 @@ mdast-util-phrasing@^4.0.0: "@types/mdast" "^4.0.0" unist-util-is "^6.0.0" -mdast-util-to-hast@^13.0.0, mdast-util-to-hast@^13.0.2: +mdast-util-to-hast@^13.0.0: version "13.1.0" resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz" integrity sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA== @@ -16180,6 +16394,21 @@ mdast-util-to-hast@^13.0.0, mdast-util-to-hast@^13.0.2: unist-util-visit "^5.0.0" vfile "^6.0.0" +mdast-util-to-hast@^13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + mdast-util-to-markdown@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz" @@ -16779,6 +17008,13 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" @@ -17788,6 +18024,13 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" +oniguruma-to-js@0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/oniguruma-to-js/-/oniguruma-to-js-0.4.3.tgz#8d899714c21f5c7d59a3c0008ca50e848086d740" + integrity sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ== + dependencies: + regex "^4.3.2" + open@^7.4.2: version "7.4.2" resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" @@ -18580,7 +18823,7 @@ postcss@^8, postcss@^8.4.23: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.3.6, postcss@^8.4.31, postcss@^8.4.38: +postcss@^8.3.6, postcss@^8.4.38: version "8.4.38" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== @@ -18589,14 +18832,14 @@ postcss@^8.3.6, postcss@^8.4.31, postcss@^8.4.38: picocolors "^1.0.0" source-map-js "^1.2.0" -postcss@^8.4.41: - version "8.4.41" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz" - integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== +postcss@^8.4.43, postcss@^8.4.47: + version "8.4.47" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" + integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== dependencies: nanoid "^3.3.7" - picocolors "^1.0.1" - source-map-js "^1.2.0" + picocolors "^1.1.0" + source-map-js "^1.2.1" postcss@^8.4.45: version "8.4.45" @@ -19010,10 +19253,10 @@ react-helmet@^6.1.0: react-fast-compare "^3.1.1" react-side-effect "^2.1.0" -react-intersection-observer@^9.5.3: - version "9.10.2" - resolved "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.2.tgz" - integrity sha512-j2hGADK2hCbAlfaq6L3tVLb4iqngoN7B1fT16MwJ4J16YW/vWLcmAIinLsw0lgpZeMi4UDUWtHC9QDde0/P1yQ== +react-intersection-observer@^9.13.1: + version "9.13.1" + resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.13.1.tgz#6c61a75801162491c6348bad09967f2caf445584" + integrity sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw== react-is@18.1.0: version "18.1.0" @@ -19355,6 +19598,11 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" +regex@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/regex/-/regex-4.4.0.tgz#cb731e2819f230fad69089e1bd854fef7569e90a" + integrity sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ== + regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" @@ -19703,6 +19951,33 @@ rollup@^4.13.0: "@rollup/rollup-win32-x64-msvc" "4.17.1" fsevents "~2.3.2" +rollup@^4.20.0: + version "4.24.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.24.4.tgz#fdc76918de02213c95447c9ffff5e35dddb1d058" + integrity sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.24.4" + "@rollup/rollup-android-arm64" "4.24.4" + "@rollup/rollup-darwin-arm64" "4.24.4" + "@rollup/rollup-darwin-x64" "4.24.4" + "@rollup/rollup-freebsd-arm64" "4.24.4" + "@rollup/rollup-freebsd-x64" "4.24.4" + "@rollup/rollup-linux-arm-gnueabihf" "4.24.4" + "@rollup/rollup-linux-arm-musleabihf" "4.24.4" + "@rollup/rollup-linux-arm64-gnu" "4.24.4" + "@rollup/rollup-linux-arm64-musl" "4.24.4" + "@rollup/rollup-linux-powerpc64le-gnu" "4.24.4" + "@rollup/rollup-linux-riscv64-gnu" "4.24.4" + "@rollup/rollup-linux-s390x-gnu" "4.24.4" + "@rollup/rollup-linux-x64-gnu" "4.24.4" + "@rollup/rollup-linux-x64-musl" "4.24.4" + "@rollup/rollup-win32-arm64-msvc" "4.24.4" + "@rollup/rollup-win32-ia32-msvc" "4.24.4" + "@rollup/rollup-win32-x64-msvc" "4.24.4" + fsevents "~2.3.2" + rrweb-cssom@^0.7.1: version "0.7.1" resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz" @@ -19872,7 +20147,26 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" -serve-static@1.15.0, serve-static@^1.15.0: +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.15.0: version "1.15.0" resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== @@ -19882,6 +20176,16 @@ serve-static@1.15.0, serve-static@^1.15.0: parseurl "~1.3.3" send "0.18.0" +serve-static@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" @@ -19977,12 +20281,16 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shiki@1.14.1, shiki@^1.10.3: - version "1.14.1" - resolved "https://registry.npmjs.org/shiki/-/shiki-1.14.1.tgz" - integrity sha512-FujAN40NEejeXdzPt+3sZ3F2dx1U24BY2XTY01+MG8mbxCiA2XukXdcbyMyLAHJ/1AUUnQd1tZlvIjefWWEJeA== +shiki@1.22.2, shiki@^1.21.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.22.2.tgz#ed109a3d0850504ad5a1edf8496470a2121c5b7b" + integrity sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA== dependencies: - "@shikijs/core" "1.14.1" + "@shikijs/core" "1.22.2" + "@shikijs/engine-javascript" "1.22.2" + "@shikijs/engine-oniguruma" "1.22.2" + "@shikijs/types" "1.22.2" + "@shikijs/vscode-textmate" "^9.3.0" "@types/hast" "^3.0.4" side-channel@^1.0.4: @@ -20148,6 +20456,11 @@ source-map-js@^1.0.2, source-map-js@^1.2.0: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" @@ -20807,6 +21120,34 @@ tailwindcss@^3.3.3, tailwindcss@^3.4.1, tailwindcss@^3.4.3: resolve "^1.22.2" sucrase "^3.32.0" +tailwindcss@^3.4.13: + version "3.4.14" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.14.tgz#6dd23a7f54ec197b19159e91e3bb1e55e7aa73ac" + integrity sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.5.3" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.0" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.21.0" + lilconfig "^2.1.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.23" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.1" + postcss-nested "^6.0.1" + postcss-selector-parser "^6.0.11" + resolve "^1.22.2" + sucrase "^3.32.0" + tapable@^2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" @@ -21288,23 +21629,65 @@ tuf-js@^2.2.0: debug "^4.3.4" make-fetch-happen "^13.0.0" +turbo-darwin-64@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-2.2.3.tgz#f0ced75ed031091e52851cbe8bb05d21a161a22b" + integrity sha512-Rcm10CuMKQGcdIBS3R/9PMeuYnv6beYIHqfZFeKWVYEWH69sauj4INs83zKMTUiZJ3/hWGZ4jet9AOwhsssLyg== + +turbo-darwin-arm64@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-2.2.3.tgz#0b4741383ab5070d8383891a65861a8869cc7202" + integrity sha512-+EIMHkuLFqUdJYsA3roj66t9+9IciCajgj+DVek+QezEdOJKcRxlvDOS2BUaeN8kEzVSsNiAGnoysFWYw4K0HA== + +turbo-linux-64@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-2.2.3.tgz#2b339db50c12bc52ce99139c156d5555717a209d" + integrity sha512-UBhJCYnqtaeOBQLmLo8BAisWbc9v9daL9G8upLR+XGj6vuN/Nz6qUAhverN4Pyej1g4Nt1BhROnj6GLOPYyqxQ== + +turbo-linux-arm64@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-2.2.3.tgz#a4daf6e0872a4e2652e2d05d68ad18cee5b10e94" + integrity sha512-hJYT9dN06XCQ3jBka/EWvvAETnHRs3xuO/rb5bESmDfG+d9yQjeTMlhRXKrr4eyIMt6cLDt1LBfyi+6CQ+VAwQ== + turbo-stream@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/turbo-stream/-/turbo-stream-2.4.0.tgz#1e4fca6725e90fa14ac4adb782f2d3759a5695f0" integrity sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g== -twoslash-protocol@0.2.9: - version "0.2.9" - resolved "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.9.tgz" - integrity sha512-uKQl8UboT6JU4VAtYaSI3DbNtgaNhFaTpCSMy/n3tRl5lMlMhrjiuNKdqx15xjcviconuGJ9oObkz1h9zJFrJg== +turbo-windows-64@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-2.2.3.tgz#d44b3385948bd0f2ef5c2d53391f142bdd467b18" + integrity sha512-NPrjacrZypMBF31b4HE4ROg4P3nhMBPHKS5WTpMwf7wydZ8uvdEHpESVNMOtqhlp857zbnKYgP+yJF30H3N2dQ== -twoslash@^0.2.9, twoslash@~0.2.9: - version "0.2.9" - resolved "https://registry.npmjs.org/twoslash/-/twoslash-0.2.9.tgz" - integrity sha512-oj7XY6h8E9nTZBmfRE1gpsSSUqAQo5kcIpFkXyQPp8UCsyCQsUlP2bJ2s32o02c1n5+xl4h9rcCsQ1F97Z6LZg== - dependencies: - "@typescript/vfs" "1.5.0" - twoslash-protocol "0.2.9" +turbo-windows-arm64@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-2.2.3.tgz#d0625ec53f467013a6f259f87f7fc4ae8670aaa4" + integrity sha512-fnNrYBCqn6zgKPKLHu4sOkihBI/+0oYFr075duRxqUZ+1aLWTAGfHZLgjVeLh3zR37CVzuerGIPWAEkNhkWEIw== + +turbo@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/turbo/-/turbo-2.2.3.tgz#0f45612d62526c98c75da0682aa8c26b902b5e07" + integrity sha512-5lDvSqIxCYJ/BAd6rQGK/AzFRhBkbu4JHVMLmGh/hCb7U3CqSnr5Tjwfy9vc+/5wG2DJ6wttgAaA7MoCgvBKZQ== + optionalDependencies: + turbo-darwin-64 "2.2.3" + turbo-darwin-arm64 "2.2.3" + turbo-linux-64 "2.2.3" + turbo-linux-arm64 "2.2.3" + turbo-windows-64 "2.2.3" + turbo-windows-arm64 "2.2.3" + +twoslash-protocol@0.2.12: + version "0.2.12" + resolved "https://registry.yarnpkg.com/twoslash-protocol/-/twoslash-protocol-0.2.12.tgz#4c22fc287bc0fc32eec8e7faa6092b0dc5cc4ecb" + integrity sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg== + +twoslash@^0.2.12, twoslash@~0.2.12: + version "0.2.12" + resolved "https://registry.yarnpkg.com/twoslash/-/twoslash-0.2.12.tgz#46b11fb23ff3d950264ca32877576e2c2b4e997e" + integrity sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw== + dependencies: + "@typescript/vfs" "^1.6.0" + twoslash-protocol "0.2.12" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -21457,10 +21840,10 @@ typescript@4.9.5: resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== -ua-parser-js@^1.0.36: - version "1.0.37" - resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz" - integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== +ua-parser-js@^1.0.39: + version "1.0.39" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.39.tgz#bfc07f361549bf249bd8f4589a4cccec18fd2018" + integrity sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw== ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2: version "1.3.2" @@ -22105,14 +22488,14 @@ vite@^5.0.0, vite@^5.0.11: optionalDependencies: fsevents "~2.3.3" -vite@^5.3.3: - version "5.4.1" - resolved "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz" - integrity sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA== +vite@^5.4.8: + version "5.4.10" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.10.tgz#d358a7bd8beda6cf0f3b7a450a8c7693a4f80c18" + integrity sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ== dependencies: esbuild "^0.21.3" - postcss "^8.4.41" - rollup "^4.13.0" + postcss "^8.4.43" + rollup "^4.20.0" optionalDependencies: fsevents "~2.3.3" @@ -22141,54 +22524,54 @@ vitest@^2.0.4: vite-node "2.0.4" why-is-node-running "^2.3.0" -vocs@^1.0.0-alpha.55: - version "1.0.0-alpha.55" - resolved "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.55.tgz" - integrity sha512-RT456+7uG4qNz7CwIb7xxhQAt/wJwjUzoi3fNgzfR62v4j/1gTdgn+yqD5vqv7RzJh7j4Iw3R9GF6jriAfiwng== +vocs@^1.0.0-alpha.62: + version "1.0.0-alpha.62" + resolved "https://registry.yarnpkg.com/vocs/-/vocs-1.0.0-alpha.62.tgz#4090600f073f512425dfdddd2f330723d37f15d0" + integrity sha512-WidbX8M33lPlDjOvvjQyZaYGtn3hRZ3iViFuwvlmgAqCX1yGXaQs1tLdS1Cy5ki+q0BIUqXvvy8jo9rBQ+fM6w== dependencies: - "@floating-ui/react" "^0.26.6" - "@hono/node-server" "^1.2.3" - "@mdx-js/react" "^3.0.0" - "@mdx-js/rollup" "^3.0.0" - "@noble/hashes" "^1.3.2" + "@floating-ui/react" "^0.26.24" + "@hono/node-server" "^1.13.1" + "@mdx-js/react" "^3.0.1" + "@mdx-js/rollup" "^3.0.1" + "@noble/hashes" "^1.5.0" "@radix-ui/colors" "^3.0.0" - "@radix-ui/react-accordion" "^1.1.2" - "@radix-ui/react-dialog" "^1.0.5" + "@radix-ui/react-accordion" "^1.2.1" + "@radix-ui/react-dialog" "^1.1.2" "@radix-ui/react-icons" "^1.3.0" - "@radix-ui/react-label" "^2.0.2" - "@radix-ui/react-navigation-menu" "^1.1.4" - "@radix-ui/react-popover" "^1.0.7" - "@radix-ui/react-tabs" "^1.0.4" - "@shikijs/rehype" "^1.10.3" - "@shikijs/transformers" "^1.10.3" - "@shikijs/twoslash" "^1.10.3" - "@vanilla-extract/css" "^1.14.0" - "@vanilla-extract/dynamic" "^2.1.0" - "@vanilla-extract/vite-plugin" "^3.9.4" + "@radix-ui/react-label" "^2.1.0" + "@radix-ui/react-navigation-menu" "^1.2.1" + "@radix-ui/react-popover" "^1.1.2" + "@radix-ui/react-tabs" "^1.1.1" + "@shikijs/rehype" "^1.21.0" + "@shikijs/transformers" "^1.21.0" + "@shikijs/twoslash" "^1.21.0" + "@vanilla-extract/css" "^1.16.0" + "@vanilla-extract/dynamic" "^2.1.2" + "@vanilla-extract/vite-plugin" "^3.9.5" "@vitejs/plugin-react" "4.3.1" - autoprefixer "^10.4.16" + autoprefixer "^10.4.20" cac "^6.7.14" - chroma-js "^2.4.2" - clsx "^2.0.0" + chroma-js "^2.6.0" + clsx "^2.1.1" compression "^1.7.4" create-vocs "^1.0.0-alpha.4" cross-spawn "^7.0.3" - fs-extra "^11.1.1" + fs-extra "^11.2.0" globby "^13.2.2" hastscript "^8.0.0" - hono "^3.10.2" + hono "^3.12.12" mark.js "^8.11.1" mdast-util-directive "^3.0.0" - mdast-util-from-markdown "^2.0.0" + mdast-util-from-markdown "^2.0.1" mdast-util-gfm "^3.0.0" - mdast-util-to-hast "^13.0.2" - minimatch "^9.0.3" + mdast-util-to-hast "^13.2.0" + minimatch "^9.0.5" minisearch "^6.3.0" ora "^7.0.1" p-limit "^5.0.0" - postcss "^8.4.31" + postcss "^8.4.47" react-helmet "^6.1.0" - react-intersection-observer "^9.5.3" + react-intersection-observer "^9.13.1" react-router-dom "^6.20.0" rehype-autolink-headings "^7.1.0" rehype-class-names "^1.0.14" @@ -22198,15 +22581,15 @@ vocs@^1.0.0-alpha.55: remark-gfm "^4.0.0" remark-mdx-frontmatter "^4.0.0" remark-parse "^11.0.0" - serve-static "^1.15.0" - shiki "^1.10.3" - tailwindcss "^3.3.3" + serve-static "^1.16.2" + shiki "^1.21.0" + tailwindcss "^3.4.13" toml "^3.0.0" - twoslash "~0.2.9" - ua-parser-js "^1.0.36" - unified "^11.0.4" + twoslash "~0.2.12" + ua-parser-js "^1.0.39" + unified "^11.0.5" unist-util-visit "^5.0.0" - vite "^5.3.3" + vite "^5.4.8" w3c-xmlserializer@^5.0.0: version "5.0.0" @@ -22811,7 +23194,7 @@ zustand@^5.0.0-rc.2: resolved "https://registry.yarnpkg.com/zustand/-/zustand-5.0.0-rc.2.tgz#d28d95ffb6f0b20cadbaea39210f18446a5bf989" integrity sha512-o2Nwuvnk8vQBX7CcHL8WfFkZNJdxB/VKeWw0tNglw8p4cypsZ3tRT7rTRTDNeUPFS0qaMBRSKe+fVwL5xpcE3A== -zwitch@^2.0.0: +zwitch@^2.0.0, zwitch@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz" integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==