{"version":3,"file":"addWaasEvmExtension-BPVt4XeG.cjs","names":["MFAAction","MFAAction","mapNetworkDataToViemChain","chain: Chain","WalletProviderEnum","DYNAMIC_WAAS_METADATA","createViemWalletClient: WaasEvmWalletProvider['createViemWalletClient']","getActiveNetworkId: WaasEvmWalletProvider['getActiveNetworkId']","getConnectedAddresses: WaasEvmWalletProvider['getConnectedAddresses']","signMessage: WaasEvmWalletProvider['signMessage']","switchActiveNetwork: WaasEvmWalletProvider['switchActiveNetwork']","terminate: typeof waasProvider.terminate","evmConfirmTransaction","evmExecuteSwapTransaction","evmTransferAmount","WalletProviderPriority"],"sources":["../src/waas/utils/createWalletProviderForWaasEvm/signAuthorization/signAuthorization.ts","../src/waas/utils/createWalletProviderForWaasEvm/signTypedData/signTypedData.ts","../src/waas/utils/createWalletProviderForWaasEvm/createViemWalletClientForWaas/createViemWalletClientForWaas.ts","../src/waas/utils/createWalletProviderForWaasEvm/createWalletProviderForWaasEvm.ts","../src/waas/addWaasEvmExtension/addWaasEvmExtension.ts"],"sourcesContent":["import {\n  type DynamicClient,\n  MFAAction,\n  type WalletAccount,\n} from '@dynamic-labs-sdk/client';\nimport {\n  assertDefined,\n  consumeMfaTokenIfRequiredForAction,\n  getSignedSessionId,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WaasProvider } from '@dynamic-labs-sdk/client/waas/core';\nimport type { Hex } from 'viem';\nimport { parseSignature } from 'viem';\nimport type { SignAuthorizationReturnType } from 'viem/accounts';\nimport { hashAuthorization } from 'viem/utils';\n\nimport type { SignAuthorizationParametersWithoutPrivateKey } from '../../../../viem/viem.types';\n\ntype SignAuthorizationParams = {\n  parameters: SignAuthorizationParametersWithoutPrivateKey;\n  password?: string;\n  waasProvider: WaasProvider;\n  walletAccount: WalletAccount;\n};\n\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const signAuthorization = async (\n  {\n    parameters,\n    walletAccount,\n    waasProvider,\n    password,\n  }: SignAuthorizationParams,\n  dynamicClient: DynamicClient\n): Promise<SignAuthorizationReturnType> => {\n  const { address: contractAddress, chainId, nonce } = parameters;\n\n  assertDefined(contractAddress, 'Contract address not found');\n\n  const { signature: signedSessionId } = await getSignedSessionId(\n    dynamicClient\n  );\n\n  const mfaToken = await consumeMfaTokenIfRequiredForAction(\n    { mfaAction: MFAAction.WalletWaasSign },\n    dynamicClient\n  );\n\n  const waasClient = await waasProvider.getWaasClient();\n\n  const authorization = {\n    address: contractAddress,\n    chainId,\n    nonce,\n  };\n\n  const signature = await waasClient.signRawMessage({\n    accountAddress: walletAccount.address,\n    authToken: dynamicClient.token ?? undefined,\n    context: { eip7702Auth: authorization },\n    message: hashAuthorization(authorization).slice(2),\n    mfaToken,\n    password,\n    signedSessionId,\n  });\n\n  const parsedSignature = parseSignature(signature as Hex);\n\n  return {\n    address: contractAddress,\n    chainId,\n    nonce,\n    r: parsedSignature.r,\n    s: parsedSignature.s,\n    v: parsedSignature.v,\n    yParity: parsedSignature.yParity,\n  };\n};\n","import {\n  type DynamicClient,\n  type WalletAccount,\n} from '@dynamic-labs-sdk/client';\nimport {\n  consumeMfaTokenIfRequiredForAction,\n  getSignedSessionId,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WaasProvider } from '@dynamic-labs-sdk/client/waas/core';\nimport { MFAAction } from '@dynamic-labs/sdk-api-core';\nimport type { TypedData } from 'viem';\nimport { stringify } from 'viem';\n\ntype SignTypedDataParams = {\n  typedData: TypedData | { [key: string]: unknown };\n  waasProvider: WaasProvider;\n  walletAccount: WalletAccount;\n};\n\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const signTypedData = async (\n  { typedData, walletAccount, waasProvider }: SignTypedDataParams,\n  dynamicClient: DynamicClient\n) => {\n  const { signature: signedSessionId } = await getSignedSessionId(\n    dynamicClient\n  );\n\n  const mfaToken = await consumeMfaTokenIfRequiredForAction(\n    { mfaAction: MFAAction.WalletWaasSign },\n    dynamicClient\n  );\n\n  const waasClient = await waasProvider.getWaasClient();\n\n  // serialize bigint values\n  const stringifiedTypedData = stringify(typedData);\n  const serializableTypedData = JSON.parse(stringifiedTypedData) as string;\n\n  return waasClient.signTypedData({\n    accountAddress: walletAccount.address,\n    authToken: dynamicClient.token ?? undefined,\n    mfaToken,\n    signedSessionId,\n    typedData: serializableTypedData,\n  });\n};\n","import {\n  type DynamicClient,\n  type WalletAccount,\n  getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport type { WaasProvider } from '@dynamic-labs-sdk/client/waas/core';\nimport type {\n  Account,\n  Chain,\n  Hex,\n  HttpTransportConfig,\n  TransactionSerializable,\n  Transport,\n  TypedData,\n  WalletClient,\n  WalletClientConfig,\n} from 'viem';\nimport { createWalletClient, http, serializeTransaction } from 'viem';\nimport type { SignAuthorizationReturnType } from 'viem/accounts';\nimport { toAccount } from 'viem/accounts';\n\nimport { mapNetworkDataToViemChain } from '../../../../viem/utils/mapNetworkDataToViemChain';\nimport type { SignAuthorizationParametersWithoutPrivateKey } from '../../../../viem/viem.types';\nimport { signAuthorization } from '../signAuthorization';\nimport { signTypedData } from '../signTypedData';\n\ntype CreateViemWalletClientForWaasParams = {\n  httpTransportConfig?: HttpTransportConfig;\n  viemWalletClientConfig?: Omit<\n    WalletClientConfig,\n    'account' | 'chain' | 'transport'\n  >;\n  waasProvider: WaasProvider;\n  walletAccount: WalletAccount;\n};\n\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const createViemWalletClientForWaas = async (\n  {\n    waasProvider,\n    walletAccount,\n    httpTransportConfig,\n    viemWalletClientConfig,\n  }: CreateViemWalletClientForWaasParams,\n  dynamicClient: DynamicClient\n): Promise<WalletClient<Transport, Chain, Account>> => {\n  const { networkData: activeNetworkData } = await getActiveNetworkData(\n    { walletAccount },\n    dynamicClient\n  );\n\n  assertDefined(\n    activeNetworkData,\n    `No network data found for wallet account ${walletAccount.address}`\n  );\n\n  return createWalletClient({\n    account: toAccount({\n      address: walletAccount.address as Hex,\n      async signAuthorization(\n        parameters: SignAuthorizationParametersWithoutPrivateKey\n      ): Promise<SignAuthorizationReturnType> {\n        const signature = await signAuthorization(\n          {\n            parameters,\n            waasProvider,\n            walletAccount,\n          },\n          dynamicClient\n        );\n\n        return signature;\n      },\n      signMessage: async ({ message }) => {\n        const { signature } = await waasProvider.signMessage({\n          message: message as string,\n          walletAccount,\n        });\n\n        return signature as Hex;\n      },\n      signTransaction: async (\n        transaction: TransactionSerializable\n      ): Promise<Hex> => {\n        const { signature } = await waasProvider.signSerializedTransaction({\n          serializedTransaction: serializeTransaction(transaction),\n          walletAccount,\n        });\n\n        return signature as Hex;\n      },\n      // eslint-disable-next-line custom-rules/require-single-object-param\n      signTypedData: async (\n        typedData: TypedData | { [key: string]: unknown }\n      ): Promise<Hex> => {\n        const signature = await signTypedData(\n          {\n            typedData,\n            waasProvider,\n            walletAccount,\n          },\n          dynamicClient\n        );\n\n        return signature as Hex;\n      },\n    }),\n    chain: mapNetworkDataToViemChain(activeNetworkData),\n    transport: http(activeNetworkData.rpcUrls.http[0], httpTransportConfig),\n    ...viemWalletClientConfig,\n  });\n};\n","import { type Chain, type DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n  assertDefined,\n  formatWalletProviderGroupKey,\n  formatWalletProviderKey,\n  getActiveNetworkIdFromLastKnownRegistry,\n  switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n  DYNAMIC_WAAS_METADATA,\n  createWaasProvider,\n  getAllUserWaasAddressesForChain,\n} from '@dynamic-labs-sdk/client/waas/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport { evmConfirmTransaction } from '../../../utils/evmConfirmTransaction';\nimport { evmExecuteSwapTransaction } from '../../../utils/evmExecuteSwapTransaction';\nimport { evmTransferAmount } from '../../../utils/evmTransferAmount';\nimport type { WaasEvmWalletProvider } from '../../WaasEvmWalletProvider.types';\nimport { createViemWalletClientForWaas } from './createViemWalletClientForWaas';\n\ntype CreateWalletProviderForWaasEvmParams = {\n  dynamicClient: DynamicClient;\n};\n\n/** @not-instrumented */\nexport const createWalletProviderForWaasEvm = ({\n  dynamicClient,\n}: CreateWalletProviderForWaasEvmParams): WaasEvmWalletProvider => {\n  const chain: Chain = 'EVM';\n\n  const walletProviderType = WalletProviderEnum.EmbeddedWallet;\n\n  const key = formatWalletProviderKey({\n    chain,\n    displayName: DYNAMIC_WAAS_METADATA.displayName,\n    walletProviderType,\n  });\n\n  const waasProvider = createWaasProvider({\n    chain,\n    sdkClient: dynamicClient,\n  });\n\n  const createViemWalletClient: WaasEvmWalletProvider['createViemWalletClient'] =\n    async ({ walletAccount, httpTransportConfig, viemWalletClientConfig }) => {\n      return createViemWalletClientForWaas(\n        {\n          httpTransportConfig,\n          viemWalletClientConfig,\n          waasProvider,\n          walletAccount,\n        },\n        dynamicClient\n      );\n    };\n\n  const getActiveNetworkId: WaasEvmWalletProvider['getActiveNetworkId'] =\n    async () =>\n      getActiveNetworkIdFromLastKnownRegistry({\n        client: dynamicClient,\n        walletProviderKey: key,\n      });\n\n  const getConnectedAddresses: WaasEvmWalletProvider['getConnectedAddresses'] =\n    async () => {\n      const waasEvmAddresses = getAllUserWaasAddressesForChain(\n        { chain },\n        dynamicClient\n      );\n\n      return {\n        addresses: waasEvmAddresses,\n      };\n    };\n\n  const signMessage: WaasEvmWalletProvider['signMessage'] = async ({\n    message,\n    walletAccount,\n  }) => {\n    assertDefined(walletAccount, 'Wallet account is required');\n\n    return waasProvider.signMessage({\n      message,\n      walletAccount,\n    });\n  };\n\n  const switchActiveNetwork: WaasEvmWalletProvider['switchActiveNetwork'] =\n    async ({ networkId }) =>\n      switchActiveNetworkInLastKnownRegistry({\n        client: dynamicClient,\n        networkId,\n        walletProviderKey: key,\n      });\n\n  const terminate: typeof waasProvider.terminate = async (args) => {\n    return waasProvider.terminate(args);\n  };\n\n  return {\n    ...waasProvider,\n    chain,\n    confirmTransaction: (args) => evmConfirmTransaction(args, dynamicClient),\n    createViemWalletClient,\n    executeSwapTransaction: (args) =>\n      evmExecuteSwapTransaction(args, dynamicClient),\n    getActiveNetworkId,\n    getConnectedAddresses,\n    groupKey: formatWalletProviderGroupKey(DYNAMIC_WAAS_METADATA.displayName),\n    key,\n    metadata: {\n      displayName: DYNAMIC_WAAS_METADATA.displayName,\n      icon: DYNAMIC_WAAS_METADATA.icon,\n    },\n    signMessage,\n    switchActiveNetwork,\n    terminate,\n    transferAmount: (args) => evmTransferAmount(args, dynamicClient),\n    walletProviderType,\n  };\n};\n","import {\n  WalletProviderPriority,\n  getDefaultClient,\n  getWalletProviderRegistry,\n  hasExtension,\n  registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createWalletProviderForWaasEvm } from '../utils/createWalletProviderForWaasEvm';\n\nexport const WAAS_EVM_EXTENSION_KEY = 'waasEvm';\n\n/**\n * Adds the Dynamic WaaS (Wallet as a Service) EVM extension to the Dynamic client.\n *\n * This extension enables embedded wallet functionality for EVM-compatible blockchains,\n * allowing users to have wallets managed by Dynamic's infrastructure.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n  * @not-instrumented\n */\nexport const addWaasEvmExtension = (client = getDefaultClient()): void => {\n  if (hasExtension({ extensionKey: WAAS_EVM_EXTENSION_KEY }, client)) {\n    return;\n  }\n\n  registerExtension({ extensionKey: WAAS_EVM_EXTENSION_KEY }, client);\n  registerEvmNetworkProviderBuilder(client);\n\n  const walletProviderRegistry = getWalletProviderRegistry(client);\n\n  const walletProvider = createWalletProviderForWaasEvm({\n    dynamicClient: client,\n  });\n\n  walletProviderRegistry.register({\n    priority: WalletProviderPriority.WALLET_SDK,\n    walletProvider,\n  });\n};\n"],"mappings":";;;;;;;;;;;;AA2BA,MAAa,oBAAoB,OAC/B,EACE,YACA,eACA,cACA,YAEF,kBACyC;CACzC,MAAM,EAAE,SAAS,iBAAiB,SAAS,UAAU;AAErD,kDAAc,iBAAiB,6BAA6B;CAE5D,MAAM,EAAE,WAAW,oBAAoB,4DACrC,cACD;CAED,MAAM,WAAW,4EACf,EAAE,WAAWA,mCAAU,gBAAgB,EACvC,cACD;CAED,MAAM,aAAa,MAAM,aAAa,eAAe;CAErD,MAAM,gBAAgB;EACpB,SAAS;EACT;EACA;EACD;CAYD,MAAM,2CAVY,MAAM,WAAW,eAAe;EAChD,gBAAgB,cAAc;EAC9B,WAAW,cAAc,SAAS;EAClC,SAAS,EAAE,aAAa,eAAe;EACvC,2CAA2B,cAAc,CAAC,MAAM,EAAE;EAClD;EACA;EACA;EACD,CAAC,CAEsD;AAExD,QAAO;EACL,SAAS;EACT;EACA;EACA,GAAG,gBAAgB;EACnB,GAAG,gBAAgB;EACnB,GAAG,gBAAgB;EACnB,SAAS,gBAAgB;EAC1B;;;;;;ACxDH,MAAa,gBAAgB,OAC3B,EAAE,WAAW,eAAe,gBAC5B,kBACG;CACH,MAAM,EAAE,WAAW,oBAAoB,4DACrC,cACD;CAED,MAAM,WAAW,4EACf,EAAE,WAAWC,qCAAU,gBAAgB,EACvC,cACD;CAED,MAAM,aAAa,MAAM,aAAa,eAAe;CAGrD,MAAM,2CAAiC,UAAU;CACjD,MAAM,wBAAwB,KAAK,MAAM,qBAAqB;AAE9D,QAAO,WAAW,cAAc;EAC9B,gBAAgB,cAAc;EAC9B,WAAW,cAAc,SAAS;EAClC;EACA;EACA,WAAW;EACZ,CAAC;;;;;;ACPJ,MAAa,gCAAgC,OAC3C,EACE,cACA,eACA,qBACA,0BAEF,kBACqD;CACrD,MAAM,EAAE,aAAa,sBAAsB,yDACzC,EAAE,eAAe,EACjB,cACD;AAED,kDACE,mBACA,4CAA4C,cAAc,UAC3D;AAED,qCAA0B;EACxB,sCAAmB;GACjB,SAAS,cAAc;GACvB,MAAM,kBACJ,YACsC;AAUtC,WATkB,MAAM,kBACtB;KACE;KACA;KACA;KACD,EACD,cACD;;GAIH,aAAa,OAAO,EAAE,cAAc;IAClC,MAAM,EAAE,cAAc,MAAM,aAAa,YAAY;KAC1C;KACT;KACD,CAAC;AAEF,WAAO;;GAET,iBAAiB,OACf,gBACiB;IACjB,MAAM,EAAE,cAAc,MAAM,aAAa,0BAA0B;KACjE,sDAA4C,YAAY;KACxD;KACD,CAAC;AAEF,WAAO;;GAGT,eAAe,OACb,cACiB;AAUjB,WATkB,MAAM,cACtB;KACE;KACA;KACA;KACD,EACD,cACD;;GAIJ,CAAC;EACF,OAAOC,qEAA0B,kBAAkB;EACnD,0BAAgB,kBAAkB,QAAQ,KAAK,IAAI,oBAAoB;EACvE,GAAG;EACJ,CAAC;;;;;;ACtFJ,MAAa,kCAAkC,EAC7C,oBACiE;CACjE,MAAMC,QAAe;CAErB,MAAM,qBAAqBC,8CAAmB;CAE9C,MAAM,iEAA8B;EAClC;EACA,aAAaC,yDAAsB;EACnC;EACD,CAAC;CAEF,MAAM,0EAAkC;EACtC;EACA,WAAW;EACZ,CAAC;CAEF,MAAMC,yBACJ,OAAO,EAAE,eAAe,qBAAqB,6BAA6B;AACxE,SAAO,8BACL;GACE;GACA;GACA;GACA;GACD,EACD,cACD;;CAGL,MAAMC,qBACJ,uFAC0C;EACtC,QAAQ;EACR,mBAAmB;EACpB,CAAC;CAEN,MAAMC,wBACJ,YAAY;AAMV,SAAO,EACL,mFALA,EAAE,OAAO,EACT,cACD,EAIA;;CAGL,MAAMC,cAAoD,OAAO,EAC/D,SACA,oBACI;AACJ,mDAAc,eAAe,6BAA6B;AAE1D,SAAO,aAAa,YAAY;GAC9B;GACA;GACD,CAAC;;CAGJ,MAAMC,sBACJ,OAAO,EAAE,0FACgC;EACrC,QAAQ;EACR;EACA,mBAAmB;EACpB,CAAC;CAEN,MAAMC,YAA2C,OAAO,SAAS;AAC/D,SAAO,aAAa,UAAU,KAAK;;AAGrC,QAAO;EACL,GAAG;EACH;EACA,qBAAqB,SAASC,gDAAsB,MAAM,cAAc;EACxE;EACA,yBAAyB,SACvBC,oDAA0B,MAAM,cAAc;EAChD;EACA;EACA,0EAAuCR,yDAAsB,YAAY;EACzE;EACA,UAAU;GACR,aAAaA,yDAAsB;GACnC,MAAMA,yDAAsB;GAC7B;EACD;EACA;EACA;EACA,iBAAiB,SAASS,4CAAkB,MAAM,cAAc;EAChE;EACD;;;;;AC7GH,MAAa,yBAAyB;;;;;;;;;;AAWtC,MAAa,uBAAuB,8DAA2B,KAAW;AACxE,qDAAiB,EAAE,cAAc,wBAAwB,EAAE,OAAO,CAChE;AAGF,sDAAkB,EAAE,cAAc,wBAAwB,EAAE,OAAO;AACnE,6DAAkC,OAAO;CAEzC,MAAM,sFAAmD,OAAO;CAEhE,MAAM,iBAAiB,+BAA+B,EACpD,eAAe,QAChB,CAAC;AAEF,wBAAuB,SAAS;EAC9B,UAAUC,qDAAuB;EACjC;EACD,CAAC"}