{"version":3,"sources":["jsdelivr-header.js","/npm/cardano-dapp-js@1.0.11/src/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OCNQ,MAAO,gBAAiB,UAAY,uBACrC,aAAc,qBAEb,WAAY,YAAc,+BAGxB,6BACG,oCACW,gCACtB,4BACA,2BACK,yBAEC,MAAO,mBAER,MAAM,YAEX,SAAyB,CACvB,+BAGF,yBAA2B,CACzB,MAAO,CACL,UAAW,QACX,IAAK,wCAEP,OAAQ,CACN,UAAW,SACX,IAAK,gDAEP,MAAO,CACL,UAAW,QACX,IAAK,wCAEP,KAAM,CACJ,UAAW,aACX,IAAK,8CAEP,KAAM,CACJ,UAAW,OACX,IAAK,yCAEP,KAAM,CACJ,UAAW,OACX,IAAK,2CAEP,OAAQ,CACN,UAAW,cACX,IAAK,6CAEP,MAAO,CACL,UAAW,QACX,IAAK,iCAEP,cAAe,CACb,UAAW,gBACX,IAAK,+CAEP,MAAO,CACL,UAAW,QACX,IAAK,gDAIT,SAAqB,IAErB,QAAO,CAAkB,GACvB,IAAI,EAAU,EAAM,WAChB,EAAM,cAAgB,SACxB,EAAU,KAAK,UAAU,IAE3B,SAAS,CAAC,KAAM,0BAA0B,IAAW,SAAU,MAAO,WACxE,CAEA,QAAO,CAAmB,GACxB,MAAM,EAAkB,YAAY,kBAAkB,GAAY,UAClE,MAAO,YAAa,QAAY,KAAmB,OAAO,UACxD,MAAK,EAAkB,WAAW,sCAC3B,EAGX,CAEA,cAAa,CAAc,GACzB,GAAmB,kBAAf,EAAgC,CAClC,MAAM,EAAY,kCAKlB,aAJ+B,EAAU,YAAY,aAAY,UAEzD,gBAED,EAAU,iBACnB,CACA,MAAM,EAAY,YAAY,kBAAkB,GAAY,UAC5D,OAAO,OAAO,QAAQ,GAAW,QACnC,CAEA,QAAO,CAAwB,GAC7B,mBAAkB,KACT,CACL,WAAY,CACV,IAAI,uBAAuB,CACzB,cAAe,EAAkB,cACjC,SAAU,EAAkB,SAC5B,YAAa,EAAkB,YAC/B,QAAQ,KAGZ,cAAe,uBAAuB,gBACtC,YAAa,iCAEd,EAAkB,UACvB,CAEA,WAAA,CAAY,EAAa,GACvB,KAAK,YAAc,EACnB,MAAK,SACqB,IAAtB,IACF,aAAY,EAAwB,GACpC,OAAO,QAAQ,cAAgB,GAEjC,MAAK,GACP,CAEA,EAAA,GACE,IAAI,EAAe,kBAAkB,MAAK,mEAE1C,IAAK,IAAI,KADT,GAAgB,wBACG,YAAY,kBAAmB,CAChD,IAAI,EAAM,YAAY,kBAAkB,GAAQ,IAChD,GAAgB,+BAA+B,KAAK,eAAe,gBAAqB,uCAAyC,YACnI,CACA,GAAgB,kBAChB,SAAS,cAAc,IAAI,KAAK,eAAe,UAAY,CAC7D,CAEA,EAAA,GACE,IAAK,MAAM,KAAU,YAAY,kBAC/B,SAAS,cAAc,IAAI,KAAK,eAAe,KAAU,iBAAiB,SAAS,UACjF,GAAK,EAAE,uBACD,KAAK,cAAc,EAAO,GAGtC,CAEA,EAAA,GACE,MAAO,GAAG,KAAK,oBACjB,CAEA,mBAAM,CAAc,GAClB,GAAK,aAAY,EAAmB,GAIpC,IACE,MAAM,QAAe,aAAY,EAAc,GACzC,QAAgB,EAAO,mBAC7B,KAAK,eAAiB,EACtB,MAAK,IACL,SAAS,CACL,KAAM,iCAAiC,KACvC,SAAU,MACX,YACH,OAAO,YAAY,CACjB,KAAM,0BACN,OAAQ,CAAE,SAAU,EAAY,QAAS,IACxC,IACL,CAAE,MAAO,GACP,aAAY,EAAkB,EAChC,CACF,CAEA,EAAA,GACM,KAAK,qBAAuB,KAAK,cACnC,SAAS,cAAc,IAAI,MAAK,OAAkB,YAAc,gBAAgB,KAAK,kBAEzF,CAEA,kBAAA,GACE,QAA4B,IAAxB,KAAK,eACP,KAAM,gCAER,OAAO,aAAY,EAAc,KAAK,eACxC,CAEA,qBAAM,CAAgB,GACpB,MAAM,EAAe,CAAC,EAChB,QAAsB,KAAK,qBAC3B,QAAc,EAAc,WAClC,IAAK,MAAM,KAAW,EAAO,CAC3B,MAAM,EAAY,QAAQ,GACpB,EAAW,MAAM,yBAAyB,WAAW,GAErD,EADO,WAAW,GACJ,OACpB,IAAK,MAAM,KAAS,EACd,EAAM,WAAW,KACnB,EAAa,GAAS,EAAO,GAGnC,CACA,OAAO,OAAO,OAAO,GAAc,QAAO,CAAC,EAAK,IAAW,EAAM,GAAQ,GAC3E,CAEA,0BAAM,CAAqB,GACzB,IAAK,MAAM,KAAU,EAAc,CAEjC,SAD8B,KAAK,gBAAgB,IAC5B,EAAa,GAClC,OAAO,CAEX,CACA,OAAO,CACT,CAEA,iBAAA,GACE,YAA+B,IAAxB,KAAK,cACd","file":"/npm/cardano-dapp-js@1.0.11/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/cardano-dapp-js@1.0.11/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import {Lucid, Blockfrost, C as LCore} from 'lucid-cardano';\nimport Toastify from 'toastify-js';\n\nimport {coreToUtxo, fromHex} from 'lucid-cardano';\n\nimport {\n  init as walletConnectInit,\n  connect as walletConnect,\n  getActiveConnector as getActiveWalletConnectConnector,\n  cardanoMainnetWalletConnect,\n  WalletConnectConnector\n} from '@dcspark/adalib';\n\nexport {Lucid, Blockfrost};\n\nexport class CardanoDApp {\n\n  static #CARDANO_CHAINS = [\n    cardanoMainnetWalletConnect()\n  ];\n\n  static SUPPORTED_WALLETS = {\n    begin: {\n      cip30name: 'begin',\n      img: 'https://begin.is/favicon/favicon.ico'\n    },\n    eternl: {\n      cip30name: 'eternl',\n      img: 'https://ccvault.io/icons/favicon-128x128.png'\n    },\n    flint: {\n      cip30name: 'flint',\n      img: 'https://flint-wallet.com/favicon.png'\n    },\n    gero: {\n      cip30name: 'gerowallet',\n      img: 'https://gerowallet.io/assets/img/logo2.ico'\n    },\n    lace: {\n      cip30name: 'lace',\n      img: 'https://www.lace.io/favicon-32x32.png'\n    },\n    nami: {\n      cip30name: 'nami',\n      img: 'https://namiwallet.io/favicon-32x32.png'\n    },\n    typhon: {\n      cip30name: 'typhoncip30',\n      img: 'https://typhonwallet.io/assets/typhon.svg',\n    },\n    vespr: {\n      cip30name: 'vespr',\n      img: 'https://vespr.xyz/favicon.png'\n    },\n    WalletConnect: {\n      cip30name: 'WalletConnect',\n      img: 'https://cloud.walletconnect.com/favicon.ico'\n    },\n    yoroi: {\n      cip30name: 'yoroi',\n      img: 'https://yoroi-wallet.com/assets/favicon.png'\n    }\n  }\n\n  static #TIMEOUT_MS = 1000;\n\n  static #toastWalletError(error) {\n    var message = error.toString();\n    if (error.constructor === Object) {\n      message = JSON.stringify(error);\n    }\n    Toastify({text: `Wallet error occurred: ${message}`, duration: 3000}).showToast();\n  }\n\n  static #isWalletSupported(walletName) {\n    const walletCip30Name = CardanoDApp.SUPPORTED_WALLETS[walletName].cip30name;\n    if (!((\"cardano\" in window) && (walletCip30Name in window.cardano))) {\n      this.#toastWalletError(`Wallet '${walletName}' not integrated in your browser`);\n      return false;\n    }\n    return true;\n  }\n\n  static async #enableWallet(walletName) {\n    if (walletName === 'WalletConnect') {\n      const connector = getActiveWalletConnectConnector();\n      const isStillConnected = await connector.isConnected(CardanoDApp.#TIMEOUT_MS);\n      if (!isStillConnected) {\n        await walletConnect();\n      }\n      return connector.getConnectorAPI();\n    }\n    const cip30name = CardanoDApp.SUPPORTED_WALLETS[walletName].cip30name;\n    return window.cardano[cip30name].enable();\n  }\n\n  static #configureWalletConnect(walletConnectInfo) {\n    walletConnectInit(() => {\n      return {\n        connectors: [\n          new WalletConnectConnector({\n            relayerRegion: walletConnectInfo.relayerRegion,\n            metadata: walletConnectInfo.metadata,\n            autoconnect: walletConnectInfo.autoconnect,\n            qrcode: true\n          })\n        ],\n        connectorName: WalletConnectConnector.connectorName(),\n        chosenChain: cardanoMainnetWalletConnect()\n      }\n    }, walletConnectInfo.projectId);\n  }\n\n  constructor(containerId, walletConnectInfo) {\n    this.containerId = containerId;\n    this.#buildDropdownDom();\n    if (walletConnectInfo !== undefined) {\n      CardanoDApp.#configureWalletConnect(walletConnectInfo);\n      window.cardano.WalletConnect = walletConnectInfo;\n    }\n    this.#configureDropdownListeners();\n  }\n\n  #buildDropdownDom() {\n    var dropdownHtml = `<ul><li><a id=\"${this.#getBannerEl()}\" class=\"text-reset bordered\">Connect Wallet&nbsp;&#9660;</a>`;\n    dropdownHtml += '<ul class=\"dropdown\">';\n    for (var wallet in CardanoDApp.SUPPORTED_WALLETS) {\n      var img = CardanoDApp.SUPPORTED_WALLETS[wallet].img;\n      dropdownHtml += `<li class=\"bordered\"><a id=\"${this.containerId}-${wallet}\"><img src=\"${img}\" width=20 height=20 />&nbsp;&nbsp;${wallet}</a></li>`;\n    }\n    dropdownHtml += '</ul></li></ul>';\n    document.querySelector(`#${this.containerId}`).innerHTML = dropdownHtml;\n  }\n\n  #configureDropdownListeners() {\n    for (const wallet in CardanoDApp.SUPPORTED_WALLETS) {\n      document.querySelector(`#${this.containerId}-${wallet}`).addEventListener(\"click\", async e => {\n        e && e.preventDefault();\n        await this.connectWallet(wallet);\n      });\n    }\n  }\n\n  #getBannerEl() {\n    return `${this.containerId}-header`;\n  }\n\n  async connectWallet(walletName) {\n    if (!CardanoDApp.#isWalletSupported(walletName)) {\n      return;\n    }\n\n    try {\n      const wallet = await CardanoDApp.#enableWallet(walletName);\n      const address = await wallet.getChangeAddress();\n      this.selectedWallet = walletName;\n      this.#displayWallet();\n      Toastify({\n          text: `Successfully connected wallet ${address}!`,\n          duration: 3000\n      }).showToast();\n      window.postMessage({\n        type: \"CARDANO_DAPP_JS_CONNECT\",\n        wallet: { provider: walletName, address: address }\n      }, \"*\");\n    } catch (err) {\n      CardanoDApp.#toastWalletError(err);\n    }\n  }\n\n  #displayWallet() {\n    if (this.isWalletConnected() && this.containerId) {\n      document.querySelector(`#${this.#getBannerEl()}`).textContent = `Connected to ${this.selectedWallet}!`;\n    }\n  }\n\n  getConnectedWallet() {\n    if (this.selectedWallet === undefined) {\n      throw 'No wallet connected to enable';\n    }\n    return CardanoDApp.#enableWallet(this.selectedWallet);\n  }\n\n  async numPolicyAssets(policy) {\n    const policyAssets = {};\n    const currentWallet = await this.getConnectedWallet();\n    const utxos = await currentWallet.getUtxos();\n    for (const utxoStr of utxos) {\n      const utxoBytes = fromHex(utxoStr);\n      const coreUtxo = LCore.TransactionUnspentOutput.from_bytes(utxoBytes);\n      const utxo = coreToUtxo(coreUtxo)\n      const assets = utxo.assets;\n      for (const asset in assets) {\n        if (asset.startsWith(policy)) {\n          policyAssets[asset] = assets[asset];\n        }\n      }\n    }\n    return Object.values(policyAssets).reduce((acc, amount) => acc + amount, 0n);\n  }\n\n  async walletMeetsTokenGate(tokenGateMap) {\n    for (const policy in tokenGateMap) {\n      const numPolicyAssets = await this.numPolicyAssets(policy);\n      if (numPolicyAssets >= tokenGateMap[policy]) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  isWalletConnected() {\n    return this.selectedWallet !== undefined;\n  }\n\n}\n"]}