@metamask/providers
Version:
A JavaScript Ethereum provider that connects to the wallet over a stream
1 lines • 4.04 kB
Source Map (JSON)
{"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"]}