2016-07-06 20:32:36 -07:00
/*global Web3*/
2016-04-29 15:38:24 -07:00
cleanContextForImports ( )
2016-07-06 20:20:40 -07:00
require ( 'web3/dist/web3.min.js' )
2017-10-25 15:45:26 -07:00
const log = require ( 'loglevel' )
2016-08-11 14:04:20 -07:00
const LocalMessageDuplexStream = require ( 'post-message-stream' )
2018-06-12 09:28:50 -07:00
const exportWeb3Global = require ( './lib/auto-reload.js' )
2016-05-22 15:23:16 -07:00
const MetamaskInpageProvider = require ( './lib/inpage-provider.js' )
2016-04-29 15:38:24 -07:00
restoreContextAfterImports ( )
2016-04-15 12:12:04 -07:00
2018-04-12 14:06:59 -07:00
log . setDefaultLevel ( process . env . METAMASK _DEBUG ? 'debug' : 'warn' )
2015-10-09 23:14:18 -07:00
2016-02-14 21:53:54 -08:00
//
2015-12-18 22:05:16 -08:00
// setup plugin communication
2016-02-14 21:53:54 -08:00
//
2016-04-15 12:12:04 -07:00
// setup background connection
2016-05-22 15:23:16 -07:00
var metamaskStream = new LocalMessageDuplexStream ( {
2015-12-18 22:05:16 -08:00
name : 'inpage' ,
target : 'contentscript' ,
} )
2016-05-05 16:04:43 -07:00
2016-05-22 15:23:16 -07:00
// compose the inpage provider
var inpageProvider = new MetamaskInpageProvider ( metamaskStream )
2016-04-15 12:12:04 -07:00
2016-04-14 21:11:35 -07:00
//
2016-05-05 16:04:43 -07:00
// setup web3
2016-04-14 21:11:35 -07:00
//
2017-10-31 09:59:26 -07:00
if ( typeof window . web3 !== 'undefined' ) {
throw new Error ( ` MetaMask detected another web3.
MetaMask will not work reliably with another web3 extension .
This usually happens if you have two MetaMasks installed ,
or MetaMask and another web3 extension . Please remove one
and try again . ` )
}
2016-05-22 15:23:16 -07:00
var web3 = new Web3 ( inpageProvider )
2016-06-21 13:18:32 -07:00
web3 . setProvider = function ( ) {
2017-10-25 15:45:26 -07:00
log . debug ( 'MetaMask - overrode web3.setProvider' )
2016-04-14 21:11:35 -07:00
}
2017-10-25 15:45:26 -07:00
log . debug ( 'MetaMask - injected web3' )
2018-06-12 09:28:50 -07:00
// export global web3, with usage-detection and deprecation warning
exportWeb3Global ( web3 )
// let hasBeenWarned = false
// global.web3 = new Proxy(web3, {
// get: (_web3, key) => {
// // show warning once on web3 access
// if (!hasBeenWarned && key !== 'currentProvider') {
// console.warn('MetaMask: web3 will be deprecated in the near future in favor of the ethereumProvider \nhttps://github.com/MetaMask/faq/blob/master/detecting_metamask.md#web3-deprecation')
// hasBeenWarned = true
// }
// // return value normally
// return _web3[key]
// },
// set: (_web3, key, value) => {
// // set value normally
// _web3[key] = value
// },
// })
2016-04-15 13:04:17 -07:00
2017-01-30 15:25:12 -08:00
// set web3 defaultAccount
2016-06-21 13:18:32 -07:00
inpageProvider . publicConfigStore . subscribe ( function ( state ) {
2017-01-30 15:38:32 -08:00
web3 . eth . defaultAccount = state . selectedAddress
2016-04-15 13:04:17 -07:00
} )
2016-04-29 15:38:24 -07:00
// need to make sure we aren't affected by overlapping namespaces
// and that we dont affect the app with our namespace
// mostly a fix for web3's BigNumber if AMD's "define" is defined...
2016-06-21 13:18:32 -07:00
var _ _define
2016-04-29 15:38:24 -07:00
2018-04-18 14:02:08 -07:00
/ * *
2018-04-18 18:30:13 -07:00
* Caches reference to global define object and deletes it to
* avoid conflicts with other global define objects , such as
* AMD ' s define function
2018-04-18 14:02:08 -07:00
* /
2016-06-21 13:18:32 -07:00
function cleanContextForImports ( ) {
2016-04-29 15:38:24 -07:00
_ _define = global . define
2016-07-18 17:57:23 -07:00
try {
2016-08-22 19:22:12 -07:00
global . define = undefined
2016-07-18 17:57:23 -07:00
} catch ( _ ) {
console . warn ( 'MetaMask - global.define could not be deleted.' )
}
2016-04-29 15:38:24 -07:00
}
2018-04-18 14:02:08 -07:00
/ * *
* Restores global define object from cached reference
* /
2016-06-21 13:18:32 -07:00
function restoreContextAfterImports ( ) {
2016-07-18 17:57:23 -07:00
try {
global . define = _ _define
2016-07-18 18:08:29 -07:00
} catch ( _ ) {
2016-07-18 17:57:23 -07:00
console . warn ( 'MetaMask - global.define could not be overwritten.' )
}
2016-05-05 16:04:43 -07:00
}