{"version":3,"sources":["../src/client.ts","../src/utils/gas.ts","../src/utils/networks.ts"],"sourcesContent":["import {\n  createPublicClient,\n  createWalletClient,\n  http,\n  type Address,\n  type Chain,\n} from \"viem\";\nimport {\n  createBundlerClient,\n  createPaymasterClient,\n  entryPoint07Address,\n  entryPoint08Address,\n  sendUserOperation as sendUserOperationViem,\n} from \"viem/account-abstraction\";\nimport {\n  toSimpleSmartAccount,\n  toSafeSmartAccount,\n} from \"permissionless/accounts\";\nimport { toAccount } from \"viem/accounts\";\nimport { createSmartAccountClient } from \"permissionless\";\n\nimport {\n  ShBundlerClientOptions,\n  ShBundlerFromSmartAccountOptions,\n  ShBundlerSDK,\n  SendUserOperationParams,\n} from \"./types\";\n\nimport { getUserOperationGasPrice } from \"./utils/gas\";\nimport { fetchNetworkDefaults } from \"./utils/networks\";\n\ntype SmartAccountInstance = Awaited<ReturnType<typeof toSimpleSmartAccount>> |\n                            Awaited<ReturnType<typeof toSafeSmartAccount>>;\n\nasync function buildShBundlerSDK({\n  smartAccount,\n  rpcUrl,\n  chain,\n  bundlerUrl,\n  paymasterUrl,\n  paymasterAddress,\n}: {\n  smartAccount: SmartAccountInstance;\n  rpcUrl: string;\n  chain: Chain;\n  bundlerUrl: string;\n  paymasterUrl: string;\n  paymasterAddress: Address;\n}): Promise<ShBundlerSDK> {\n  const publicClient = createPublicClient({\n    transport: http(rpcUrl),\n    chain,\n  });\n\n  const walletClient = createWalletClient({\n    transport: http(rpcUrl),\n    account: smartAccount,\n  });\n\n  const paymasterClient = createPaymasterClient({\n    transport: http(paymasterUrl),\n  });\n\n  let bundlerClient: ReturnType<typeof createBundlerClient>;\n\n  bundlerClient = createBundlerClient({\n    transport: http(bundlerUrl),\n    name: \"shBundler\",\n    account: smartAccount,\n    client: publicClient,\n    paymaster: paymasterClient,\n    userOperation: {\n      estimateFeesPerGas: async () => getUserOperationGasPrice(bundlerClient),\n    },\n  });\n\n  const sendUserOperation = async ({\n    to,\n    data,\n    chain,\n    paymasterContext,\n  }: SendUserOperationParams) => {\n    const dynamicSmartAccountClient = createSmartAccountClient({\n      client: publicClient,\n      chain,\n      bundlerTransport: http(bundlerUrl),\n      account: smartAccount,\n      userOperation: {\n        estimateFeesPerGas: async () => getUserOperationGasPrice(bundlerClient),\n      },\n      paymaster: paymasterClient,\n      paymasterContext,\n    });\n\n    return sendUserOperationViem(dynamicSmartAccountClient, {\n      account: smartAccount,\n      calls: [{ to, data }],\n    });\n  };\n\n  return {\n    publicClient,\n    walletClient,\n    smartAccount,\n    paymasterClient,\n    bundlerClient,\n    sendUserOperation,\n  };\n}\n\nexport async function createShBundlerClient(\n  opts: ShBundlerClientOptions\n): Promise<ShBundlerSDK> {\n  const {\n    signer,\n    rpcUrl,\n    chain,\n    bundlerUrl: inputBundlerUrl,\n    paymasterUrl: inputPaymasterUrl,\n    paymasterAddress: inputPaymasterAddress,\n    entryPointVersion = \"0.8\",\n  } = opts;\n\n  if (!signer || !rpcUrl || !chain) {\n    throw new Error(\"signer, rpcUrl, and chain are required\");\n  }\n\n  const publicClient = createPublicClient({\n    transport: http(rpcUrl),\n    chain,\n  });\n\n  const chainId = await publicClient.getChainId();\n\n  const defaults = (await fetchNetworkDefaults(chainId)) || {};\n  const bundlerUrl = inputBundlerUrl || defaults.bundlerUrl;\n  const paymasterUrl = inputPaymasterUrl || defaults.paymasterUrl;\n  const paymasterAddress = inputPaymasterAddress || defaults.paymasterAddress;\n\n  if (!bundlerUrl || !paymasterUrl || !paymasterAddress) {\n    throw new Error(\"Missing bundlerUrl, paymasterUrl, or paymasterAddress and no defaults found\");\n  }\n\n  const entryPointAddress =\n    entryPointVersion === \"0.7\" ? entryPoint07Address : entryPoint08Address;\n\n  const smartAccountSimple = await toSimpleSmartAccount({\n    client: publicClient,\n    entryPoint: {\n      address: entryPointAddress,\n      version: entryPointVersion,\n    },\n    owner: toAccount(signer),\n  });\n\n  const smartAccountV08MonadTestnet = await toSafeSmartAccount({\n    client: publicClient as any,\n    entryPoint: {\n      address: entryPoint08Address,\n      version: \"0.7\",\n    },\n    owners: [signer as any],\n    version: \"1.4.1\",\n    safe4337ModuleAddress: \"0x02b336F533F2de3F221540eF56583e9cb8E65203\",\n    safeProxyFactoryAddress: \"0xd9d2Ba03a7754250FDD71333F444636471CACBC4\",\n    safeSingletonAddress: \"0x639245e8476E03e789a244f279b5843b9633b2E7\",\n    safeModuleSetupAddress: \"0x2dd68b007B46fBe91B9A7c3EDa5A7a1063cB5b47\",\n    multiSendAddress: \"0x7B21BBDBdE8D01Df591fdc2dc0bE9956Dde1e16C\",\n    multiSendCallOnlyAddress: \"0x32228dDEA8b9A2bd7f2d71A958fF241D79ca5eEC\",\n  });\n\n  const smartAccount: SmartAccountInstance =\n    chainId !== 10143\n      ? smartAccountSimple\n      : entryPointVersion === \"0.7\"\n      ? smartAccountSimple\n      : smartAccountV08MonadTestnet;\n\n  return buildShBundlerSDK({\n    smartAccount,\n    rpcUrl,\n    chain,\n    bundlerUrl,\n    paymasterUrl,\n    paymasterAddress,\n  });\n}\n\nexport async function createShBundlerClientFromSmartAccount(\n  opts: ShBundlerFromSmartAccountOptions\n): Promise<ShBundlerSDK> {\n  const {\n    smartAccount,\n    rpcUrl,\n    chain,\n    bundlerUrl,\n    paymasterUrl,\n    paymasterAddress,\n  } = opts;\n\n  if (!rpcUrl || !chain || !bundlerUrl || !paymasterUrl || !paymasterAddress) {\n    throw new Error(\"All fields are required to use a precomputed smartAccount\");\n  }\n\n  return buildShBundlerSDK({\n    smartAccount,\n    rpcUrl,\n    chain,\n    bundlerUrl,\n    paymasterUrl,\n    paymasterAddress,\n  });\n}\n","import { BundlerClient } from \"viem/account-abstraction\";\nimport { GasPriceResult } from \"../types\";\nimport { hexToBigInt } from \"viem\";\n\nexport async function getUserOperationGasPrice(\n  bundlerClient: BundlerClient\n): Promise<GasPriceResult> {\n  const resultEncoded = await bundlerClient.request<any>({\n    method: \"gas_getUserOperationGasPrice\",\n    params: [],\n  });\n\n  return {\n    maxFeePerGas: hexToBigInt(resultEncoded.standard.maxFeePerGas),\n    maxPriorityFeePerGas: hexToBigInt(resultEncoded.standard.maxPriorityFeePerGas),\n  };\n}\n","export async function fetchNetworkDefaults(chainId: number) {\n  const url = \"https://raw.githubusercontent.com/FastLane-Labs/shbundler-sdk/main/configs/networks.json\";\n  const res = await fetch(url);\n  const data = await res.json();\n\n  return data[chainId] || null;\n}"],"mappings":"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","names":["chain"]}