{"version":3,"sources":["/Users/andygmove/Downloads/repos/movement-wallet-adapter/packages/wallet-adapter-core/dist/index.mjs","../src/version.ts","../src/ga/index.ts"],"names":[],"mappings":"","sourcesContent":["// src/version.ts\nvar WALLET_ADAPTER_CORE_VERSION = \"7.10.0\";\n\n// src/WalletCore.ts\nimport EventEmitter from \"eventemitter3\";\nimport {\n  AccountAddress,\n  Movement as Movement2,\n  MovementConfig as MovementConfig2,\n  Network as Network2,\n  NetworkToChainId\n} from \"@moveindustries/ts-sdk\";\nimport {\n  getMovementWallets,\n  isWalletWithRequiredFeatureSet,\n  UserResponseStatus\n} from \"@moveindustries/wallet-standard\";\n\n// src/ga/index.ts\nvar GA4 = class {\n  constructor() {\n    this.movementGAID = true;\n    this.injectGA(this.movementGAID);\n  }\n  gtag(a, b, c) {\n    let dataLayer = window.dataLayer || [];\n    dataLayer.push(arguments);\n  }\n  injectGA(gaID) {\n    if (typeof window === \"undefined\") return;\n    if (!gaID) return;\n    const head = document.getElementsByTagName(\"head\")[0];\n    var myScript = document.createElement(\"script\");\n    myScript.setAttribute(\n      \"src\",\n      `https://www.googletagmanager.com/gtag/js?id=${gaID}`\n    );\n    const that = this;\n    myScript.onload = function() {\n      that.gtag(\"js\", /* @__PURE__ */ new Date());\n      that.gtag(\"config\", `${gaID}`, {\n        send_page_view: false\n      });\n    };\n    head.insertBefore(myScript, head.children[1]);\n  }\n};\n\n// src/error/index.ts\nvar WalletError = class extends Error {\n  constructor(message, error) {\n    super(message);\n    this.error = error;\n  }\n};\nvar WalletNotSelectedError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletNotSelectedError\";\n  }\n};\nvar WalletNotReadyError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletNotReadyError\";\n  }\n};\nvar WalletConnectionError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletConnectionError\";\n  }\n};\nvar WalletDisconnectionError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletDisconnectionError\";\n  }\n};\nvar WalletAccountError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletAccountError\";\n  }\n};\nvar WalletGetNetworkError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletGetNetworkError\";\n  }\n};\nvar WalletAccountChangeError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletAccountChangeError\";\n  }\n};\nvar WalletNetworkChangeError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletNetworkChangeError\";\n  }\n};\nvar WalletNotConnectedError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletNotConnectedError\";\n  }\n};\nvar WalletSignMessageError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletSignMessageError\";\n  }\n};\nvar WalletSignMessageAndVerifyError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletSignMessageAndVerifyError\";\n  }\n};\nvar WalletSignAndSubmitMessageError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletSignAndSubmitMessageError\";\n  }\n};\nvar WalletSignTransactionError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletSignTransactionError\";\n  }\n};\nvar WalletNotSupportedMethod = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletNotSupportedMethod\";\n  }\n};\nvar WalletChangeNetworkError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletChangeNetworkError\";\n  }\n};\nvar WalletSubmitTransactionError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletSubmitTransactionError\";\n  }\n};\nvar WalletNotFoundError = class extends WalletError {\n  constructor() {\n    super(...arguments);\n    this.name = \"WalletNotFoundError\";\n  }\n};\n\n// src/constants.ts\nvar WalletReadyState = /* @__PURE__ */ ((WalletReadyState2) => {\n  WalletReadyState2[\"Installed\"] = \"Installed\";\n  WalletReadyState2[\"NotDetected\"] = \"NotDetected\";\n  return WalletReadyState2;\n})(WalletReadyState || {});\nvar NetworkName = /* @__PURE__ */ ((NetworkName2) => {\n  NetworkName2[\"Mainnet\"] = \"mainnet\";\n  NetworkName2[\"Testnet\"] = \"testnet\";\n  NetworkName2[\"Devnet\"] = \"devnet\";\n  return NetworkName2;\n})(NetworkName || {});\nvar ChainIdToMnsSupportedNetworkMap = {\n  \"126\": \"mainnet\",\n  // Movement mainnet\n  \"250\": \"testnet\"\n  // Movement testnet\n};\nvar MOVEMENT_CONNECT_BASE_URL = \"\";\nvar PETRA_WEB_BASE_URL = \"\";\nvar MOVEMENT_CONNECT_ACCOUNT_URL = \"\";\nvar PETRA_WEB_ACCOUNT_URL = \"\";\n\n// src/utils/helpers.ts\nimport {\n  Movement,\n  MovementConfig,\n  Hex,\n  Network,\n  NetworkToNodeAPI\n} from \"@moveindustries/ts-sdk\";\nfunction isMobile() {\n  return /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/i.test(\n    navigator.userAgent\n  );\n}\nfunction isInAppBrowser() {\n  const isIphone = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(\n    navigator.userAgent\n  );\n  const isAndroid = /(Android).*Version\\/[\\d.]+.*Chrome\\/[^\\s]+ Mobile/i.test(\n    navigator.userAgent\n  );\n  return isIphone || isAndroid;\n}\nfunction isRedirectable() {\n  if (typeof navigator === \"undefined\" || !navigator) return false;\n  return isMobile() && !isInAppBrowser();\n}\nfunction generalizedErrorMessage(error) {\n  return typeof error === \"object\" && \"message\" in error ? error.message : error;\n}\nvar getMovementConfig = (networkInfo, dappConfig) => {\n  if (!networkInfo) {\n    throw new Error(\"Undefined network\");\n  }\n  const pluginSettings = {\n    TRANSACTION_SUBMITTER: dappConfig?.transactionSubmitter\n  };\n  if (isMovementNetwork(networkInfo)) {\n    const currentNetwork = convertNetwork(networkInfo);\n    if (isMovementLiveNetwork(currentNetwork)) {\n      const apiKey = dappConfig?.movementApiKeys;\n      return new MovementConfig({\n        network: currentNetwork,\n        clientConfig: { API_KEY: apiKey ? apiKey[currentNetwork] : void 0 },\n        pluginSettings\n      });\n    }\n    return new MovementConfig({\n      network: currentNetwork,\n      pluginSettings\n    });\n  }\n  const knownNetworks = {\n    okx: { url: \"https://wallet.okx.com/fullnode/aptos/discover/rpc\", network: Network.CUSTOM },\n    // Movement networks - for wallets like Nightly that report \"custom\" instead of network name\n    movementTestnet: { url: \"https://testnet.movementnetwork.xyz/v1\", network: Network.TESTNET },\n    movementMainnet: { url: \"https://mainnet.movementnetwork.xyz/v1\", network: Network.MAINNET }\n  };\n  if (networkInfo.url) {\n    const matchedNetwork = Object.values(knownNetworks).find(\n      (n) => networkInfo.url?.startsWith(n.url.replace(\"/v1\", \"\")) || networkInfo.url === n.url\n    );\n    if (matchedNetwork) {\n      return new MovementConfig({\n        network: matchedNetwork.network,\n        fullnode: networkInfo.url,\n        pluginSettings\n      });\n    }\n  }\n  throw new Error(\n    `Invalid network, network ${networkInfo.name} not supported with Movement wallet adapter to prevent user from using an unexpected network.`\n  );\n};\nvar isMovementNetwork = (networkInfo) => {\n  if (!networkInfo) {\n    throw new Error(\"Undefined network\");\n  }\n  return NetworkToNodeAPI[networkInfo.name] !== void 0;\n};\nvar isMovementLiveNetwork = (networkInfo) => {\n  return networkInfo === \"devnet\" || networkInfo === \"testnet\" || networkInfo === \"mainnet\";\n};\nvar fetchDevnetChainId = async () => {\n  const aptos = new Movement();\n  return await aptos.getChainId();\n};\nvar handlePublishPackageTransaction = (transactionInput) => {\n  let metadataBytes = transactionInput.data.functionArguments[0];\n  if (typeof metadataBytes === \"string\") {\n    metadataBytes = Hex.fromHexInput(metadataBytes).toUint8Array();\n  }\n  let byteCode = transactionInput.data.functionArguments[1];\n  if (Array.isArray(byteCode)) {\n    byteCode = byteCode.map((byte) => {\n      if (typeof byte === \"string\") {\n        return Hex.fromHexInput(byte).toUint8Array();\n      }\n      return byte;\n    });\n  } else {\n    throw new WalletSignAndSubmitMessageError(\n      \"The bytecode argument must be an array.\"\n    ).message;\n  }\n  return { metadataBytes, byteCode };\n};\nfunction convertNetwork(networkInfo) {\n  switch (networkInfo?.name) {\n    case \"mainnet\":\n      return Network.MAINNET;\n    case \"testnet\":\n      return Network.TESTNET;\n    case \"devnet\":\n      return Network.DEVNET;\n    case \"local\":\n      return Network.LOCAL;\n    default:\n      throw new Error(\"Invalid Movement network name\");\n  }\n}\n\n// src/utils/localStorage.ts\nvar LOCAL_STORAGE_ITEM_KEY = \"MovementWalletName\";\nfunction setLocalStorage(walletName) {\n  localStorage.setItem(LOCAL_STORAGE_ITEM_KEY, walletName);\n}\nfunction removeLocalStorage() {\n  localStorage.removeItem(LOCAL_STORAGE_ITEM_KEY);\n}\nfunction getLocalStorage() {\n  localStorage.getItem(LOCAL_STORAGE_ITEM_KEY);\n}\n\n// src/utils/walletSelector.ts\nfunction partitionWallets(wallets, partitionFunction = isInstalledOrLoadable) {\n  const defaultWallets = [];\n  const moreWallets = [];\n  for (const wallet of wallets) {\n    if (partitionFunction(wallet)) defaultWallets.push(wallet);\n    else moreWallets.push(wallet);\n  }\n  return { defaultWallets, moreWallets };\n}\nfunction isInstalledOrLoadable(wallet) {\n  return wallet.readyState === \"Installed\" /* Installed */;\n}\nfunction isInstallRequired(wallet) {\n  const isWalletReady = isInstalledOrLoadable(wallet);\n  const isMobile2 = !isWalletReady && isRedirectable();\n  return !isMobile2 && !isWalletReady;\n}\nfunction truncateAddress(address) {\n  if (!address) return;\n  return `${address.slice(0, 6)}...${address.slice(-5)}`;\n}\nfunction isMovementConnectWallet(wallet) {\n  return false;\n}\nfunction isPetraWebWallet(wallet) {\n  return false;\n}\nfunction groupAndSortWallets(wallets, options) {\n  const { defaultWallets, moreWallets } = partitionWallets(wallets);\n  if (options?.sortAvailableWallets) {\n    defaultWallets.sort(options.sortAvailableWallets);\n  }\n  if (options?.sortInstallableWallets) {\n    moreWallets.sort(options.sortInstallableWallets);\n  }\n  return {\n    // TODO: Re-enable when Movement supports social sign-in\n    // These are kept as empty arrays for backwards compatibility with UI packages\n    /** @deprecated Social sign-in disabled - always returns empty array */\n    movementConnectWallets: [],\n    /** @deprecated Social sign-in disabled - always returns empty array */\n    petraWebWallets: [],\n    /** Wallets that are currently installed or loadable. */\n    availableWallets: defaultWallets,\n    /** Wallets that are NOT currently installed or loadable. */\n    installableWallets: moreWallets\n  };\n}\n\n// src/registry.ts\nvar movementStandardSupportedWalletList = [\n  {\n    name: \"OKX Wallet\",\n    url: \"https://chromewebstore.google.com/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge\",\n    icon: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJDSURBVHgB7Zq9jtpAEMfHlhEgQLiioXEkoAGECwoKxMcTRHmC5E3IoyRPkPAEkI7unJYmTgEFTYwA8a3NTKScLnCHN6c9r1e3P2llWQy7M/s1Gv1twCP0ej37dDq9x+Zut1t3t9vZjDEHIiSRSPg4ZpDL5fxkMvn1cDh8m0teleebut1t3t9vZjDEHIiSRSPg4ZpDL5fxkMvn1cDh8m0wmfugfO53OoFQq/NTk1Gv1uwDP0ej77dDq9x+ZpHR/m0wmfugfO53OoFQq/crn8wxfY9EymQyrVCqMfHvScZx1p9ts3pFxXBy/bKlUipGPrVbLuQqAfsCliq3zl0H84zwtjQrOw4Mt1W63P5LvBm2d+Xz+YzqdgkqUy+WgWCy+Mc/nc282m4FqLBYL+3g8fjDxenq72WxANZbLJeA13zDX67UDioL5ybXwafMYu64Ltn3bdDweQ5R97fd7GyhBQMipx4POeEDHIu2LfDdBIGGz+hJ9CQ1ABjoA2egAZPM6AgiCAEQhsi/C4jHyPA/6/f5NG3Ks2+3CYDC4aTccDrn6ojG54MnEvG00GoVmWLIRNZ7wTCwDHYBsdACy0QHIhiuRETxlICWpMMhGZHmqS8qH6JLyGegAZKMDkI0uKf8X4SWlaZo+Pp1bRrwlJU8ZKLIvUjKh0WiQ3sRUbNVq9c5Ebew7KEo2m/1p4jJ4qAmDaqDQBzj5XyiAT4VCQezJigAU+IDU+z8vJFnGWeC+bKQV/5VZ71FV6L7PA3gg3tXrdQ+DgLhC+75Wq3no69P3MC0NFQpx2lL04Ql9gHK1bRDjsSBIvScBnDTk1WrlGIZBorIDEYJj+rhdgnQ67VmWRe0zlplXl81vcyEt0rSoYDUAAAAASUVORK5CYII=\",\n    readyState: \"NotDetected\" /* NotDetected */,\n    isAIP62Standard: true\n  },\n  // {\n  //   name: \"Petra\",\n  //   url: \"https://chromewebstore.google.com/detail/petra-aptos-wallet/ejjladinnckdgjemekebdpeokbikhfci?hl=en\",\n  //   icon: \"data:image/png;base64,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\",\n  //   readyState: WalletReadyState.NotDetected,\n  //   isAIP62Standard: true,\n  //   deeplinkProvider: \"https://petra.app/explore?link=\",\n  // },\n  {\n    name: \"Nightly\",\n    url: \"https://nightly.app/\",\n    icon: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iV2Fyc3R3YV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDg1MS41IDg1MS41IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA4NTEuNSA4NTEuNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzYwNjdGOTt9DQoJLnN0MXtmaWxsOiNGN0Y3Rjc7fQ0KPC9zdHlsZT4NCjxnPg0KCTxnIGlkPSJXYXJzdHdhXzJfMDAwMDAwMTQ2MDk2NTQyNTMxODA5NDY0NjAwMDAwMDg2NDc4NTIwMDIxMTY5MTg2ODhfIj4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTEyNCwwaDYwMy42YzY4LjUsMCwxMjQsNTUuNSwxMjQsMTI0djYwMy42YzAsNjguNS01NS41LDEyNC0xMjQsMTI0SDEyNGMtNjguNSwwLTEyNC01NS41LTEyNC0xMjRWMTI0DQoJCQlDMCw1NS41LDU1LjUsMCwxMjQsMHoiLz4NCgk8L2c+DQoJPGcgaWQ9IldhcnN0d2FfMyI+DQoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02MjMuNSwxNzAuM2MtMzcuNCw1Mi4yLTg0LjIsODguNC0xMzkuNSwxMTIuNmMtMTkuMi01LjMtMzguOS04LTU4LjMtNy44Yy0xOS40LTAuMi0zOS4xLDIuNi01OC4zLDcuOA0KCQkJYy01NS4zLTI0LjMtMTAyLjEtNjAuMy0xMzkuNS0xMTIuNmMtMTEuMywyOC40LTU0LjgsMTI2LjQtMi42LDI2My40YzAsMC0xNi43LDcxLjUsMTQsMTMyLjljMCwwLDQ0LjQtMjAuMSw3OS43LDguMg0KCQkJYzM2LjksMjkuOSwyNS4xLDU4LjcsNTEuMSw4My41YzIyLjQsMjIuOSw1NS43LDIyLjksNTUuNywyMi45czMzLjMsMCw1NS43LTIyLjhjMjYtMjQuNywxNC4zLTUzLjUsNTEuMS04My41DQoJCQljMzUuMi0yOC4zLDc5LjctOC4yLDc5LjctOC4yYzMwLjYtNjEuNCwxNC0xMzIuOSwxNC0xMzIuOUM2NzguMywyOTYuNyw2MzQuOSwxOTguNyw2MjMuNSwxNzAuM3ogTTI1My4xLDQxNC44DQoJCQljLTI4LjQtNTguMy0zNi4yLTEzOC4zLTE4LjMtMjAxLjVjMjMuNyw2MCw1NS45LDg2LjksOTQuMiwxMTUuM0MzMTIuOCwzNjIuMywyODIuMywzOTQuMSwyNTMuMSw0MTQuOHogTTMzNC44LDUxNy41DQoJCQljLTIyLjQtOS45LTI3LjEtMjkuNC0yNy4xLTI5LjRjMzAuNS0xOS4yLDc1LjQtNC41LDc2LjgsNDAuOUMzNjAuOSw1MTQuNywzNTMsNTI1LjQsMzM0LjgsNTE3LjV6IE00MjUuNyw2NzguNw0KCQkJYy0xNiwwLTI5LTExLjUtMjktMjUuNnMxMy0yNS42LDI5LTI1LjZzMjksMTEuNSwyOSwyNS42QzQ1NC43LDY2Ny4zLDQ0MS43LDY3OC43LDQyNS43LDY3OC43eiBNNTE2LjcsNTE3LjUNCgkJCWMtMTguMiw4LTI2LTIuOC00OS43LDExLjVjMS41LTQ1LjQsNDYuMi02MC4xLDc2LjgtNDAuOUM1NDMuOCw0ODgsNTM5LDUwNy42LDUxNi43LDUxNy41eiBNNTk4LjMsNDE0LjgNCgkJCWMtMjkuMS0yMC43LTU5LjctNTIuNC03Ni04Ni4yYzM4LjMtMjguNCw3MC42LTU1LjQsOTQuMi0xMTUuM0M2MzQuNiwyNzYuNSw2MjYuOCwzNTYuNiw1OTguMyw0MTQuOHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==\",\n    readyState: \"NotDetected\" /* NotDetected */,\n    isAIP62Standard: true,\n    deeplinkProvider: \"nightly://v1?network=aptos&url=\"\n  }\n  // TODO: Add Razor wallet when info is available\n  // {\n  //   name: \"Pontem Wallet\",\n  //   url: \"https://pontem.network/pontem-wallet\",\n  //   icon: \"data:image/svg+xml;base64,...\",\n  //   readyState: WalletReadyState.NotDetected,\n  //   isAIP62Standard: true,\n  // },\n  // {\n  //   name: \"Backpack\",\n  //   url: \"https://chromewebstore.google.com/detail/backpack/aflkmfhebedbjioipglgcbcmnbpgliof\",\n  //   icon: \"data:image/svg+xml;base64,...\",\n  //   readyState: WalletReadyState.NotDetected,\n  //   isAIP62Standard: true,\n  //   deeplinkProvider: \"https://backpack.app/ul/v1?url=\",\n  // },\n  // {\n  //   name: \"Bitget Wallet\",\n  //   url: \"https://web3.bitget.com\",\n  //   icon: \"data:image/svg+xml;base64,...\",\n  //   readyState: WalletReadyState.NotDetected,\n  //   isAIP62Standard: true,\n  // },\n  // {\n  //   name: \"Gate Wallet\",\n  //   url: \"https://www.gate.com/zh/web3/\",\n  //   icon: \"data:image/svg+xml;base64,...\",\n  //   readyState: WalletReadyState.NotDetected,\n  //   isAIP62Standard: true,\n  // },\n  // {\n  //   name: 'Cosmostation Wallet',\n  //   url: 'https://www.cosmostation.io/',\n  //   icon: 'data:image/svg+xml;base64,...',\n  //   readyState: WalletReadyState.NotDetected,\n  //   isAIP62Standard: true,\n  // },\n];\nvar crossChainStandardSupportedWalletList = [\n  {\n    name: \"Phantom (Solana)\",\n    url: \"https://phantom.com/\",\n    icon: \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA4IiBoZWlnaHQ9IjEwOCIgdmlld0JveD0iMCAwIDEwOCAxMDgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMDgiIGhlaWdodD0iMTA4IiByeD0iMjYiIGZpbGw9IiNBQjlGRjIiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00Ni41MjY3IDY5LjkyMjlDNDIuMDA1NCA3Ni44NTA5IDM0LjQyOTIgODUuNjE4MiAyNC4zNDggODUuNjE4MkMxOS41ODI0IDg1LjYxODIgMTUgODMuNjU2MyAxNSA3NS4xMzQyQzE1IDUzLjQzMDUgNDQuNjMyNiAxOS44MzI3IDcyLjEyNjggMTkuODMyN0M4Ny43NjggMTkuODMyNyA5NCAzMC42ODQ2IDk0IDQzLjAwNzlDOTQgNTguODI1OCA4My43MzU1IDc2LjkxMjIgNzMuNTMyMSA3Ni45MTIyQzcwLjI5MzkgNzYuOTEyMiA2OC43MDUzIDc1LjEzNDIgNjguNzA1MyA3Mi4zMTRDNjguNzA1MyA3MS41NzgzIDY4LjgyNzUgNzAuNzgxMiA2OS4wNzE5IDY5LjkyMjlDNjUuNTg5MyA3NS44Njk5IDU4Ljg2ODUgODEuMzg3OCA1Mi41NzU0IDgxLjM4NzhDNDcuOTkzIDgxLjM4NzggNDUuNjcxMyA3OC41MDYzIDQ1LjY3MTMgNzQuNDU5OEM0NS42NzEzIDcyLjk4ODQgNDUuOTc2OCA3MS40NTU2IDQ2LjUyNjcgNjkuOTIyOVpNODMuNjc2MSA0Mi41Nzk0QzgzLjY3NjEgNDYuMTcwNCA4MS41NTc1IDQ3Ljk2NTggNzkuMTg3NSA0Ny45NjU4Qzc2Ljc4MTYgNDcuOTY1OCA3NC42OTg5IDQ2LjE3MDQgNzQuNjk4OSA0Mi41Nzk0Qzc0LjY5ODkgMzguOTg4NSA3Ni43ODE2IDM3LjE5MzEgNzkuMTg3NSAzNy4xOTMxQzgxLjU1NzUgMzcuMTkzMSA4My42NzYxIDM4Ljk4ODUgODMuNjc2MSA0Mi41Nzk0Wk03MC4yMTAzIDQyLjU3OTVDNzAuMjEwMyA0Ni4xNzA0IDY4LjA5MTYgNDcuOTY1OCA2NS43MjE2IDQ3Ljk2NThDNjMuMzE1NyA0Ny45NjU4IDYxLjIzMyA0Ni4xNzA0IDYxLjIzMyA0Mi41Nzk1QzYxLjIzMyAzOC45ODg1IDYzLjMxNTcgMzcuMTkzMSA2NS43MjE2IDM3LjE5MzFDNjguMDkxNiAzNy4xOTMxIDcwLjIxMDMgMzguOTg4NSA3MC4yMTAzIDQyLjU3OTVaIiBmaWxsPSIjRkZGREY4Ii8+Cjwvc3ZnPgo=\",\n    readyState: \"NotDetected\" /* NotDetected */,\n    isAIP62Standard: true,\n    deeplinkProvider: `https://phantom.app/ul/browse/`\n  },\n  {\n    name: \"Phantom (Ethereum)\",\n    url: \"https://phantom.com/\",\n    icon: \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA4IiBoZWlnaHQ9IjEwOCIgdmlld0JveD0iMCAwIDEwOCAxMDgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMDgiIGhlaWdodD0iMTA4IiByeD0iMjYiIGZpbGw9IiNBQjlGRjIiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00Ni41MjY3IDY5LjkyMjlDNDIuMDA1NCA3Ni44NTA5IDM0LjQyOTIgODUuNjE4MiAyNC4zNDggODUuNjE4MkMxOS41ODI0IDg1LjYxODIgMTUgODMuNjU2MyAxNSA3NS4xMzQyQzE1IDUzLjQzMDUgNDQuNjMyNiAxOS44MzI3IDcyLjEyNjggMTkuODMyN0M4Ny43NjggMTkuODMyNyA5NCAzMC42ODQ2IDk0IDQzLjAwNzlDOTQgNTguODI1OCA4My43MzU1IDc2LjkxMjIgNzMuNTMyMSA3Ni45MTIyQzcwLjI5MzkgNzYuOTEyMiA2OC43MDUzIDc1LjEzNDIgNjguNzA1MyA3Mi4zMTRDNjguNzA1MyA3MS41NzgzIDY4LjgyNzUgNzAuNzgxMiA2OS4wNzE5IDY5LjkyMjlDNjUuNTg5MyA3NS44Njk5IDU4Ljg2ODUgODEuMzg3OCA1Mi41NzU0IDgxLjM4NzhDNDcuOTkzIDgxLjM4NzggNDUuNjcxMyA3OC41MDYzIDQ1LjY3MTMgNzQuNDU5OEM0NS42NzEzIDcyLjk4ODQgNDUuOTc2OCA3MS40NTU2IDQ2LjUyNjcgNjkuOTIyOVpNODMuNjc2MSA0Mi41Nzk0QzgzLjY3NjEgNDYuMTcwNCA4MS41NTc1IDQ3Ljk2NTggNzkuMTg3NSA0Ny45NjU4Qzc2Ljc4MTYgNDcuOTY1OCA3NC42OTg5IDQ2LjE3MDQgNzQuNjk4OSA0Mi41Nzk0Qzc0LjY5ODkgMzguOTg4NSA3Ni43ODE2IDM3LjE5MzEgNzkuMTg3NSAzNy4xOTMxQzgxLjU1NzUgMzcuMTkzMSA4My42NzYxIDM4Ljk4ODUgODMuNjc2MSA0Mi41Nzk0Wk03MC4yMTAzIDQyLjU3OTVDNzAuMjEwMyA0Ni4xNzA0IDY4LjA5MTYgNDcuOTY1OCA2NS43MjE2IDQ3Ljk2NThDNjMuMzE1NyA0Ny45NjU4IDYxLjIzMyA0Ni4xNzA0IDYxLjIzMyA0Mi41Nzk1QzYxLjIzMyAzOC45ODg1IDYzLjMxNTcgMzcuMTkzMSA2NS43MjE2IDM3LjE5MzFDNjguMDkxNiAzNy4xOTMxIDcwLjIxMDMgMzguOTg4NSA3MC4yMTAzIDQyLjU3OTVaIiBmaWxsPSIjRkZGREY4Ii8+Cjwvc3ZnPgo=\",\n    readyState: \"NotDetected\" /* NotDetected */,\n    isAIP62Standard: true,\n    deeplinkProvider: `https://phantom.app/ul/browse/`\n  },\n  {\n    name: \"Nightly (Solana)\",\n    url: \"https://nightly.app/\",\n    icon: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iV2Fyc3R3YV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDg1MS41IDg1MS41IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA4NTEuNSA4NTEuNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzYwNjdGOTt9DQoJLnN0MXtmaWxsOiNGN0Y3Rjc7fQ0KPC9zdHlsZT4NCjxnPg0KCTxnIGlkPSJXYXJzdHdhXzJfMDAwMDAwMTQ2MDk2NTQyNTMxODA5NDY0NjAwMDAwMDg2NDc4NTIwMDIxMTY5MTg2ODhfIj4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTEyNCwwaDYwMy42YzY4LjUsMCwxMjQsNTUuNSwxMjQsMTI0djYwMy42YzAsNjguNS01NS41LDEyNC0xMjQsMTI0SDEyNGMtNjguNSwwLTEyNC01NS41LTEyNC0xMjRWMTI0DQoJCQlDMCw1NS41LDU1LjUsMCwxMjQsMHoiLz4NCgk8L2c+DQoJPGcgaWQ9IldhcnN0d2FfMyI+DQoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02MjMuNSwxNzAuM2MtMzcuNCw1Mi4yLTg0LjIsODguNC0xMzkuNSwxMTIuNmMtMTkuMi01LjMtMzguOS04LTU4LjMtNy44Yy0xOS40LTAuMi0zOS4xLDIuNi01OC4zLDcuOA0KCQkJYy01NS4zLTI0LjMtMTAyLjEtNjAuMy0xMzkuNS0xMTIuNmMtMTEuMywyOC40LTU0LjgsMTI2LjQtMi42LDI2My40YzAsMC0xNi43LDcxLjUsMTQsMTMyLjljMCwwLDQ0LjQtMjAuMSw3OS43LDguMg0KCQkJYzM2LjksMjkuOSwyNS4xLDU4LjcsNTEuMSw4My41YzIyLjQsMjIuOSw1NS43LDIyLjksNTUuNywyMi45czMzLjMsMCw1NS43LTIyLjhjMjYtMjQuNywxNC4zLTUzLjUsNTEuMS04My41DQoJCQljMzUuMi0yOC4zLDc5LjctOC4yLDc5LjctOC4yYzMwLjYtNjEuNCwxNC0xMzIuOSwxNC0xMzIuOUM2NzguMywyOTYuNyw2MzQuOSwxOTguNyw2MjMuNSwxNzAuM3ogTTI1My4xLDQxNC44DQoJCQljLTI4LjQtNTguMy0zNi4yLTEzOC4zLTE4LjMtMjAxLjVjMjMuNyw2MCw1NS45LDg2LjksOTQuMiwxMTUuM0MzMTIuOCwzNjIuMywyODIuMywzOTQuMSwyNTMuMSw0MTQuOHogTTMzNC44LDUxNy41DQoJCQljLTIyLjQtOS45LTI3LjEtMjkuNC0yNy4xLTI5LjRjMzAuNS0xOS4yLDc1LjQtNC41LDc2LjgsNDAuOUMzNjAuOSw1MTQuNywzNTMsNTI1LjQsMzM0LjgsNTE3LjV6IE00MjUuNyw2NzguNw0KCQkJYy0xNiwwLTI5LTExLjUtMjktMjUuNnMxMy0yNS42LDI5LTI1LjZzMjksMTEuNSwyOSwyNS42QzQ1NC43LDY2Ny4zLDQ0MS43LDY3OC43LDQyNS43LDY3OC43eiBNNTE2LjcsNTE3LjUNCgkJCWMtMTguMiw4LTI2LTIuOC00OS43LDExLjVjMS41LTQ1LjQsNDYuMi02MC4xLDc2LjgtNDAuOUM1NDMuOCw0ODgsNTM5LDUwNy42LDUxNi43LDUxNy41eiBNNTk4LjMsNDE0LjgNCgkJCWMtMjkuMS0yMC43LTU5LjctNTIuNC03Ni04Ni4yYzM4LjMtMjguNCw3MC42LTU1LjQsOTQuMi0xMTUuM0M2MzQuNiwyNzYuNSw2MjYuOCwzNTYuNiw1OTguMyw0MTQuOHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==\",\n    readyState: \"NotDetected\" /* NotDetected */,\n    isAIP62Standard: true,\n    deeplinkProvider: \"nightly://v1?network=aptos&url=\"\n  },\n  {\n    name: \"Nightly (Ethereum)\",\n    url: \"https://nightly.app/\",\n    icon: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyOC4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iV2Fyc3R3YV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDg1MS41IDg1MS41IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA4NTEuNSA4NTEuNTsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzYwNjdGOTt9DQoJLnN0MXtmaWxsOiNGN0Y3Rjc7fQ0KPC9zdHlsZT4NCjxnPg0KCTxnIGlkPSJXYXJzdHdhXzJfMDAwMDAwMTQ2MDk2NTQyNTMxODA5NDY0NjAwMDAwMDg2NDc4NTIwMDIxMTY5MTg2ODhfIj4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTEyNCwwaDYwMy42YzY4LjUsMCwxMjQsNTUuNSwxMjQsMTI0djYwMy42YzAsNjguNS01NS41LDEyNC0xMjQsMTI0SDEyNGMtNjguNSwwLTEyNC01NS41LTEyNC0xMjRWMTI0DQoJCQlDMCw1NS41LDU1LjUsMCwxMjQsMHoiLz4NCgk8L2c+DQoJPGcgaWQ9IldhcnN0d2FfMyI+DQoJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02MjMuNSwxNzAuM2MtMzcuNCw1Mi4yLTg0LjIsODguNC0xMzkuNSwxMTIuNmMtMTkuMi01LjMtMzguOS04LTU4LjMtNy44Yy0xOS40LTAuMi0zOS4xLDIuNi01OC4zLDcuOA0KCQkJYy01NS4zLTI0LjMtMTAyLjEtNjAuMy0xMzkuNS0xMTIuNmMtMTEuMywyOC40LTU0LjgsMTI2LjQtMi42LDI2My40YzAsMC0xNi43LDcxLjUsMTQsMTMyLjljMCwwLDQ0LjQtMjAuMSw3OS43LDguMg0KCQkJYzM2LjksMjkuOSwyNS4xLDU4LjcsNTEuMSw4My41YzIyLjQsMjIuOSw1NS43LDIyLjksNTUuNywyMi45czMzLjMsMCw1NS43LTIyLjhjMjYtMjQuNywxNC4zLTUzLjUsNTEuMS04My41DQoJCQljMzUuMi0yOC4zLDc5LjctOC4yLDc5LjctOC4yYzMwLjYtNjEuNCwxNC0xMzIuOSwxNC0xMzIuOUM2NzguMywyOTYuNyw2MzQuOSwxOTguNyw2MjMuNSwxNzAuM3ogTTI1My4xLDQxNC44DQoJCQljLTI4LjQtNTguMy0zNi4yLTEzOC4zLTE4LjMtMjAxLjVjMjMuNyw2MCw1NS45LDg2LjksOTQuMiwxMTUuM0MzMTIuOCwzNjIuMywyODIuMywzOTQuMSwyNTMuMSw0MTQuOHogTTMzNC44LDUxNy41DQoJCQljLTIyLjQtOS45LTI3LjEtMjkuNC0yNy4xLTI5LjRjMzAuNS0xOS4yLDc1LjQtNC41LDc2LjgsNDAuOUMzNjAuOSw1MTQuNywzNTMsNTI1LjQsMzM0LjgsNTE3LjV6IE00MjUuNyw2NzguNw0KCQkJYy0xNiwwLTI5LTExLjUtMjktMjUuNnMxMy0yNS42LDI5LTI1LjZzMjksMTEuNSwyOSwyNS42QzQ1NC43LDY2Ny4zLDQ0MS43LDY3OC43LDQyNS43LDY3OC43eiBNNTE2LjcsNTE3LjUNCgkJCWMtMTguMiw4LTI2LTIuOC00OS43LDExLjVjMS41LTQ1LjQsNDYuMi02MC4xLDc2LjgtNDAuOUM1NDMuOCw0ODgsNTM5LDUwNy42LDUxNi43LDUxNy41eiBNNTk4LjMsNDE0LjgNCgkJCWMtMjkuMS0yMC43LTU5LjctNTIuNC03Ni04Ni4yYzM4LjMtMjguNCw3MC42LTU1LjQsOTQuMi0xMTUuM0M2MzQuNiwyNzYuNSw2MjYuOCwzNTYuNiw1OTguMyw0MTQuOHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==\",\n    readyState: \"NotDetected\" /* NotDetected */,\n    isAIP62Standard: true,\n    deeplinkProvider: \"nightly://v1?network=aptos&url=\"\n  }\n];\n\n// src/sdkWallets.ts\nfunction getSDKWallets(dappConfig) {\n  const sdkWallets = [];\n  return sdkWallets;\n}\n\n// src/WalletCore.ts\nfunction getWalletFeature(wallet, movementFeature, aptosFeature) {\n  const features = wallet.features;\n  return features[movementFeature] ?? features[aptosFeature];\n}\nvar WalletCore = class extends EventEmitter {\n  constructor(optInWallets, dappConfig, disableTelemetry) {\n    super();\n    // Local private variable to hold the wallet that is currently connected\n    this._wallet = null;\n    // Local private variable to hold SDK wallets in the adapter\n    this._sdkWallets = [];\n    // Local array that holds all the wallets that are AIP-62 standard compatible\n    this._standard_wallets = [];\n    // Local array that holds all the wallets that are AIP-62 standard compatible but are not installed on the user machine\n    this._standard_not_detected_wallets = [];\n    // Local private variable to hold the network that is currently connected\n    this._network = null;\n    // Local private variable to hold the wallet connected state\n    this._connected = false;\n    // Local private variable to hold the connecting state\n    this._connecting = false;\n    // Local private variable to hold the account that is currently connected\n    this._account = null;\n    // Private array that holds all the Wallets a dapp decided to opt-in to\n    this._optInWallets = [];\n    // Local flag to disable the adapter telemetry tool\n    this._disableTelemetry = false;\n    // Google Analytics 4 module\n    this.ga4 = null;\n    this._optInWallets = optInWallets || [];\n    this._dappConfig = dappConfig;\n    this._disableTelemetry = disableTelemetry ?? false;\n    this._sdkWallets = getSDKWallets(this._dappConfig);\n    if (!this._disableTelemetry) {\n      this.ga4 = new GA4();\n    }\n    this.fetchExtensionAIP62MovementWallets();\n    this.fetchSDKAIP62MovementWallets();\n    this.appendNotDetectedStandardSupportedWallets();\n  }\n  fetchExtensionAIP62MovementWallets() {\n    let { movementWallets, on } = getMovementWallets();\n    this.setExtensionAIP62Wallets(movementWallets);\n    if (typeof window === \"undefined\") return;\n    const that = this;\n    const removeRegisterListener = on(\"register\", function() {\n      let { movementWallets: movementWallets2 } = getMovementWallets();\n      that.setExtensionAIP62Wallets(movementWallets2);\n    });\n    const removeUnregisterListener = on(\"unregister\", function() {\n      let { movementWallets: movementWallets2 } = getMovementWallets();\n      that.setExtensionAIP62Wallets(movementWallets2);\n    });\n  }\n  /**\n   * Set AIP-62 extension wallets\n   *\n   * @param extensionwWallets\n   */\n  setExtensionAIP62Wallets(extensionwWallets) {\n    extensionwWallets.map((wallet) => {\n      if (this.excludeWallet(wallet)) {\n        return;\n      }\n      if (wallet.name === \"Rimosafe\") {\n        return;\n      }\n      const isValid = isWalletWithRequiredFeatureSet(wallet);\n      if (isValid) {\n        const index = this._standard_not_detected_wallets.findIndex(\n          (notDetctedWallet) => notDetctedWallet.name == wallet.name\n        );\n        if (index !== -1) {\n          this._standard_not_detected_wallets.splice(index, 1);\n        }\n        const alreadyExists = this._standard_wallets.some(\n          (w) => w.name === wallet.name\n        );\n        if (!alreadyExists) {\n          wallet.readyState = \"Installed\" /* Installed */;\n          wallet.isMovementNativeWallet = this.isMovementNativeWallet(wallet);\n          this._standard_wallets.push(wallet);\n          this.emit(\"standardWalletsAdded\", wallet);\n        }\n      }\n    });\n  }\n  /**\n   * Set AIP-62 SDK wallets\n   */\n  fetchSDKAIP62MovementWallets() {\n    this._sdkWallets.map((wallet) => {\n      if (this.excludeWallet(wallet)) {\n        return;\n      }\n      const isValid = isWalletWithRequiredFeatureSet(wallet);\n      if (isValid) {\n        wallet.readyState = \"Installed\" /* Installed */;\n        wallet.isMovementNativeWallet = this.isMovementNativeWallet(wallet);\n        this._standard_wallets.push(wallet);\n      }\n    });\n  }\n  // Movement native wallets do not have an authenticationFunction property\n  isMovementNativeWallet(wallet) {\n    return !(\"authenticationFunction\" in wallet);\n  }\n  // Since we can't discover AIP-62 wallets that are not installed on the user machine,\n  // we hold a AIP-62 wallets registry to show on the wallet selector modal for the users.\n  // Append wallets from wallet standard support registry to the `_standard_not_detected_wallets` array\n  // when wallet is not installed on the user machine\n  appendNotDetectedStandardSupportedWallets() {\n    const walletRegistry = this._dappConfig?.crossChainWallets ? [\n      ...movementStandardSupportedWalletList,\n      ...crossChainStandardSupportedWalletList\n    ] : movementStandardSupportedWalletList;\n    walletRegistry.map((supportedWallet) => {\n      const existingStandardWallet = this._standard_wallets.find(\n        (wallet) => wallet.name == supportedWallet.name\n      );\n      if (existingStandardWallet) {\n        return;\n      }\n      if (this.excludeWallet(supportedWallet)) {\n        return;\n      }\n      if (!existingStandardWallet) {\n        supportedWallet.isMovementNativeWallet = !(\"authenticationFunction\" in supportedWallet);\n        this._standard_not_detected_wallets.push(supportedWallet);\n        this.emit(\"standardNotDetectedWalletAdded\", supportedWallet);\n      }\n    });\n  }\n  /**\n   * A function that excludes an AIP-62 compatible wallet the dapp doesnt want to include\n   *\n   * @param wallet AdapterWallet | AdapterNotDetectedWallet\n   * @returns boolean\n   */\n  excludeWallet(wallet) {\n    if (this._optInWallets.length > 0 && !this._optInWallets.includes(wallet.name)) {\n      return true;\n    }\n    return false;\n  }\n  recordEvent(eventName, additionalInfo) {\n    this.ga4?.gtag(\"event\", `wallet_adapter_${eventName}`, {\n      wallet: this._wallet?.name,\n      network: this._network?.name,\n      network_url: this._network?.url,\n      adapter_core_version: WALLET_ADAPTER_CORE_VERSION,\n      send_to: true,\n      ...additionalInfo\n    });\n  }\n  /**\n   * Helper function to ensure wallet exists\n   *\n   * @param wallet A wallet\n   */\n  ensureWalletExists(wallet) {\n    if (!wallet) {\n      throw new WalletNotConnectedError().name;\n    }\n    if (!(wallet.readyState === \"Installed\" /* Installed */))\n      throw new WalletNotReadyError(\"Wallet is not set\").name;\n  }\n  /**\n   * Helper function to ensure account exists\n   *\n   * @param account An account\n   */\n  ensureAccountExists(account) {\n    if (!account) {\n      throw new WalletAccountError(\"Account is not set\").name;\n    }\n  }\n  /**\n   * Queries and sets MNS name for the current connected wallet account\n   */\n  async setMnsName() {\n    if (this._network?.chainId && this._account) {\n      if (this._account.mnsName) {\n        return;\n      }\n      const mnsNetwork = ChainIdToMnsSupportedNetworkMap[this._network.chainId];\n      if (!mnsNetwork) {\n        this._account.mnsName = void 0;\n        return;\n      }\n      try {\n        const movementConfig = new MovementConfig2({\n          network: mnsNetwork\n        });\n        const aptos = new Movement2(movementConfig);\n        const name = await aptos.mns.getPrimaryName({\n          address: this._account.address.toString()\n        });\n        this._account.mnsName = name;\n        if (name) {\n          this.emit(\"accountChange\", this._account);\n        }\n      } catch (error) {\n        console.log(`Error setting MNS name ${error}`);\n      }\n    }\n  }\n  /**\n   * Re-fetches the MNS name for the current connected wallet account.\n   * Clears the cached name and queries MNS again, emitting an accountChange\n   * event with the updated name.\n   *\n   * Useful for dapps that allow users to set or change their primary MNS name\n   * and want the adapter to reflect the update without requiring a reconnect.\n   */\n  async refetchMnsName() {\n    if (this._account) {\n      this._account.mnsName = void 0;\n    }\n    await this.setMnsName();\n  }\n  /**\n   * Function to cleat wallet adapter data.\n   *\n   * - Removes current connected wallet state\n   * - Removes current connected account state\n   * - Removes current connected network state\n   * - Removes autoconnect local storage value\n   */\n  clearData() {\n    this._connected = false;\n    this.setWallet(null);\n    this.setAccount(null);\n    this.setNetwork(null);\n    removeLocalStorage();\n  }\n  /**\n   * Sets the connected wallet\n   *\n   * @param wallet A wallet\n   */\n  setWallet(wallet) {\n    this._wallet = wallet;\n  }\n  /**\n   * Sets the connected account\n   *\n   * @param account An account\n   */\n  setAccount(account) {\n    this._account = account;\n  }\n  /**\n   * Sets the connected network\n   *\n   * @param network A network\n   */\n  setNetwork(network) {\n    this._network = network;\n  }\n  /**\n   * Helper function to detect whether a wallet is connected\n   *\n   * @returns boolean\n   */\n  isConnected() {\n    return this._connected;\n  }\n  /**\n   * Getter to fetch all detected wallets\n   */\n  get wallets() {\n    return this._standard_wallets;\n  }\n  get notDetectedWallets() {\n    return this._standard_not_detected_wallets;\n  }\n  /**\n   * Getter for the current connected wallet\n   *\n   * @return wallet info\n   * @throws WalletNotSelectedError\n   */\n  get wallet() {\n    try {\n      if (!this._wallet) return null;\n      return this._wallet;\n    } catch (error) {\n      throw new WalletNotSelectedError(error).message;\n    }\n  }\n  /**\n   * Getter for the current connected account\n   *\n   * @return account info\n   * @throws WalletAccountError\n   */\n  get account() {\n    try {\n      return this._account;\n    } catch (error) {\n      throw new WalletAccountError(error).message;\n    }\n  }\n  /**\n   * Getter for the current wallet network\n   *\n   * @return network info\n   * @throws WalletGetNetworkError\n   */\n  get network() {\n    try {\n      return this._network;\n    } catch (error) {\n      throw new WalletGetNetworkError(error).message;\n    }\n  }\n  /**\n   * Helper function to run some checks before we connect with a wallet.\n   *\n   * @param walletName. The wallet name we want to connect with.\n   */\n  async connect(walletName) {\n    if (isRedirectable()) {\n      const selectedWallet2 = this._standard_not_detected_wallets.find(\n        (wallet) => wallet.name === walletName\n      );\n      if (selectedWallet2) {\n        const uninstalledWallet = selectedWallet2;\n        if (uninstalledWallet.deeplinkProvider) {\n          let parameter = \"\";\n          if (uninstalledWallet.name.includes(\"Phantom\")) {\n            let url = encodeURIComponent(window.location.href);\n            let ref = encodeURIComponent(window.location.origin);\n            parameter = `${url}?ref=${ref}`;\n          } else {\n            parameter = encodeURIComponent(window.location.href);\n          }\n          const location = uninstalledWallet.deeplinkProvider.concat(parameter);\n          window.location.href = location;\n          return;\n        }\n      }\n    }\n    const allDetectedWallets = this._standard_wallets;\n    const selectedWallet = allDetectedWallets.find(\n      (wallet) => wallet.name === walletName\n    );\n    if (!selectedWallet) return;\n    if (this._connected && this._account) {\n      if (this._wallet?.name === walletName)\n        throw new WalletConnectionError(\n          `${walletName} wallet is already connected`\n        ).message;\n    }\n    await this.connectWallet(selectedWallet, async () => {\n      const connectFeature = getWalletFeature(\n        selectedWallet,\n        \"movement:connect\",\n        \"aptos:connect\"\n      );\n      if (!connectFeature) {\n        throw new WalletConnectionError(\"Wallet does not support connect feature\").message;\n      }\n      const response = await connectFeature.connect();\n      if (response.status === UserResponseStatus.REJECTED) {\n        throw new WalletConnectionError(\"User has rejected the request\").message;\n      }\n      return { account: response.args, output: void 0 };\n    });\n  }\n  /**\n   * Signs into the wallet by connecting and signing an authentication messages.\n   *\n   * For more information, visit: https://siwa.aptos.dev\n   *\n   * @param args\n   * @param args.input The MovementSignInInput which defines how the SIWA Message should be constructed\n   * @param args.walletName The name of the wallet to sign into\n   * @returns The MovementSignInOutput which contains the account and signature information\n   */\n  async signIn(args) {\n    const { input, walletName } = args;\n    const allDetectedWallets = this._standard_wallets;\n    const selectedWallet = allDetectedWallets.find(\n      (wallet) => wallet.name === walletName\n    );\n    if (!selectedWallet) {\n      throw new WalletNotFoundError(`Wallet ${walletName} not found`).message;\n    }\n    const signInFeature = getWalletFeature(\n      selectedWallet,\n      \"movement:signIn\",\n      \"aptos:signIn\"\n    );\n    if (!signInFeature) {\n      throw new WalletNotSupportedMethod(\n        `signIn is not supported by ${walletName}`\n      ).message;\n    }\n    return await this.connectWallet(selectedWallet, async () => {\n      const signInFeature2 = getWalletFeature(\n        selectedWallet,\n        \"movement:signIn\",\n        \"aptos:signIn\"\n      );\n      if (!signInFeature2) {\n        throw new WalletNotSupportedMethod(\n          `signIn is not supported by ${selectedWallet.name}`\n        ).message;\n      }\n      const response = await signInFeature2.signIn(input);\n      if (response.status === UserResponseStatus.REJECTED) {\n        throw new WalletConnectionError(\"User has rejected the request\").message;\n      }\n      return { account: response.args.account, output: response.args };\n    });\n  }\n  /**\n   * Connects a wallet to the dapp.\n   * On connect success, we set the current account and the network, and keeping the selected wallet\n   * name in LocalStorage to support autoConnect function.\n   *\n   * @param selectedWallet. The wallet we want to connect.\n   * @emit emits \"connect\" event\n   * @throws WalletConnectionError\n   */\n  async connectWallet(selectedWallet, onConnect) {\n    try {\n      this._connecting = true;\n      this.setWallet(selectedWallet);\n      const { account, output } = await onConnect();\n      this.setAccount(account);\n      const networkFeature = getWalletFeature(\n        selectedWallet,\n        \"movement:network\",\n        \"aptos:network\"\n      );\n      const network = await networkFeature?.network();\n      this.setNetwork(network ?? null);\n      await this.setMnsName();\n      setLocalStorage(selectedWallet.name);\n      this._connected = true;\n      this.recordEvent(\"wallet_connect\");\n      this.emit(\"connect\", account);\n      return output;\n    } catch (error) {\n      this.clearData();\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletConnectionError(errMsg).message;\n    } finally {\n      this._connecting = false;\n    }\n  }\n  /**\n   * Disconnect the current connected wallet. On success, we clear the\n   * current account, current network and LocalStorage data.\n   *\n   * @emit emits \"disconnect\" event\n   * @throws WalletDisconnectionError\n   */\n  async disconnect() {\n    try {\n      this.ensureWalletExists(this._wallet);\n      const disconnectFeature = getWalletFeature(\n        this._wallet,\n        \"movement:disconnect\",\n        \"aptos:disconnect\"\n      );\n      await disconnectFeature?.disconnect();\n      this.clearData();\n      this.recordEvent(\"wallet_disconnect\");\n      this.emit(\"disconnect\");\n    } catch (error) {\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletDisconnectionError(errMsg).message;\n    }\n  }\n  /**\n   * Signs and submits a transaction to chain\n   *\n   * @param transactionInput InputTransactionData\n   * @returns MovementSignAndSubmitTransactionOutput\n   */\n  async signAndSubmitTransaction(transactionInput) {\n    try {\n      if (\"function\" in transactionInput.data) {\n        if (transactionInput.data.function === \"0x1::account::rotate_authentication_key_call\") {\n          throw new WalletSignAndSubmitMessageError(\"SCAM SITE DETECTED\").message;\n        }\n        if (transactionInput.data.function === \"0x1::code::publish_package_txn\") {\n          ({\n            metadataBytes: transactionInput.data.functionArguments[0],\n            byteCode: transactionInput.data.functionArguments[1]\n          } = handlePublishPackageTransaction(transactionInput));\n        }\n      }\n      this.ensureWalletExists(this._wallet);\n      this.ensureAccountExists(this._account);\n      this.recordEvent(\"sign_and_submit_transaction\");\n      const shouldUseTxnSubmitter = !!(this._dappConfig?.transactionSubmitter || transactionInput.transactionSubmitter);\n      const signAndSubmitFeature = getWalletFeature(\n        this._wallet,\n        \"movement:signAndSubmitTransaction\",\n        \"aptos:signAndSubmitTransaction\"\n      );\n      if (signAndSubmitFeature && !shouldUseTxnSubmitter) {\n        if (signAndSubmitFeature.version !== \"1.1.0\") {\n          const movementConfig2 = getMovementConfig(this._network, this._dappConfig);\n          const aptos2 = new Movement2(movementConfig2);\n          const transaction2 = await aptos2.transaction.build.simple({\n            sender: this._account.address.toString(),\n            data: transactionInput.data,\n            options: transactionInput.options\n          });\n          const signAndSubmitTransactionMethod = signAndSubmitFeature.signAndSubmitTransaction;\n          const response3 = await signAndSubmitTransactionMethod(\n            transaction2\n          );\n          if (response3.status === UserResponseStatus.REJECTED) {\n            throw new WalletConnectionError(\"User has rejected the request\").message;\n          }\n          return response3.args;\n        }\n        const response2 = await signAndSubmitFeature.signAndSubmitTransaction({\n          payload: transactionInput.data,\n          gasUnitPrice: transactionInput.options?.gasUnitPrice,\n          maxGasAmount: transactionInput.options?.maxGasAmount\n        });\n        if (response2.status === UserResponseStatus.REJECTED) {\n          throw new WalletConnectionError(\"User has rejected the request\").message;\n        }\n        return response2.args;\n      }\n      const movementConfig = getMovementConfig(this._network, this._dappConfig);\n      const aptos = new Movement2(movementConfig);\n      const transaction = await aptos.transaction.build.simple({\n        sender: this._account.address.toString(),\n        data: transactionInput.data,\n        options: transactionInput.options,\n        withFeePayer: shouldUseTxnSubmitter\n      });\n      const signTransactionResponse = await this.signTransaction({\n        transactionOrPayload: transaction\n      });\n      const response = await this.submitTransaction({\n        transaction,\n        senderAuthenticator: signTransactionResponse.authenticator,\n        transactionSubmitter: transactionInput.transactionSubmitter,\n        pluginParams: transactionInput.pluginParams\n      });\n      return { hash: response.hash };\n    } catch (error) {\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletSignAndSubmitMessageError(errMsg).message;\n    }\n  }\n  /**\n   * Signs a transaction\n   *\n   * This method supports 2 input types -\n   * 1. A raw transaction that was already built by the dapp,\n   * 2. A transaction data input as JSON. This is for the wallet to be able to simulate before signing\n   *\n   * @param transactionOrPayload AnyRawTransaction | InputTransactionData\n   * @param asFeePayer optional. A flag indicates to sign the transaction as the fee payer\n   * @param options optional. Transaction options\n   *\n   * @returns AccountAuthenticator\n   */\n  async signTransaction(args) {\n    const { transactionOrPayload, asFeePayer } = args;\n    try {\n      this.ensureWalletExists(this._wallet);\n      this.ensureAccountExists(this._account);\n      this.recordEvent(\"sign_transaction\");\n      const signTransactionFeature = getWalletFeature(\n        this._wallet,\n        \"movement:signTransaction\",\n        \"aptos:signTransaction\"\n      );\n      if (\"rawTransaction\" in transactionOrPayload) {\n        const response = await signTransactionFeature?.signTransaction(\n          transactionOrPayload,\n          asFeePayer\n        );\n        if (response.status === UserResponseStatus.REJECTED) {\n          throw new WalletConnectionError(\"User has rejected the request\").message;\n        }\n        return {\n          authenticator: response.args,\n          rawTransaction: transactionOrPayload.rawTransaction.bcsToBytes()\n        };\n      } else if (signTransactionFeature?.version === \"1.1.0\") {\n        const signTransactionV1_1StandardInput = {\n          payload: transactionOrPayload.data,\n          expirationTimestamp: transactionOrPayload.options?.expirationTimestamp,\n          expirationSecondsFromNow: transactionOrPayload.options?.expirationSecondsFromNow,\n          gasUnitPrice: transactionOrPayload.options?.gasUnitPrice,\n          maxGasAmount: transactionOrPayload.options?.maxGasAmount,\n          sequenceNumber: transactionOrPayload.options?.accountSequenceNumber,\n          sender: transactionOrPayload.sender ? { address: AccountAddress.from(transactionOrPayload.sender) } : void 0\n        };\n        const walletSignTransactionMethod = signTransactionFeature.signTransaction;\n        const response = await walletSignTransactionMethod(\n          signTransactionV1_1StandardInput\n        );\n        if (response.status === UserResponseStatus.REJECTED) {\n          throw new WalletConnectionError(\"User has rejected the request\").message;\n        }\n        return {\n          authenticator: response.args.authenticator,\n          rawTransaction: response.args.rawTransaction.bcsToBytes()\n        };\n      } else {\n        const movementConfig = getMovementConfig(this._network, this._dappConfig);\n        const aptos = new Movement2(movementConfig);\n        const transaction = await aptos.transaction.build.simple({\n          sender: this._account.address,\n          data: transactionOrPayload.data,\n          options: transactionOrPayload.options,\n          withFeePayer: transactionOrPayload.withFeePayer\n        });\n        const response = await signTransactionFeature?.signTransaction(\n          transaction,\n          asFeePayer\n        );\n        if (response.status === UserResponseStatus.REJECTED) {\n          throw new WalletConnectionError(\"User has rejected the request\").message;\n        }\n        return {\n          authenticator: response.args,\n          rawTransaction: transaction.bcsToBytes()\n        };\n      }\n    } catch (error) {\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletSignTransactionError(errMsg).message;\n    }\n  }\n  /**\n   * Sign a message (doesnt submit to chain).\n   *\n   * @param message - MovementSignMessageInput\n   *\n   * @return response from the wallet's signMessage function\n   * @throws WalletSignMessageError\n   */\n  async signMessage(message) {\n    try {\n      this.ensureWalletExists(this._wallet);\n      this.recordEvent(\"sign_message\");\n      const signMessageFeature = getWalletFeature(\n        this._wallet,\n        \"movement:signMessage\",\n        \"aptos:signMessage\"\n      );\n      const response = await signMessageFeature?.signMessage(message);\n      if (response.status === UserResponseStatus.REJECTED) {\n        throw new WalletConnectionError(\"User has rejected the request\").message;\n      }\n      return response.args;\n    } catch (error) {\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletSignMessageError(errMsg).message;\n    }\n  }\n  /**\n   * Submits transaction to chain\n   *\n   * @param transaction - InputSubmitTransactionData\n   * @returns PendingTransactionResponse\n   */\n  async submitTransaction(transaction) {\n    try {\n      this.ensureWalletExists(this._wallet);\n      const { additionalSignersAuthenticators } = transaction;\n      const transactionType = additionalSignersAuthenticators !== void 0 ? \"multi-agent\" : \"simple\";\n      this.recordEvent(\"submit_transaction\", {\n        transaction_type: transactionType\n      });\n      const movementConfig = getMovementConfig(this._network, this._dappConfig);\n      const aptos = new Movement2(movementConfig);\n      if (additionalSignersAuthenticators !== void 0) {\n        const multiAgentTxn = {\n          ...transaction,\n          additionalSignersAuthenticators\n        };\n        return aptos.transaction.submit.multiAgent(multiAgentTxn);\n      } else {\n        return aptos.transaction.submit.simple(transaction);\n      }\n    } catch (error) {\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletSubmitTransactionError(errMsg).message;\n    }\n  }\n  /**\n   Event for when account has changed on the wallet\n   @return the new account info\n   @throws WalletAccountChangeError\n   */\n  async onAccountChange() {\n    try {\n      this.ensureWalletExists(this._wallet);\n      const onAccountChangeFeature = getWalletFeature(\n        this._wallet,\n        \"movement:onAccountChange\",\n        \"aptos:onAccountChange\"\n      );\n      await onAccountChangeFeature?.onAccountChange(\n        async (data) => {\n          this.setAccount(data);\n          await this.setMnsName();\n          this.recordEvent(\"account_change\");\n          this.emit(\"accountChange\", this._account);\n        }\n      );\n    } catch (error) {\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletAccountChangeError(errMsg).message;\n    }\n  }\n  /**\n   Event for when network has changed on the wallet\n   @return the new network info\n   @throws WalletNetworkChangeError\n   */\n  async onNetworkChange() {\n    try {\n      this.ensureWalletExists(this._wallet);\n      const onNetworkChangeFeature = getWalletFeature(\n        this._wallet,\n        \"movement:onNetworkChange\",\n        \"aptos:onNetworkChange\"\n      );\n      await onNetworkChangeFeature?.onNetworkChange(\n        async (data) => {\n          this.setNetwork(data);\n          await this.setMnsName();\n          this.emit(\"networkChange\", this._network);\n        }\n      );\n    } catch (error) {\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletNetworkChangeError(errMsg).message;\n    }\n  }\n  /**\n   * Sends a change network request to the wallet to change the connected network\n   *\n   * @param network - Network\n   * @returns MovementChangeNetworkOutput\n   */\n  async changeNetwork(network) {\n    try {\n      this.ensureWalletExists(this._wallet);\n      this.recordEvent(\"change_network_request\", {\n        from: this._network?.name,\n        to: network\n      });\n      const chainId = network === Network2.DEVNET ? await fetchDevnetChainId() : NetworkToChainId[network];\n      const networkInfo = {\n        name: network,\n        chainId\n      };\n      const changeNetworkFeature = getWalletFeature(\n        this._wallet,\n        \"movement:changeNetwork\",\n        \"aptos:changeNetwork\"\n      );\n      if (changeNetworkFeature) {\n        const response = await changeNetworkFeature.changeNetwork(networkInfo);\n        if (response.status === UserResponseStatus.REJECTED) {\n          throw new WalletConnectionError(\"User has rejected the request\").message;\n        }\n        this.setNetwork(networkInfo);\n        await this.setMnsName();\n        this.emit(\"networkChange\", this._network);\n        return response.args;\n      }\n      throw new WalletChangeNetworkError(\n        `${this._wallet.name} does not support changing network request`\n      ).message;\n    } catch (error) {\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletChangeNetworkError(errMsg).message;\n    }\n  }\n  /**\n   * Signs a message and verifies the signer\n   * @param message - MovementSignMessageInput\n   * @returns boolean\n   */\n  async signMessageAndVerify(message) {\n    try {\n      this.ensureWalletExists(this._wallet);\n      this.ensureAccountExists(this._account);\n      this.recordEvent(\"sign_message_and_verify\");\n      const signMessageFeature = getWalletFeature(\n        this._wallet,\n        \"movement:signMessage\",\n        \"aptos:signMessage\"\n      );\n      const response = await signMessageFeature?.signMessage(message);\n      if (response.status === UserResponseStatus.REJECTED) {\n        throw new WalletConnectionError(\"Failed to sign a message\").message;\n      }\n      const movementConfig = getMovementConfig(this._network, this._dappConfig);\n      const signingMessage = new TextEncoder().encode(\n        response.args.fullMessage\n      );\n      if (\"verifySignatureAsync\" in this._account.publicKey) {\n        return await this._account.publicKey.verifySignatureAsync({\n          movementConfig,\n          message: signingMessage,\n          signature: response.args.signature,\n          options: { throwErrorWithReason: true }\n        });\n      }\n      return this._account.publicKey.verifySignature({\n        message: signingMessage,\n        signature: response.args.signature\n      });\n    } catch (error) {\n      const errMsg = generalizedErrorMessage(error);\n      throw new WalletSignMessageAndVerifyError(errMsg).message;\n    }\n  }\n};\n\n// src/index.ts\nif (typeof window !== \"undefined\") {\n  window.WALLET_ADAPTER_CORE_VERSION = WALLET_ADAPTER_CORE_VERSION;\n}\nexport {\n  ChainIdToMnsSupportedNetworkMap,\n  MOVEMENT_CONNECT_ACCOUNT_URL,\n  MOVEMENT_CONNECT_BASE_URL,\n  NetworkName,\n  PETRA_WEB_ACCOUNT_URL,\n  PETRA_WEB_BASE_URL,\n  WalletCore,\n  WalletReadyState,\n  convertNetwork,\n  crossChainStandardSupportedWalletList,\n  fetchDevnetChainId,\n  generalizedErrorMessage,\n  getLocalStorage,\n  getMovementConfig,\n  getSDKWallets,\n  groupAndSortWallets,\n  handlePublishPackageTransaction,\n  isInAppBrowser,\n  isInstallRequired,\n  isInstalledOrLoadable,\n  isMobile,\n  isMovementConnectWallet,\n  isMovementLiveNetwork,\n  isMovementNetwork,\n  isPetraWebWallet,\n  isRedirectable,\n  movementStandardSupportedWalletList,\n  partitionWallets,\n  removeLocalStorage,\n  setLocalStorage,\n  truncateAddress\n};\n","export const WALLET_ADAPTER_CORE_VERSION = \"7.11.3\";\n","export class GA4 {\n  readonly movementGAID: string | undefined = process.env.GAID;\n\n  constructor() {\n    // Inject Movement Google Analytics 4 script\n    this.injectGA(this.movementGAID);\n  }\n\n  gtag(a: string, b: string | object, c?: object) {\n    let dataLayer = (window as any).dataLayer || [];\n    dataLayer.push(arguments);\n  }\n\n  private injectGA(gaID?: string) {\n    if (typeof window === \"undefined\") return;\n    if (!gaID) return;\n\n    const head = document.getElementsByTagName(\"head\")[0];\n\n    var myScript = document.createElement(\"script\");\n\n    myScript.setAttribute(\n      \"src\",\n      `https://www.googletagmanager.com/gtag/js?id=${gaID}`,\n    );\n\n    const that = this;\n    myScript.onload = function () {\n      that.gtag(\"js\", new Date());\n      that.gtag(\"config\", `${gaID}`, {\n        send_page_view: false,\n      });\n    };\n\n    head.insertBefore(myScript, head.children[1]);\n  }\n}\n"]}