diff --git a/.gitignore b/.gitignore
index a2d06ff28a0..bf01c765d8e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,8 +49,7 @@ buck-out/
coverage
# app-specific
-/android/app/src/main/assets/entry-web3.js
-/android/app/src/main/assets/entry.js
-/app/entry-web3.js
-/app/entry.js
+/android/app/src/main/assets/InpageBridge.js
+/android/app/src/main/assets/InpageBridgeWeb3.js
+/app/core/InpageBridgeWeb3.js
/shim.js
diff --git a/.prettierignore b/.prettierignore
index 5833f809555..569d0b9b55d 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,8 +1,6 @@
-/app/entry.js
-/app/entry-web3.js
-/android/app/src/main/assets/entry.js
-/android/app/src/main/assets/entry-web3.js
-/app/entry.js
+/android/app/src/main/assets/InpageBridge.js
+/android/app/src/main/assets/InpageBridgeWeb3.js
+/app/core/InpageBridgeWeb3.js
/shim.js
/shim.js
__snapshots__
diff --git a/app/components/App/index.js b/app/components/App/index.js
index ccc892860de..4b06f0c392c 100644
--- a/app/components/App/index.js
+++ b/app/components/App/index.js
@@ -19,7 +19,9 @@ const engine = new Engine();
export default createBottomTabNavigator(
{
Home: {
- screen: BrowserScreen,
+ screen: function Home() {
+ return ;
+ },
navigationOptions: () => ({
title: 'ÐApps',
tabBarIcon: ico => // eslint-disable-line react/display-name
diff --git a/app/components/Browser/index.js b/app/components/Browser/index.js
index 46e77e13de0..757706fb0eb 100644
--- a/app/components/Browser/index.js
+++ b/app/components/Browser/index.js
@@ -5,6 +5,7 @@ import RNFS from 'react-native-fs';
import CustomWebview from '../CustomWebview'; // eslint-disable-line import/no-unresolved
import { Alert, Platform, StyleSheet, TextInput, View } from 'react-native';
import { colors, baseStyles } from '../../styles/common';
+import BackgroundBridge from '../../core/BackgroundBridge';
const styles = StyleSheet.create({
urlBar: {
@@ -50,7 +51,11 @@ export default class Browser extends Component {
/**
* Initial URL to load in the WebView
*/
- defaultURL: PropTypes.string.isRequired
+ defaultURL: PropTypes.string.isRequired,
+ /**
+ * Instance of a core engine object
+ */
+ engine: PropTypes.object.isRequired
};
state = {
@@ -70,16 +75,18 @@ export default class Browser extends Component {
webview = React.createRef();
async componentDidMount() {
+ this.backgroundBridge = new BackgroundBridge(this.props.engine, this.webview);
+
// TODO: The presence of these async statement breaks Jest code coverage
const entryScript =
Platform.OS === 'ios'
- ? await RNFS.readFile(`${RNFS.MainBundlePath}/entry.js`, 'utf8')
- : await RNFS.readFileAssets(`entry.js`);
+ ? await RNFS.readFile(`${RNFS.MainBundlePath}/InpageBridge.js`, 'utf8')
+ : await RNFS.readFileAssets(`InpageBridge.js`);
const entryScriptWeb3 =
Platform.OS === 'ios'
- ? await RNFS.readFile(`${RNFS.MainBundlePath}/entry-web3.js`, 'utf8')
- : await RNFS.readFileAssets(`entry-web3.js`);
+ ? await RNFS.readFile(`${RNFS.MainBundlePath}/InpageBridgeWeb3.js`, 'utf8')
+ : await RNFS.readFileAssets(`InpageBridgeWeb3.js`);
this.injection = { ...this.injection, entryScript, entryScriptWeb3 };
}
@@ -129,6 +136,9 @@ export default class Browser extends Component {
this.injection.includeWeb3 = !!data.web3;
this.handleProviderRequest();
break;
+ case 'INPAGE_REQUEST':
+ this.backgroundBridge.onMessage(data);
+ break;
}
};
diff --git a/app/components/BrowserScreen/index.js b/app/components/BrowserScreen/index.js
index 501373bd41b..b17ffd2e66a 100644
--- a/app/components/BrowserScreen/index.js
+++ b/app/components/BrowserScreen/index.js
@@ -1,4 +1,5 @@
import React, { Component } from 'react';
+import PropTypes from 'prop-types';
import Browser from '../Browser';
import Screen from '../Screen';
@@ -6,10 +7,17 @@ import Screen from '../Screen';
* Main view component for the browser screen
*/
export default class BrowserScreen extends Component {
+ static propTypes = {
+ /**
+ * Instance of a core engine object
+ */
+ engine: PropTypes.object.isRequired
+ };
+
render() {
return (
-
+
);
}
diff --git a/app/core/BackgroundBridge.js b/app/core/BackgroundBridge.js
new file mode 100644
index 00000000000..6882b9267c4
--- /dev/null
+++ b/app/core/BackgroundBridge.js
@@ -0,0 +1,45 @@
+export class InpageBridge {
+ _engine;
+ _webview;
+
+ _onInpageRequest(payload) {
+ const { current } = this._webview;
+ const { provider } = this._engine.api.network;
+ provider.sendAsync(payload, (error, response) => {
+ current &&
+ current.postMessage(
+ JSON.stringify({
+ type: 'INPAGE_RESPONSE',
+ payload: { error, response, __mmID: payload.__mmID }
+ })
+ );
+ });
+ }
+
+ _sendStateUpdate = () => {
+ const { current } = this._webview;
+ const { network, selectedAddress } = this._engine.datamodel.flatState;
+ current &&
+ current.postMessage({
+ type: 'STATE_UPDATE',
+ payload: { network, selectedAddress }
+ });
+ };
+
+ constructor(engine, webview) {
+ this._engine = engine;
+ this._webview = webview;
+ engine.api.network.subscribe(this._sendStateUpdate);
+ engine.api.preferences.subscribe(this._sendStateUpdate);
+ }
+
+ onMessage({ type, payload }) {
+ switch (type) {
+ case 'INPAGE_REQUEST':
+ this._onInpageRequest(payload);
+ break;
+ }
+ }
+}
+
+export default InpageBridge;
diff --git a/app/core/BackgroundBridge.test.js b/app/core/BackgroundBridge.test.js
new file mode 100644
index 00000000000..8bc8fd1ab38
--- /dev/null
+++ b/app/core/BackgroundBridge.test.js
@@ -0,0 +1,66 @@
+import BackgroundBridge from './BackgroundBridge';
+
+const MOCK_ENGINE = {
+ datamodel: {
+ flatState: {
+ selectedAddress: 'foo',
+ network: 'bar'
+ }
+ },
+ api: {
+ network: {
+ provider: {
+ sendAsync(payload, callback) {
+ callback(undefined, true);
+ }
+ },
+ subscribe(callback) {
+ callback(true);
+ }
+ },
+ preferences: {
+ subscribe(callback) {
+ callback(true);
+ }
+ }
+ }
+};
+
+const MOCK_WEBVIEW = {
+ current: {
+ postMessage() {
+ /* eslint-disable-line no-empty */
+ }
+ }
+};
+
+describe('BackgroundBridge', () => {
+ it('should subscribe to network store', () => {
+ const { network, preferences } = MOCK_ENGINE.api;
+ const stub1 = spyOn(network, 'subscribe');
+ const stub2 = spyOn(preferences, 'subscribe');
+ new BackgroundBridge(MOCK_ENGINE);
+ expect(stub1).toBeCalled();
+ expect(stub2).toBeCalled();
+ });
+
+ it('should relay response from provider', () => {
+ const bridge = new BackgroundBridge(MOCK_ENGINE, MOCK_WEBVIEW);
+ bridge.onMessage({ type: 'FOO' });
+ const stub = spyOn(MOCK_WEBVIEW.current, 'postMessage');
+ bridge.onMessage({ type: 'INPAGE_REQUEST', payload: { method: 'net_version' } });
+ expect(stub).toBeCalledWith(JSON.stringify({ type: 'INPAGE_RESPONSE', payload: { response: true } }));
+ });
+
+ it('should emit state update', () => {
+ const stub = spyOn(MOCK_WEBVIEW.current, 'postMessage');
+ new BackgroundBridge(MOCK_ENGINE, MOCK_WEBVIEW);
+ expect(stub).toBeCalledWith({
+ payload: {
+ network: 'bar',
+ selectedAddress: 'foo'
+ },
+ type: 'STATE_UPDATE'
+ });
+ });
+});
diff --git a/app/core/Engine.test.js b/app/core/Engine.test.js
new file mode 100644
index 00000000000..e642a6b590b
--- /dev/null
+++ b/app/core/Engine.test.js
@@ -0,0 +1,18 @@
+import Engine from './Engine';
+
+describe('Engine', () => {
+ it('should expose an API', () => {
+ const engine = new Engine();
+ expect(engine.api).toHaveProperty('accountTracker');
+ expect(engine.api).toHaveProperty('addressBook');
+ expect(engine.api).toHaveProperty('blockHistory');
+ expect(engine.api).toHaveProperty('currencyRate');
+ expect(engine.api).toHaveProperty('keyring');
+ expect(engine.api).toHaveProperty('network');
+ expect(engine.api).toHaveProperty('networkStatus');
+ expect(engine.api).toHaveProperty('phishing');
+ expect(engine.api).toHaveProperty('preferences');
+ expect(engine.api).toHaveProperty('shapeShift');
+ expect(engine.api).toHaveProperty('tokenRates');
+ });
+});
diff --git a/app/core/InpageBridge.js b/app/core/InpageBridge.js
new file mode 100644
index 00000000000..988738d3709
--- /dev/null
+++ b/app/core/InpageBridge.js
@@ -0,0 +1,92 @@
+class InpageBridge {
+ _onMessage(data) {
+ try {
+ const { payload, type } = JSON.parse(data);
+ switch (type) {
+ case 'STATE_UPDATE':
+ this._onStateUpdate(payload);
+ break;
+
+ case 'INPAGE_RESPONSE':
+ this._onBackgroundResponse(payload);
+ break;
+ }
+ } catch (error) {
+ /* eslint-disable-line no-empty */
+ }
+ }
+
+ _onBackgroundResponse({ __mmID, error, response }) {
+ const callback = this._pending[__mmID];
+ callback && callback(error, response);
+ delete this._pending[__mmID];
+ }
+
+ _onStateUpdate(state) {
+ this._selectedAddress = state.selectedAddress;
+ this._network = state.network;
+ }
+
+ constructor() {
+ this._pending = {};
+ this.isMetamask = true;
+ document.addEventListener('message', ({ data }) => {
+ this._onMessage(data);
+ });
+ }
+
+ isConnected() {
+ return true;
+ }
+
+ send(payload) {
+ let result;
+
+ switch (payload.method) {
+ case 'eth_accounts':
+ result = this._selectedAddress ? [this._selectedAddress] : [];
+ break;
+
+ case 'eth_coinbase':
+ result = this._selectedAddress;
+ break;
+
+ case 'eth_uninstallFilter':
+ this.sendAsync(payload);
+ break;
+
+ case 'net_version':
+ result = this._network;
+ break;
+
+ default:
+ throw new Error(
+ `This provider requires a callback to be passed when executing methods like ${
+ payload.method
+ }. This is because all methods are always executed asynchonously. See https://git.io/fNi6S for more information.`
+ );
+ }
+
+ return {
+ id: payload.id,
+ jsonrpc: payload.jsonrpc,
+ result
+ };
+ }
+
+ sendAsync(payload, callback) {
+ payload = { ...payload, ...{ __mmID: Date.now() } };
+ this._pending[payload.__mmID] = callback;
+ window.postMessage(
+ {
+ payload,
+ type: 'INPAGE_REQUEST'
+ },
+ '*'
+ );
+ }
+}
+
+window.ethereum = new InpageBridge();
+
+window.originalPostMessage({ type: 'ETHEREUM_PROVIDER_SUCCESS' }, '*');
diff --git a/app/core/InpageBridge.test.js b/app/core/InpageBridge.test.js
new file mode 100644
index 00000000000..03d7872d993
--- /dev/null
+++ b/app/core/InpageBridge.test.js
@@ -0,0 +1,115 @@
+let INSTANCE;
+let LISTENER;
+
+describe('InpageBridge', () => {
+ beforeAll(() => {
+ global.window = {
+ postMessage: jest.fn(),
+ originalPostMessage: jest.fn()
+ };
+
+ global.document = {
+ addEventListener(type, callback) {
+ LISTENER = callback;
+ }
+ };
+
+ Object.defineProperty(window, 'ethereum', {
+ set(instance) {
+ expect(instance).toBeDefined();
+ INSTANCE = instance;
+ }
+ });
+ require('./InpageBridge');
+ });
+
+ it('should return connection status', () => {
+ expect(INSTANCE.isConnected()).toBe(true);
+ });
+
+ it('should set internal state', () => {
+ LISTENER({
+ data: JSON.stringify({
+ type: 'STATE_UPDATE',
+ payload: {
+ selectedAddress: 'foo',
+ network: 'bar'
+ }
+ })
+ });
+ expect(INSTANCE.send({ method: 'eth_coinbase' }).result).toBe('foo');
+ });
+
+ it('should return current account', () => {
+ LISTENER({
+ data: JSON.stringify({
+ type: 'STATE_UPDATE',
+ payload: {
+ selectedAddress: undefined,
+ network: 'bar'
+ }
+ })
+ });
+ expect(INSTANCE.send({ method: 'eth_accounts' }).result).toEqual([]);
+ LISTENER({
+ data: JSON.stringify({
+ type: 'STATE_UPDATE',
+ payload: {
+ selectedAddress: 'foo',
+ network: 'bar'
+ }
+ })
+ });
+ expect(INSTANCE.send({ method: 'eth_accounts' }).result).toEqual(['foo']);
+ });
+
+ it('should return current network', () => {
+ LISTENER({
+ data: JSON.stringify({
+ type: 'STATE_UPDATE',
+ payload: {
+ selectedAddress: 'foo',
+ network: 'bar'
+ }
+ })
+ });
+ expect(INSTANCE.send({ method: 'net_version' }).result).toBe('bar');
+ });
+
+ it('should throw for unrecognized synchronous method', () => {
+ expect(() => {
+ INSTANCE.send({ method: 'foo' });
+ }).toThrow();
+ });
+
+ it('should forward asynchronous RPC request', () => {
+ const stub = spyOn(global.window, 'postMessage');
+ INSTANCE.sendAsync({ method: 'foo' }, () => {
+ /* eslint-disable-line no-empty */
+ });
+ expect(stub).toBeCalled();
+ });
+
+ it('should return current network', () => {
+ const stub = spyOn(INSTANCE, 'sendAsync');
+ INSTANCE.send({ method: 'eth_uninstallFilter' });
+ expect(stub).toBeCalled();
+ });
+
+ it('should call listener from background message', () => {
+ const mock = jest.fn();
+ INSTANCE.sendAsync({ method: 'foo' }, mock);
+ const pendingKeys = Object.keys(INSTANCE._pending);
+ LISTENER({
+ data: JSON.stringify({
+ type: 'INPAGE_RESPONSE',
+ payload: {
+ __mmID: pendingKeys[pendingKeys.length - 1],
+ error: 'error',
+ response: 'response'
+ }
+ })
+ });
+ expect(mock).toBeCalled();
+ });
+});
diff --git a/app/entry-web3.node.js b/app/entry-web3.node.js
deleted file mode 100644
index 19c7d3b8e26..00000000000
--- a/app/entry-web3.node.js
+++ /dev/null
@@ -1,3 +0,0 @@
-window.ethereum = true;
-window.web3 = true;
-window.alert('party on web3');
diff --git a/app/entry.node.js b/app/entry.node.js
deleted file mode 100644
index 98a4b85e3da..00000000000
--- a/app/entry.node.js
+++ /dev/null
@@ -1,2 +0,0 @@
-window.ethereum = true;
-window.alert('party on');
diff --git a/app/util/setProvider.js b/app/util/setProvider.js
new file mode 100644
index 00000000000..1c95c73ae69
--- /dev/null
+++ b/app/util/setProvider.js
@@ -0,0 +1,2 @@
+/* globals Web3 */
+window.web3 = new Web3(window.ethereum);
diff --git a/ios/MetaMask.xcodeproj/project.pbxproj b/ios/MetaMask.xcodeproj/project.pbxproj
index 18d00a1c8b5..780b9ace89f 100644
--- a/ios/MetaMask.xcodeproj/project.pbxproj
+++ b/ios/MetaMask.xcodeproj/project.pbxproj
@@ -5,6 +5,7 @@
};
objectVersion = 46;
objects = {
+
/* Begin PBXBuildFile section */
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
@@ -13,6 +14,7 @@
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
00E356F31AD99517003FC87E /* MetaMaskTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* MetaMaskTests.m */; };
123752B9768C469A85058888 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E9629905BA1940ADA4189921 /* Feather.ttf */; };
+ 131AA188550F45659821D213 /* libRNOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E8CFB912C597432783D2F954 /* libRNOS.a */; };
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
@@ -45,8 +47,8 @@
657046E69A8E4E9CBC092A88 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A498EA4CD2F8488DB666B94C /* Entypo.ttf */; };
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
900DAC87A8AB4C8092EA3682 /* libRNRandomBytes.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8ABF9E3C7C334558A19A8C88 /* libRNRandomBytes.a */; };
- A02FF29C210FCEBB0057412D /* entry-web3.js in Resources */ = {isa = PBXBuildFile; fileRef = A02FF29B210FCEBB0057412D /* entry-web3.js */; };
- A0E2F0B8210276220084ABC0 /* entry.js in Resources */ = {isa = PBXBuildFile; fileRef = A0E2F08E210276210084ABC0 /* entry.js */; };
+ A08668322114F68B0067EAF1 /* InpageBridge.js in Resources */ = {isa = PBXBuildFile; fileRef = A08668302114F68A0067EAF1 /* InpageBridge.js */; };
+ A08668332114F68B0067EAF1 /* InpageBridgeWeb3.js in Resources */ = {isa = PBXBuildFile; fileRef = A08668312114F68B0067EAF1 /* InpageBridgeWeb3.js */; };
AAACFD03192C40F8A1B38A8A /* libRCTWKWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 893E46C6BCE84DC19E928BBD /* libRCTWKWebView.a */; };
ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; };
C5AD5D88262D40E8AD14096C /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5E32A09A7BDC431FA403BA73 /* FontAwesome.ttf */; };
@@ -56,7 +58,6 @@
F5C5F10C32974C2D94FEA3F3 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BF485CDA047B4D52852B87F5 /* EvilIcons.ttf */; };
F719B7ED64E3484FB94EE77B /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 42C6DDE3B80F47AFA9C9D4F5 /* Foundation.ttf */; };
FD9BDCD5059C483EAE9C0160 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 70BCC86172F14AB2BF4DDA97 /* libRNVectorIcons.a */; };
- 131AA188550F45659821D213 /* libRNOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E8CFB912C597432783D2F954 /* libRNOS.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -151,20 +152,6 @@
remoteGlobalIDString = 0974579A1D2A440A000D9368;
remoteInfo = RCTWKWebView;
};
- 15D1586B210BAAFF006982B5 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 500343D7D81046209C481A89 /* RNRandomBytes.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 73EEC9391BFE4B1D00D468EB;
- remoteInfo = RNRandomBytes;
- };
- 15D1586D210BAAFF006982B5 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 500343D7D81046209C481A89 /* RNRandomBytes.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = 163CDE4E2087CAD3001065FB;
- remoteInfo = "RNRandomBytes-tvOS";
- };
2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
@@ -382,6 +369,13 @@
remoteGlobalIDString = 163CDE4E2087CAD3001065FB;
remoteInfo = "RNRandomBytes-tvOS";
};
+ A086682E2114F66B0067EAF1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 8EC0E414ED1C46238F2F10E4 /* RNOS.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 134814201AA4EA6300B7C361;
+ remoteInfo = RNOS;
+ };
ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */;
@@ -432,17 +426,17 @@
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; };
893E46C6BCE84DC19E928BBD /* libRCTWKWebView.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTWKWebView.a; sourceTree = ""; };
8ABF9E3C7C334558A19A8C88 /* libRNRandomBytes.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNRandomBytes.a; sourceTree = ""; };
- A02FF29B210FCEBB0057412D /* entry-web3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = "entry-web3.js"; path = "../app/entry-web3.js"; sourceTree = ""; };
- A0E2F08E210276210084ABC0 /* entry.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = entry.js; path = ../app/entry.js; sourceTree = ""; };
+ 8EC0E414ED1C46238F2F10E4 /* RNOS.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNOS.xcodeproj; path = "../node_modules/react-native-os/ios/RNOS.xcodeproj"; sourceTree = ""; };
+ A08668302114F68A0067EAF1 /* InpageBridge.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = InpageBridge.js; path = ../app/core/InpageBridge.js; sourceTree = ""; };
+ A08668312114F68B0067EAF1 /* InpageBridgeWeb3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = InpageBridgeWeb3.js; path = ../app/core/InpageBridgeWeb3.js; sourceTree = ""; };
A498EA4CD2F8488DB666B94C /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; };
ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; };
BF485CDA047B4D52852B87F5 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; };
CF0899B651A847EDB227BE12 /* libRNFS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFS.a; sourceTree = ""; };
E34F71B40BF74968A8800F3A /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; };
+ E8CFB912C597432783D2F954 /* libRNOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNOS.a; sourceTree = ""; };
E9629905BA1940ADA4189921 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; };
F562CA6B28AA4A67AA29B61C /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; };
- 8EC0E414ED1C46238F2F10E4 /* RNOS.xcodeproj */ = {isa = PBXFileReference; name = "RNOS.xcodeproj"; path = "../node_modules/react-native-os/ios/RNOS.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
- E8CFB912C597432783D2F954 /* libRNOS.a */ = {isa = PBXFileReference; name = "libRNOS.a"; path = "libRNOS.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -588,8 +582,8 @@
13B07FAE1A68108700A75B9A /* MetaMask */ = {
isa = PBXGroup;
children = (
- A0E2F08E210276210084ABC0 /* entry.js */,
- A02FF29B210FCEBB0057412D /* entry-web3.js */,
+ A08668302114F68A0067EAF1 /* InpageBridge.js */,
+ A08668312114F68B0067EAF1 /* InpageBridgeWeb3.js */,
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
@@ -632,6 +626,7 @@
893E46C6BCE84DC19E928BBD /* libRCTWKWebView.a */,
8ABF9E3C7C334558A19A8C88 /* libRNRandomBytes.a */,
14E7DBD0B81B4F6087628BA0 /* libRNRandomBytes-tvOS.a */,
+ E8CFB912C597432783D2F954 /* libRNOS.a */,
);
name = "Recovered References";
sourceTree = "";
@@ -661,15 +656,6 @@
name = Products;
sourceTree = "";
};
- 15D1583F210BAAFF006982B5 /* Products */ = {
- isa = PBXGroup;
- children = (
- 15D1586C210BAAFF006982B5 /* libRNRandomBytes.a */,
- 15D1586E210BAAFF006982B5 /* libRNRandomBytes-tvOS.a */,
- );
- name = Products;
- sourceTree = "";
- };
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
@@ -784,6 +770,14 @@
name = Products;
sourceTree = "";
};
+ A086682B2114F66B0067EAF1 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ A086682F2114F66B0067EAF1 /* libRNOS.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
ADBDB9201DFEBF0600ED6528 /* Products */ = {
isa = PBXGroup;
children = (
@@ -960,6 +954,10 @@
ProductGroup = 15A2E6172100077700A1F331 /* Products */;
ProjectRef = 6EFAC8C8B451455A999A0F09 /* RNFS.xcodeproj */;
},
+ {
+ ProductGroup = A086682B2114F66B0067EAF1 /* Products */;
+ ProjectRef = 8EC0E414ED1C46238F2F10E4 /* RNOS.xcodeproj */;
+ },
{
ProductGroup = A02FF293210FCE6F0057412D /* Products */;
ProjectRef = 500343D7D81046209C481A89 /* RNRandomBytes.xcodeproj */;
@@ -1064,20 +1062,6 @@
remoteRef = 15C1F6A12100D07200DEA29E /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
- 15D1586C210BAAFF006982B5 /* libRNRandomBytes.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = libRNRandomBytes.a;
- remoteRef = 15D1586B210BAAFF006982B5 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
- 15D1586E210BAAFF006982B5 /* libRNRandomBytes-tvOS.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libRNRandomBytes-tvOS.a";
- remoteRef = 15D1586D210BAAFF006982B5 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@@ -1288,6 +1272,13 @@
remoteRef = A02FF299210FCE720057412D /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
+ A086682F2114F66B0067EAF1 /* libRNOS.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libRNOS.a;
+ remoteRef = A086682E2114F66B0067EAF1 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@@ -1309,17 +1300,17 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ A08668332114F68B0067EAF1 /* InpageBridgeWeb3.js in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
657046E69A8E4E9CBC092A88 /* Entypo.ttf in Resources */,
F5C5F10C32974C2D94FEA3F3 /* EvilIcons.ttf in Resources */,
- A02FF29C210FCEBB0057412D /* entry-web3.js in Resources */,
123752B9768C469A85058888 /* Feather.ttf in Resources */,
C5AD5D88262D40E8AD14096C /* FontAwesome.ttf in Resources */,
F719B7ED64E3484FB94EE77B /* Foundation.ttf in Resources */,
4EC316415D2D4557B2DFB781 /* Ionicons.ttf in Resources */,
+ A08668322114F68B0067EAF1 /* InpageBridge.js in Resources */,
3EA7CE27B8AB49009E49CFE6 /* MaterialCommunityIcons.ttf in Resources */,
- A0E2F0B8210276220084ABC0 /* entry.js in Resources */,
F0C672CC75F549ABBA1CF52A /* MaterialIcons.ttf in Resources */,
5992255DBD134582AE0C5AA5 /* Octicons.ttf in Resources */,
15D158ED210BD912006982B5 /* Metamask.ttf in Resources */,
diff --git a/package-lock.json b/package-lock.json
index 444cbb2922f..104f89b3fd7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -760,16 +760,6 @@
"integrity": "sha512-MqJ00WXw89ga0rK6GZkdmmgv3bAsxpJixyTthjcix73O44pBqotyU2BejBkLuIsaOBI6SEu77vAnSyLe5iIHkw==",
"dev": true
},
- "JSONStream": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.3.tgz",
- "integrity": "sha512-3Sp6WZZ/lXl+nTDoGpGWHEpTnnC6X5fnkolYZR6nwIfzbxxvA8utPWe1gCt7i0m9uVGsSz2IS8K8mJ7HmlduMg==",
- "dev": true,
- "requires": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- }
- },
"abab": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
@@ -804,15 +794,6 @@
"integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
"dev": true
},
- "acorn-dynamic-import": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
- "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
- "dev": true,
- "requires": {
- "acorn": "^5.0.0"
- }
- },
"acorn-globals": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz",
@@ -831,17 +812,6 @@
"acorn": "^5.0.3"
}
},
- "acorn-node": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.5.2.tgz",
- "integrity": "sha512-krFKvw/d1F17AN3XZbybIUzEY4YEPNiGo05AfP3dBlfVKrMHETKpgjpuZkSF8qDNt9UkQcqj7am8yJLseklCMg==",
- "dev": true,
- "requires": {
- "acorn": "^5.7.1",
- "acorn-dynamic-import": "^3.0.0",
- "xtend": "^4.0.1"
- }
- },
"aes-js": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/aes-js/-/aes-js-0.2.4.tgz",
@@ -1379,9 +1349,12 @@
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"asn1": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
},
"asn1.js": {
"version": "4.10.1",
@@ -1400,23 +1373,6 @@
"dev": true,
"requires": {
"util": "0.10.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.1"
- }
- }
}
},
"assert-plus": {
@@ -2642,6 +2598,11 @@
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.34.tgz",
"integrity": "sha512-+w6B0Uo0ZvTSzDkXjoBCTNK0oe+aVL+yPi7kwGZm8hd8+Nj1AFPoxoq1Bl/mEu/G/ivOkUc1LRqVR0XeWFUzuA=="
},
+ "bignumber.js": {
+ "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934",
+ "from": "git+https://github.com/frozeman/bignumber.js-nolookahead.git",
+ "dev": true
+ },
"bindings": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
@@ -2754,20 +2715,6 @@
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
},
- "browser-pack": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
- "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "combine-source-map": "~0.8.0",
- "defined": "^1.0.0",
- "safe-buffer": "^5.1.1",
- "through2": "^2.0.0",
- "umd": "^3.0.0"
- }
- },
"browser-passworder": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/browser-passworder/-/browser-passworder-2.0.3.tgz",
@@ -2799,117 +2746,6 @@
}
}
},
- "browserify": {
- "version": "16.2.2",
- "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.2.tgz",
- "integrity": "sha512-fMES05wq1Oukts6ksGUU2TMVHHp06LyQt0SIwbXIHm7waSrQmNBZePsU0iM/4f94zbvb/wHma+D1YrdzWYnF/A==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "assert": "^1.4.0",
- "browser-pack": "^6.0.1",
- "browser-resolve": "^1.11.0",
- "browserify-zlib": "~0.2.0",
- "buffer": "^5.0.2",
- "cached-path-relative": "^1.0.0",
- "concat-stream": "^1.6.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "~1.0.0",
- "crypto-browserify": "^3.0.0",
- "defined": "^1.0.0",
- "deps-sort": "^2.0.0",
- "domain-browser": "^1.2.0",
- "duplexer2": "~0.1.2",
- "events": "^2.0.0",
- "glob": "^7.1.0",
- "has": "^1.0.0",
- "htmlescape": "^1.1.0",
- "https-browserify": "^1.0.0",
- "inherits": "~2.0.1",
- "insert-module-globals": "^7.0.0",
- "labeled-stream-splicer": "^2.0.0",
- "mkdirp": "^0.5.0",
- "module-deps": "^6.0.0",
- "os-browserify": "~0.3.0",
- "parents": "^1.0.1",
- "path-browserify": "~0.0.0",
- "process": "~0.11.0",
- "punycode": "^1.3.2",
- "querystring-es3": "~0.2.0",
- "read-only-stream": "^2.0.0",
- "readable-stream": "^2.0.2",
- "resolve": "^1.1.4",
- "shasum": "^1.0.0",
- "shell-quote": "^1.6.1",
- "stream-browserify": "^2.0.0",
- "stream-http": "^2.0.0",
- "string_decoder": "^1.1.1",
- "subarg": "^1.0.0",
- "syntax-error": "^1.1.1",
- "through2": "^2.0.0",
- "timers-browserify": "^1.0.1",
- "tty-browserify": "0.0.1",
- "url": "~0.11.0",
- "util": "~0.10.1",
- "vm-browserify": "^1.0.0",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "buffer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz",
- "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==",
- "dev": true,
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
- }
- },
- "events": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
- "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "stream-browserify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
- "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
- "dev": true,
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "vm-browserify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
- "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
- "dev": true
- }
- }
- },
"browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
@@ -2980,15 +2816,6 @@
"resolved": "https://registry.npmjs.org/browserify-unibabel/-/browserify-unibabel-3.0.0.tgz",
"integrity": "sha1-WmuPD3BM44jTkn30czfiWDD3Hdo="
},
- "browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dev": true,
- "requires": {
- "pako": "~1.0.5"
- }
- },
"browserslist": {
"version": "3.2.8",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
@@ -3048,12 +2875,6 @@
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
},
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -3082,12 +2903,6 @@
}
}
},
- "cached-path-relative": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
- "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
- "dev": true
- },
"caller-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
@@ -3109,9 +2924,9 @@
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
},
"caniuse-lite": {
- "version": "1.0.30000865",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz",
- "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw=="
+ "version": "1.0.30000874",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000874.tgz",
+ "integrity": "sha512-29nr1EPiHwrJTAHHsEmTt2h+55L8j2GNFdAcYPlRy2NX6iFz7ZZiepVI7kP/QqlnHLq3KvfWpbmGa0d063U09w=="
},
"capture-exit": {
"version": "1.2.0",
@@ -3344,26 +3159,6 @@
"integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=",
"dev": true
},
- "combine-source-map": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
- "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
- "dev": true,
- "requires": {
- "convert-source-map": "~1.1.0",
- "inline-source-map": "~0.6.0",
- "lodash.memoize": "~3.0.3",
- "source-map": "~0.5.3"
- },
- "dependencies": {
- "convert-source-map": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
- "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
- "dev": true
- }
- }
- },
"combined-stream": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
@@ -3415,6 +3210,55 @@
"vary": "~1.1.2"
}
},
+ "concat": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz",
+ "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.9.0"
+ }
+ },
+ "concat-cli": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/concat-cli/-/concat-cli-4.0.0.tgz",
+ "integrity": "sha1-pzoPsNGLJYBOvnA7zDWSIyTb900=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "concat": "^1.0.0",
+ "yargs": "^3.30.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
+ "decamelize": "^1.1.1",
+ "os-locale": "^1.4.0",
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
+ }
+ }
+ }
+ },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -3458,21 +3302,6 @@
"utils-merge": "1.0.1"
}
},
- "console-browserify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
- "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
- "dev": true,
- "requires": {
- "date-now": "^0.1.4"
- }
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
"contains-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
@@ -3484,6 +3313,12 @@
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
"integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU="
},
+ "cookiejar": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
+ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==",
+ "dev": true
+ },
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -3594,24 +3429,11 @@
"which": "^1.2.9"
}
},
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
+ "crypto-js": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz",
+ "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=",
+ "dev": true
},
"css-select": {
"version": "1.2.0",
@@ -3679,12 +3501,6 @@
"integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==",
"dev": true
},
- "date-now": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
- "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
- "dev": true
- },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -3841,18 +3657,6 @@
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
- "deps-sort": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
- "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "shasum": "^1.0.0",
- "subarg": "^1.0.0",
- "through2": "^2.0.0"
- }
- },
"des.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
@@ -3880,25 +3684,6 @@
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
"integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I="
},
- "detective": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz",
- "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==",
- "dev": true,
- "requires": {
- "acorn-node": "^1.3.0",
- "defined": "^1.0.0",
- "minimist": "^1.1.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
- }
- },
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
@@ -3953,12 +3738,6 @@
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
"integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg="
},
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true
- },
"domelementtype": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
@@ -4003,32 +3782,6 @@
"create-hmac": "^1.1.4"
}
},
- "duplexer2": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -6402,12 +6155,6 @@
"lodash.padstart": "^4.1.0"
}
},
- "get-assigned-identifiers": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
- "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
- "dev": true
- },
"get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
@@ -6777,12 +6524,6 @@
"whatwg-encoding": "^1.0.1"
}
},
- "htmlescape": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
- "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
- "dev": true
- },
"htmlparser2": {
"version": "3.9.2",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
@@ -6842,12 +6583,6 @@
"sshpk": "^1.7.0"
}
},
- "https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
- "dev": true
- },
"husky": {
"version": "1.0.0-rc.13",
"resolved": "https://registry.npmjs.org/husky/-/husky-1.0.0-rc.13.tgz",
@@ -7046,15 +6781,6 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
- "inline-source-map": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
- "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
- "dev": true,
- "requires": {
- "source-map": "~0.5.3"
- }
- },
"inquirer": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
@@ -7131,32 +6857,6 @@
}
}
},
- "insert-module-globals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz",
- "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "acorn-node": "^1.5.2",
- "combine-source-map": "^0.8.0",
- "concat-stream": "^1.6.1",
- "is-buffer": "^1.1.0",
- "path-is-absolute": "^1.0.1",
- "process": "~0.11.0",
- "through2": "^2.0.0",
- "undeclared-identifiers": "^1.1.2",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- }
- }
- },
"invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -9086,12 +8786,6 @@
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
"integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
},
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "dev": true
- },
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@@ -9151,25 +8845,6 @@
"integrity": "sha512-Zq/jyANIJ2uX8UZjWlqLwbyhcxSXJtT/Y89lClyeZd3l++3ztL1I5SSCYrbcbwSunTjC88N3WuMk0kRDQD6gzA==",
"dev": true
},
- "labeled-stream-splicer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
- "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "isarray": "^2.0.4",
- "stream-splicer": "^2.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz",
- "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==",
- "dev": true
- }
- }
- },
"lazy-cache": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
@@ -10002,12 +9677,6 @@
"integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
"dev": true
},
- "lodash.memoize": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
- "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
- "dev": true
- },
"lodash.pad": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz",
@@ -10775,46 +10444,6 @@
"minimist": "0.0.8"
}
},
- "module-deps": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.1.0.tgz",
- "integrity": "sha512-NPs5N511VD1rrVJihSso/LiBShRbJALYBKzDW91uZYy7BpjnO4bGnZL3HjZ9yKcFdZUWwaYjDz9zxbuP7vKMuQ==",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "browser-resolve": "^1.7.0",
- "cached-path-relative": "^1.0.0",
- "concat-stream": "~1.6.0",
- "defined": "^1.0.0",
- "detective": "^5.0.2",
- "duplexer2": "^0.1.2",
- "inherits": "^2.0.1",
- "parents": "^1.0.0",
- "readable-stream": "^2.0.2",
- "resolve": "^1.4.0",
- "stream-combiner2": "^1.1.1",
- "subarg": "^1.0.0",
- "through2": "^2.0.0",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
"moo": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz",
@@ -11326,12 +10955,6 @@
}
}
},
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
- "dev": true
- },
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
@@ -11382,21 +11005,6 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
},
- "pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
- "dev": true
- },
- "parents": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
- "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
- "dev": true,
- "requires": {
- "path-platform": "~0.11.15"
- }
- },
"parse-asn1": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
@@ -11456,12 +11064,6 @@
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
},
- "path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true
- },
"path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
@@ -11491,12 +11093,6 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
"integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
},
- "path-platform": {
- "version": "0.11.15",
- "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
- "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
- "dev": true
- },
"path-to-regexp": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
@@ -11774,18 +11370,6 @@
"strict-uri-encode": "^2.0.0"
}
},
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "dev": true
- },
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
- "dev": true
- },
"raf": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz",
@@ -11841,16 +11425,6 @@
"safe-buffer": "^5.1.0"
}
},
- "randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
"range-parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
@@ -12479,9 +12053,9 @@
}
},
"react-navigation": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-2.9.3.tgz",
- "integrity": "sha512-yKR7yYMwVrpEe1sPA1agGCmv+MdUuNX4xC2ZOLpx+wkhXF1GE3j0FD+l9t4YMwJb+fS0/nih/WAg5NL3eIZkeQ==",
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-2.10.0.tgz",
+ "integrity": "sha512-+Jt2PrJ3H+mYfexBySgvrEfXxJ0AAMZVYJNh8wXInHXGqrZKaSSd73z4yGcOkQQfsNE9sHjZk5yvE101KZJ+Ew==",
"requires": {
"clamp": "^1.0.1",
"create-react-context": "^0.2.1",
@@ -12491,8 +12065,8 @@
"react-lifecycles-compat": "^3",
"react-native-safe-area-view": "^0.8.0",
"react-navigation-deprecated-tab-navigator": "1.3.0",
- "react-navigation-drawer": "0.4.3",
- "react-navigation-tabs": "0.5.1"
+ "react-navigation-drawer": "0.5.0",
+ "react-navigation-tabs": "0.6.0"
}
},
"react-navigation-deprecated-tab-navigator": {
@@ -12504,17 +12078,17 @@
}
},
"react-navigation-drawer": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/react-navigation-drawer/-/react-navigation-drawer-0.4.3.tgz",
- "integrity": "sha512-ShPAnq2a7gfNl7O4SAPhP54Z6QNbd9KJ+NQgk5Q1llZFcrsQZ886iUb9KieGestft34c5VOVLrrPDjo8+hCJPQ==",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/react-navigation-drawer/-/react-navigation-drawer-0.5.0.tgz",
+ "integrity": "sha512-F1y593uC6pqBMGH+Omz75oNODEbxB/s0EGO8QtYwu1NmOOEUuuLA+c14zm+pgMsI4HlDabiHxPkWqsgGz25xVQ==",
"requires": {
"react-native-drawer-layout-polyfill": "^1.3.2"
}
},
"react-navigation-tabs": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/react-navigation-tabs/-/react-navigation-tabs-0.5.1.tgz",
- "integrity": "sha512-VwStdeQm5OcAW0n94CxL7qL0zgmnyBCXcgdBRf5hYpw4tWcVUIedgRF+rAWa1v3ftY6H0CXbnT2OKdbod5QJXA==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/react-navigation-tabs/-/react-navigation-tabs-0.6.0.tgz",
+ "integrity": "sha512-Ax1rujJ51R1Jrz7b5bHUAIgsYC1VrFws+d3hxlPy5dXG84iJdV5dnDFRvdQMDDfDZc+NDx2a223lAYsc3p2+XA==",
"requires": {
"hoist-non-react-statics": "^2.5.0",
"prop-types": "^15.6.1",
@@ -12588,32 +12162,6 @@
"react-proxy": "^1.1.7"
}
},
- "read-only-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
- "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
"read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
@@ -13527,27 +13075,6 @@
"nan": "2.10.0"
}
},
- "shasum": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
- "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
- "dev": true,
- "requires": {
- "json-stable-stringify": "~0.0.0",
- "sha.js": "~2.4.4"
- },
- "dependencies": {
- "json-stable-stringify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
- "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
- "dev": true,
- "requires": {
- "jsonify": "~0.0.0"
- }
- }
- }
- },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -13582,12 +13109,6 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
- "simple-concat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
- "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
- "dev": true
- },
"simple-plist": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz",
@@ -13953,90 +13474,6 @@
"resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
"integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ="
},
- "stream-combiner2": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
- "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
- "dev": true,
- "requires": {
- "duplexer2": "~0.1.0",
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
- "stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dev": true,
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
- "stream-splicer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
- "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- }
- }
- },
"strict-uri-encode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
@@ -14167,23 +13604,6 @@
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
- "subarg": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
- "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
- "dev": true,
- "requires": {
- "minimist": "^1.1.0"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
- }
- },
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
@@ -14201,15 +13621,6 @@
"integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
"dev": true
},
- "syntax-error": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
- "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
- "dev": true,
- "requires": {
- "acorn-node": "^1.2.0"
- }
- },
"table": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz",
@@ -14709,23 +14120,6 @@
"resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
"integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM="
},
- "timers-browserify": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
- "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
- "dev": true,
- "requires": {
- "process": "~0.11.0"
- },
- "dependencies": {
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- }
- }
- },
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -14739,12 +14133,6 @@
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
"integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE="
},
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
- "dev": true
- },
"to-fast-properties": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
@@ -14871,12 +14259,6 @@
"integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
"dev": true
},
- "tty-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
- "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
- "dev": true
- },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -14943,24 +14325,6 @@
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
"integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
},
- "umd": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
- "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
- "dev": true
- },
- "undeclared-identifiers": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz",
- "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==",
- "dev": true,
- "requires": {
- "acorn-node": "^1.3.0",
- "get-assigned-identifiers": "^1.2.0",
- "simple-concat": "^1.0.0",
- "xtend": "^4.0.1"
- }
- },
"underscore": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
@@ -15101,24 +14465,6 @@
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
},
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- }
- }
- },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -15130,12 +14476,20 @@
"integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY="
},
"util": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
- "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
"dev": true,
"requires": {
- "inherits": "2.0.3"
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ }
}
},
"util-deprecate": {
@@ -15228,6 +14582,19 @@
}
}
},
+ "web3": {
+ "version": "0.20.7",
+ "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.7.tgz",
+ "integrity": "sha512-VU6/DSUX93d1fCzBz7WP/SGCQizO1rKZi4Px9j/3yRyfssHyFcZamMw2/sj4E8TlfMXONvZLoforR8B4bRoyTQ==",
+ "dev": true,
+ "requires": {
+ "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934",
+ "crypto-js": "^3.1.4",
+ "utf8": "^2.1.1",
+ "xhr2-cookies": "^1.1.0",
+ "xmlhttprequest": "*"
+ }
+ },
"web3-provider-engine": {
"version": "14.0.6",
"resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz",
@@ -15409,6 +14776,15 @@
"xtend": "^4.0.0"
}
},
+ "xhr2-cookies": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz",
+ "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=",
+ "dev": true,
+ "requires": {
+ "cookiejar": "^2.1.1"
+ }
+ },
"xml-name-validator": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
@@ -15433,6 +14809,12 @@
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
"integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
},
+ "xmlhttprequest": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+ "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=",
+ "dev": true
+ },
"xpipe": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz",
diff --git a/package.json b/package.json
index eba8f2810ea..4756419bb6c 100644
--- a/package.json
+++ b/package.json
@@ -8,12 +8,12 @@
"lint": "eslint '**/*.js' --ignore-path=.prettierignore",
"lint:fix": "eslint '**/*.js' --fix --ignore-path=.prettierignore",
"format": "prettier '**/*.{js,json}' --write",
- "build": "browserify app/entry.node.js -o app/entry.js && browserify app/entry-web3.node.js -o app/entry-web3.js && ./scripts/copy-android-assets.sh",
+ "build": "concat-cli -f app/core/InpageBridge.js node_modules/web3/dist/web3.min.js app/util/setProvider.js -o app/core/InpageBridgeWeb3.js && ./scripts/copy-android-assets.sh",
"start:ios": "npm run build && react-native run-ios",
"start:android": "npm run build && react-native run-android",
"test": "jest",
"test:update": "jest -u",
- "postinstall": "./scripts/postinstall.sh npm run build"
+ "postinstall": "./scripts/postinstall.sh && npm run build"
},
"prettier": {
"printWidth": 120,
@@ -60,9 +60,10 @@
"vm-browserify": "0.0.4"
},
"devDependencies": {
+ "assert": "^1.4.1",
"babel-jest": "23.4.0",
"babel-preset-react-native": "5.0.2",
- "browserify": "^16.2.2",
+ "concat-cli": "^4.0.0",
"enzyme": "^3.0.0",
"enzyme-adapter-react-16": "^1.1.1",
"enzyme-to-json": "^3.3.4",
@@ -73,7 +74,8 @@
"lint-staged": "^7.2.0",
"prettier": "1.13.7",
"react-dom": "^16.4.1",
- "rn-nodeify": "github:tradle/rn-nodeify"
+ "rn-nodeify": "github:tradle/rn-nodeify",
+ "web3": "^0.20.7"
},
"babel": {
"presets": [
@@ -86,6 +88,7 @@
"react-native"
],
"globals": {
+ "beforeAll": true,
"describe": true,
"expect": true,
"it": true,
@@ -97,6 +100,7 @@
"eol-last": 1,
"import/no-named-as-default": 0,
"no-invalid-this": 0,
+ "no-new": 0,
"react/jsx-handler-names": 0,
"react/no-did-mount-set-state": 0,
"react/prefer-stateless-function": 0
diff --git a/scripts/copy-android-assets.sh b/scripts/copy-android-assets.sh
index 849560310da..88f0be042a3 100755
--- a/scripts/copy-android-assets.sh
+++ b/scripts/copy-android-assets.sh
@@ -1,5 +1,5 @@
# Copy JS files for injection
-yes | cp -rf app/entry.js android/app/src/main/assets/.
-yes | cp -rf app/entry-web3.js android/app/src/main/assets/.
+yes | cp -rf app/core/InpageBridge.js android/app/src/main/assets/.
+yes | cp -rf app/core/InpageBridgeWeb3.js android/app/src/main/assets/.
# Copy fonts with iconset
yes | cp -rf ./app/fonts/metamask.ttf ./android/app/src/main/assets/fonts/metamask.ttf