{"version":3,"file":"shimWeb3.cjs","sourceRoot":"","sources":["../src/shimWeb3.ts"],"names":[],"mappings":";;AAUA,4BAyDC;AAhED;;;;;;GAMG;AACH,SAAgB,QAAQ,CACtB,QAAgC,EAChC,MAAmB,OAAO;IAE1B,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAClC,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAElC,IAAI,CAAE,MAA8B,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,eAAe,GAAG,oBAAoB,CAAC;QAE7C,IAAI,QAAQ,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;QAC7C,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE;YAC/C,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,QAAQ,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;YAC7B,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE;gBACjC,IAAI,QAAQ,KAAK,iBAAiB,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC7D,qBAAqB,GAAG,IAAI,CAAC;oBAC7B,GAAG,CAAC,IAAI,CACN,2NAA2N,CAC5N,CAAC;gBACJ,CAAC;qBAAM,IACL,QAAQ,KAAK,iBAAiB;oBAC9B,QAAQ,KAAK,eAAe;oBAC5B,CAAC,qBAAqB,EACtB,CAAC;oBACD,qBAAqB,GAAG,IAAI,CAAC;oBAC7B,GAAG,CAAC,KAAK,CACP,iIAAiI,CAClI,CAAC;oBACF,QAAQ;yBACL,OAAO,CAAC,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;yBAChD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;wBACf,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;oBAC/D,CAAC,CAAC,CAAC;gBACP,CAAC;gBACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;YAChD,CAAC;YACD,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;gBACf,GAAG,CAAC,IAAI,CACN,yMAAyM,CAC1M,CAAC;gBACF,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC9B,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;YACpC,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["import type { MetaMaskInpageProvider } from './MetaMaskInpageProvider';\nimport type { ConsoleLike } from './utils';\n\n/**\n * If no existing window.web3 is found, this function injects a web3 \"shim\" to\n * not break dapps that rely on window.web3.currentProvider.\n *\n * @param provider - The provider to set as window.web3.currentProvider.\n * @param log - The logging API to use.\n */\nexport function shimWeb3(\n  provider: MetaMaskInpageProvider,\n  log: ConsoleLike = console,\n): void {\n  let loggedCurrentProvider = false;\n  let loggedMissingProperty = false;\n\n  if (!(window as Record<string, any>).web3) {\n    const SHIM_IDENTIFIER = '__isMetaMaskShim__';\n\n    let web3Shim = { currentProvider: provider };\n    Object.defineProperty(web3Shim, SHIM_IDENTIFIER, {\n      value: true,\n      enumerable: true,\n      configurable: false,\n      writable: false,\n    });\n\n    web3Shim = new Proxy(web3Shim, {\n      get: (target, property, ...args) => {\n        if (property === 'currentProvider' && !loggedCurrentProvider) {\n          loggedCurrentProvider = true;\n          log.warn(\n            'You are accessing the MetaMask window.web3.currentProvider shim. This property is deprecated; use window.ethereum instead. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3',\n          );\n        } else if (\n          property !== 'currentProvider' &&\n          property !== SHIM_IDENTIFIER &&\n          !loggedMissingProperty\n        ) {\n          loggedMissingProperty = true;\n          log.error(\n            `MetaMask no longer injects web3. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3`,\n          );\n          provider\n            .request({ method: 'metamask_logWeb3ShimUsage' })\n            .catch((error) => {\n              log.debug('MetaMask: Failed to log web3 shim usage.', error);\n            });\n        }\n        return Reflect.get(target, property, ...args);\n      },\n      set: (...args) => {\n        log.warn(\n          'You are accessing the MetaMask window.web3 shim. This object is deprecated; use window.ethereum instead. For details, see: https://docs.metamask.io/guide/provider-migration.html#replacing-window-web3',\n        );\n        return Reflect.set(...args);\n      },\n    });\n\n    Object.defineProperty(window, 'web3', {\n      value: web3Shim,\n      enumerable: false,\n      configurable: true,\n      writable: true,\n    });\n  }\n}\n"]}