Skip to content

Commit 4b39ccd

Browse files
committedMar 12, 2021
working on getting close and disconnect events propagating
1 parent 85dbb76 commit 4b39ccd

File tree

17 files changed

+169
-24
lines changed

17 files changed

+169
-24
lines changed
 

‎example/app/src/App.vue

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<button @click="onClick">CONNECT</button>
55
<h3>{{ userAddress }}</h3>
66
<button @click="ecrecover">ecrecover</button>
7-
<button @click="showThing">CHECK</button>
7+
<button @click="doThing">CHECK</button>
88
<div v-show="userAddress === ''">
99
<button @click="selectNetwork(1)">Mainnet</button>
1010
<button @click="selectNetwork(3)">Ropsten</button>
@@ -468,6 +468,9 @@ export default {
468468
// })
469469
},
470470
methods: {
471+
doThing(){
472+
473+
},
471474
showThing() {
472475
console.log('CONSOLE CHECK'); // todo remove dev item
473476

‎jest.config.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ module.exports = {
44
collectCoverage: true,
55
setTimeout: 10000,
66
coverageDirectory: 'coverage',*/
7-
// testEnvironment: 'jsdom',
8-
testMatch: ['**/__tests__/**/*.js?(x)', '**/test/**/?(*.)+(spec|test).js?(x)'],
7+
testEnvironment: 'jsdom',
8+
testMatch: ['**/__tests__/**/*.js?(x)', '**/tests/**/?(*.)+(spec|test).js?(x)', '**/test/**/?(*.)+(spec|test).js?(x)'],
99
testPathIgnorePatterns: ['/node_modules/'],
10-
"testEnvironment": "node",
10+
// "testEnvironment": "node",
1111
/* transform: {
1212
"^.+\\.(js) ? $": "babel-jest"
1313
},*/

‎package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@myetherwallet/mewconnect-web-client",
33
"homepage": "https://github.com/myetherwallet/MEWconnect-web-client",
4-
"version": "2.1.23-beta.5",
4+
"version": "2.1.23-beta.7",
55
"main": "./dist/index.js",
66
"module": "./src/index.js",
77
"scripts": {
@@ -17,6 +17,7 @@
1717
"lint": "npx eslint --fix 'src/**.js'",
1818
"update:lists": "node src/connectProvider/fetchLists/index.js",
1919
"prepublishOnly": "npm install && npm run update:lists && npm run build",
20+
"prepack": "npm run build",
2021
"ci": "npm install && npm run update:lists && npm run build"
2122
},
2223
"gitHooks": {

‎src/connectClient/WebRtcCommunication.js

+7
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,10 @@ export default class WebRtcCommunication extends MewConnectCommon {
365365
}
366366

367367
onClose(peerID, data) {
368+
console.log('1'); // todo remove dev item
368369
debugStages('WRTC onClose event');
369370
debug('peerID', peerID);
371+
console.log('onClose', this.connected); // todo remove dev item
370372
if (!this.isAlive()) {
371373
debugStages('WRTC CLOSE', data);
372374
if (this.connected) {
@@ -377,6 +379,11 @@ export default class WebRtcCommunication extends MewConnectCommon {
377379
this.connected = false;
378380
}
379381
}
382+
if (this.connected) {
383+
this.emit(this.lifeCycle.RtcClosedEvent);
384+
this.uiCommunicator(this.lifeCycle.disconnected);
385+
this.connected = false;
386+
}
380387
}
381388

382389
onError(peerID, err) {

‎src/connectClient/constants/signals.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ const signalV2 = {
4141
initiated: 'initiated',
4242
socketTimeout: 'socketTimeout',
4343
receivedSignal: 'receivedSignal',
44-
error: 'error'
44+
error: 'error',
45+
disconnected: 'disconnected'
4546
};
4647

4748
export { signalV1, signalV2 };

‎src/connectClient/initiator/MewConnectInitiator.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ export default class MewConnectInitiator extends MewConnectCommon {
258258
}
259259
} else {
260260
this.uiCommunicator(this.lifeCycle.codeDisplay, qrCodeString);
261-
this.uiCommunicator(this.lifeCycle.checkNumber, privateKey);
261+
// this.uiCommunicator(this.lifeCycle.checkNumber, privateKey);
262262
this.uiCommunicator(this.lifeCycle.ConnectionId, this.connId);
263263
}
264264

@@ -394,9 +394,8 @@ Keys
394394
this.webRtcCommunication.once(
395395
this.jsonDetails.lifeCycle.RtcConnectedEvent,
396396
(peerid) => {
397-
console.log(peerid); // todo remove dev item
398397
this.webRtcCommunication.removeAllListeners(this.jsonDetails.lifeCycle.RtcConnectedEvent)
399-
console.log('RTC CONNECTED ENVIRONMENT SETUP'); // todo remove dev item
398+
debug('RTC CONNECTED ENVIRONMENT SETUP'); // todo remove dev item
400399
this.emit(this.lifeCycle.RtcConnectedEvent);
401400
this.webRtcCommunication.on('appData', this.dataReceived.bind(this));
402401
this.connected = true;

‎src/connectClient/initiator/MewConnectInitiatorV2.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,22 @@ export default class MewConnectInitiatorV2 extends MewConnectCommon {
236236
this.socketConnected = true;
237237
});
238238

239+
this.socket.on('onClose', () => {
240+
debugStages('SOCKET DISCONNECTED');
241+
this.socketConnected = false;
242+
if (!this.connected) {
243+
// show new QRcode
244+
}
245+
});
246+
239247
this.socketOn(this.signals.initiated, this.initiated.bind(this)); // response
248+
this.socketOn(this.signals.disconnected, data => {
249+
// this.beginRtcSequence(stunServers);
250+
}); // response
251+
240252
this.socketOn(this.signals.confirmation, data => {
241253
this.beginRtcSequence(stunServers);
242-
}); // response
254+
});
243255
// this.signals.answer
244256
this.socketOn('answer', this.recieveAnswer.bind(this));
245257
this.socketOn(

‎src/connectClient/websocketWrapper.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ export default class WebsocketConnection {
132132
}
133133

134134
if(parsedMessage.signal === 'ping' || parsedMessage.signal === 'pong') {
135-
console.log(parsedMessage); // todo remove dev item
136135
return;
137136
}
138137
const signal = parsedMessage.signal;
@@ -156,6 +155,9 @@ export default class WebsocketConnection {
156155

157156
onClose() {
158157
debug(`websocket onClose = ${this.getSocketState()}`);
158+
if(this.listeners['onClose']){
159+
this.listeners['onClose'].call(this);
160+
}
159161
}
160162

161163
/**

‎src/connectProvider/index.js

+20-2
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ export default class Integration extends EventEmitter {
293293
web3Provider.close = this.disconnect.bind(this);
294294
web3Provider.disconnect = this.disconnect.bind(this);
295295
state.web3Provider = web3Provider;
296-
296+
console.log(state.web3Provider); // todo remove dev item
297297
state.web3 = new Web3(web3Provider);
298298
if (!this.runningInApp) {
299299
state.web3.currentProvider.sendAsync = state.web3.currentProvider.send;
@@ -324,12 +324,19 @@ export default class Integration extends EventEmitter {
324324
() => {
325325
this.popUpHandler.showNotice(messageConstants.disconnect);
326326
MEWconnectWallet.setConnectionState(connection.lifeCycle.disconnected);
327+
console.log('DISCONNECT NOTIFIER', state.web3Provider); // todo remove dev item
327328
if (state.wallet !== null && state.web3Provider.disconnectCallback) {
328329
state.web3Provider.disconnectCallback();
329-
this.emit('disconnect')
330+
// this.emit('disconnect')
331+
}
332+
if (state.wallet !== null && state.web3Provider.closeCallback) {
333+
state.web3Provider.closeCallback();
334+
// this.emit('close')
330335
}
331336
state.wallet = null;
332337
this.emit(DISCONNECTED);
338+
this.emit('close')
339+
this.emit('disconnect')
333340
}
334341
);
335342

@@ -338,12 +345,23 @@ export default class Integration extends EventEmitter {
338345
() => {
339346
this.popUpHandler.showNotice(messageConstants.disconnect);
340347
MEWconnectWallet.setConnectionState(connection.lifeCycle.disconnected);
348+
console.log('DISCONNECT NOTIFIER', state.web3Provider); // todo remove dev item
341349
if (state.wallet !== null && state.web3Provider.disconnectCallback) {
350+
console.log('disconnectCallback', typeof state.web3Provider.closeCallback); // todo remove dev item
342351
state.web3Provider.disconnectCallback();
352+
state.web3Provider.emit('disconnect')
343353
this.emit('disconnect')
344354
}
355+
if (state.wallet !== null && state.web3Provider.closeCallback) {
356+
state.web3Provider.closeCallback();
357+
this.emit('close')
358+
state.web3Provider.emit('close')
359+
}
360+
345361
state.wallet = null;
346362
this.emit(connection.lifeCycle.disconnected);
363+
this.emit('close')
364+
this.emit('disconnect')
347365
}
348366
);
349367
}

‎src/connectProvider/web3Provider/web3-provider/providers/http-provider.js

+31
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class HttpProvider {
4848
});
4949
},
5050
notificationCallbacks: [],
51+
disconnectCallbacks: [],
52+
closeCallbacks: [],
5153
createSubscriptions: (subscription, ) => {
5254
requestManager.addSubscription()
5355
},
@@ -81,8 +83,37 @@ class HttpProvider {
8183
this.httpProvider.disconnectedCallback = callback;
8284
break;
8385
case 'disconnect':
86+
this.httpProvider.disconnectCallbacks.push(callback)
8487
this.httpProvider.disconnectCallback = callback;
8588
break;
89+
case 'close':
90+
this.httpProvider.closeCallbacks.push(callback)
91+
this.httpProvider.closeCallback = callback;
92+
break;
93+
}
94+
},
95+
emit:(type, data) => {
96+
if (typeof type !== 'string')
97+
throw new Error('The first parameter type must be a function.');
98+
99+
switch (type) {
100+
101+
// case 'accountsChanged':
102+
// this.accountsChanged = callback;
103+
// break;
104+
// case 'disconnected':
105+
// this.disconnectedCallback = callback;
106+
// break;
107+
case 'disconnect':
108+
this.httpProvider.disconnectCallbacks.forEach(function(callback) {
109+
if (typeof callback === 'function') callback(data);
110+
});
111+
break;
112+
case 'close':
113+
this.httpProvider.closeCallbacks.forEach(function(callback) {
114+
if (typeof callback === 'function') callback(data);
115+
});
116+
break;
86117
}
87118
}
88119
};

‎src/connectProvider/web3Provider/web3-provider/providers/ws-web3-provider.js

+50
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ const WebsocketProvider = function WebsocketProvider(url, options) {
1919
const _this = this;
2020
this.responseCallbacks = {};
2121
this.notificationCallbacks = [];
22+
this.closeCallbacks = [];
23+
this.disconnectCallbacks = []
2224

2325
options = options || {};
2426
this._customTimeout = options.timeout;
@@ -191,6 +193,7 @@ WebsocketProvider.prototype.send = function(payload, callback) {
191193
WebsocketProvider.prototype.on = function(type, callback) {
192194
if (typeof callback !== 'function')
193195
throw new Error('The second parameter callback must be a function.');
196+
console.log('set callback'); // todo remove dev item
194197

195198
switch (type) {
196199
case 'data':
@@ -216,8 +219,39 @@ WebsocketProvider.prototype.on = function(type, callback) {
216219
this.disconnectedCallback = callback;
217220
break;
218221
case 'disconnect':
222+
this.disconnectCallbacks.push(callback)
219223
this.disconnectCallback = callback;
220224
break;
225+
case 'close':
226+
this.closeCallbacks.push(callback)
227+
console.log('set close callback'); // todo remove dev item
228+
this.closeCallback = callback;
229+
break;
230+
}
231+
};
232+
233+
WebsocketProvider.prototype.emit = function(type, data) {
234+
if (typeof type !== 'string')
235+
throw new Error('The first parameter type must be a function.');
236+
237+
switch (type) {
238+
239+
// case 'accountsChanged':
240+
// this.accountsChanged = callback;
241+
// break;
242+
// case 'disconnected':
243+
// this.disconnectedCallback = callback;
244+
// break;
245+
case 'disconnect':
246+
this.disconnectCallbacks.forEach(function(callback) {
247+
if (_.isFunction(callback)) callback(data);
248+
});
249+
break;
250+
case 'close':
251+
this.closeCallbacks.forEach(function(callback) {
252+
if (_.isFunction(callback)) callback(data);
253+
});
254+
break;
221255
}
222256
};
223257

@@ -230,6 +264,22 @@ WebsocketProvider.prototype.removeListener = function(type, callback) {
230264
if (cb === callback) _this.notificationCallbacks.splice(index, 1);
231265
});
232266
break;
267+
// case 'accountsChanged':
268+
// this.accountsChanged = callback;
269+
// break;
270+
// case 'disconnected':
271+
// this.disconnectedCallback = callback;
272+
// break;
273+
case 'disconnect':
274+
this.disconnectCallbacks.forEach(function(cb, index) {
275+
if (cb === callback) _this.disconnectCallbacks.splice(index, 1);
276+
});
277+
break;
278+
case 'close':
279+
this.closeCallbacks.forEach(function(cb, index) {
280+
if (cb === callback) _this.closeCallbacks.splice(index, 1);
281+
});
282+
break;
233283
}
234284
};
235285
WebsocketProvider.prototype.removeAllListeners = function(type) {

‎src/connectWindow/popUpCreator.js

+17-4
Original file line numberDiff line numberDiff line change
@@ -293,13 +293,26 @@ export default class PopUpCreator extends EventEmitter{
293293
}
294294

295295
closePopupWindow() {
296-
// this.hideDialog();
297-
this.container.dispatchEvent(new Event('mewModalClosed'));
298-
this.container.replaceChildren();
299-
this.popupWindowOpen = null;
296+
try { // this.hideDialog();
297+
this.popupWindowOpen = null;
298+
document.querySelector('#Attach-Mew-Wallet-Modal').dispatchEvent(new Event('mewModalClosed'));
299+
document.querySelector('#Attach-Mew-Wallet-Modal').replaceChildren();
300+
301+
// document.querySelector('#Attach-Mew-Wallet-Modal').classList.add('hidden');
302+
} catch (e) {
303+
this.popupWindowOpen = null;
304+
document.querySelector('#Attach-Mew-Wallet-Modal').innerHTML = '';
305+
}
300306
}
301307

302308
handleBeforeUnload() {
303309
// this.closePopupWindow();
304310
}
311+
resetSetup() {
312+
this.popupWindowOpen = null;
313+
this.hideNotifier();
314+
this.closePopupWindow();
315+
// document.getElementById('Attach-Mew-Wallet-Modal');
316+
317+
}
305318
}

‎test/clients/receiverV1.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import CryptoUtils from '../utils/crypto-utils';
33
const debugLogger = require('debug');
44
const io = require('socket.io-client');
55
const EventEmitter = require('events').EventEmitter;
6-
const MewConnectCrypto = require('../../dist/index.js').Crypto;
6+
const MewConnectCrypto = require('../../src/connectClient/MewConnectCrypto').default;
77
const SimplePeer = require('simple-peer');
88
const wrtc = require('wrtc');
99

‎test/integration/basic.pairing.test.js ‎test/integration/basic.pairing.spec.js

+6
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,12 @@ describe('Pairing', () => {
193193
// initiator.rtcSend({ type: 'address', data: '' });
194194
});
195195

196+
initiator.on('displayCode', (data) => {
197+
console.log(data); // todo remove dev item
198+
if (!silent) console.log('address', data); // todo remove dev item
199+
// initiator.rtcSend({ type: 'address', data: '' });
200+
});
201+
196202
await receiver.setKeys(
197203
initiator.publicKey,
198204
initiator.privateKey,

‎tests/helpers/MewConnectReceiver.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const debugLogger = require('debug');
22
const io = require('socket.io-client');
33
const EventEmitter = require('events').EventEmitter;
4-
const MewConnectCrypto = require('../../dist/index.js').Crypto;
4+
const MewConnectCrypto = require('../../src/connectClient/MewConnectCrypto');
55
const SimplePeer = require('simple-peer');
66

77
const {
@@ -66,7 +66,8 @@ export default class MewConnectReceiver extends EventEmitter {
6666

6767
this.io = io;
6868
this.Peer = SimplePeer;
69-
this.mewCrypto = options.cryptoImpl || MewConnectCrypto.create();
69+
console.log(MewConnectCrypto); // todo remove dev item
70+
this.mewCrypto = options.cryptoImpl || MewConnectCrypto.default.create();
7071

7172
this.signals = this.jsonDetails.signals;
7273
this.rtcEvents = this.jsonDetails.rtc;

‎tests/specs/MewConnectInitiator.spec.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import 'regenerator-runtime/runtime';
22
import { expect as chaiExpect } from 'chai';
33
import debug from 'debug';
4-
import * as MewConnectSrc from '../../src';
4+
import * as MewConnectSrc from '../../src/connectClient/index';
55
import MewConnectReceiver from '../helpers/MewConnectReceiver';
66

77
const connectLogger = debug('test:Connect');
88
const fallbackLogger = debug('test:Fallback');
99

10-
const signalUrl = typeof signalServer !== 'undefined' ? signalServer : 'https://connect.mewapi.io';
10+
const signalUrl = typeof signalServer !== 'undefined' ? signalServer : 'wss://connect2.mewapi.io/staging';
1111

1212

1313

@@ -54,8 +54,9 @@ describe('Check Base Connection Operation', () => {
5454
const recSignals = [];
5555
const intSignals = [];
5656
const completed = [];
57+
console.log(MewConnectSrc); // todo remove dev item
5758
const MewConnect = MewConnectSrc.default.Initiator;
58-
const mewConnectClient = MewConnect.init();
59+
const mewConnectClient = new MewConnect();
5960

6061
mewConnectClient.initiatorStart(signalUrl);
6162

0 commit comments

Comments
 (0)
Please sign in to comment.