From 598a99b12bafe7f3803836386096c6d37fa69b0b Mon Sep 17 00:00:00 2001 From: cebgcontract <99630598+cebgcontract@users.noreply.github.com> Date: Fri, 26 Aug 2022 15:52:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- patches/@walletconnect+core+1.8.0.patch | 28 ++++++++++++++-- ...walletconnect+socket-transport+1.8.0.patch | 30 +++++++++++++++-- src/index.ts | 32 ++++++++++++------- src/lib/WalletConnectProvider.ts | 22 +++++++++++-- 4 files changed, 95 insertions(+), 17 deletions(-) diff --git a/patches/@walletconnect+core+1.8.0.patch b/patches/@walletconnect+core+1.8.0.patch index 208e036..eded2f6 100644 --- a/patches/@walletconnect+core+1.8.0.patch +++ b/patches/@walletconnect+core+1.8.0.patch @@ -1,8 +1,8 @@ diff --git a/node_modules/@walletconnect/core/dist/esm/index.js b/node_modules/@walletconnect/core/dist/esm/index.js -index a66eece..24d831b 100644 +index a66eece..16c8f7f 100644 --- a/node_modules/@walletconnect/core/dist/esm/index.js +++ b/node_modules/@walletconnect/core/dist/esm/index.js -@@ -22,7 +22,13 @@ class Connector { +@@ -22,11 +22,16 @@ class Connector { this._networkId = 0; this._rpcUrl = ""; this._eventManager = new EventManager(); @@ -17,6 +17,30 @@ index a66eece..24d831b 100644 this._cryptoLib = opts.cryptoLib; this._sessionStorage = opts.sessionStorage || new SessionStorage(opts.connectorOpts.storageId); this._qrcodeModal = opts.connectorOpts.qrcodeModal; +- this._qrcodeModalOptions = opts.connectorOpts.qrcodeModalOptions; + this._signingMethods = [...signingMethods, ...(opts.connectorOpts.signingMethods || [])]; + if (!opts.connectorOpts.bridge && !opts.connectorOpts.uri && !opts.connectorOpts.session) { + throw new Error(ERROR_MISSING_REQUIRED); +@@ -312,10 +317,15 @@ class Connector { + this._sendSessionRequest(request, "Session update rejected", { + topic: this.handshakeTopic, + }); +- this._eventManager.trigger({ +- event: "display_uri", +- params: [this.uri], +- }); ++ let self = this; ++ var showQrModal = () => { ++ self._eventManager.trigger({ ++ event: "display_uri", ++ params: [self.uri], ++ }); ++ self._transport.remove("open", showQrModal) ++ } ++ self._transport.on("open", showQrModal); + } + approveSession(sessionStatus) { + if (this._connected) { diff --git a/node_modules/@walletconnect/core/dist/esm/url.js b/node_modules/@walletconnect/core/dist/esm/url.js index d6da2b8..19202d5 100644 --- a/node_modules/@walletconnect/core/dist/esm/url.js diff --git a/patches/@walletconnect+socket-transport+1.8.0.patch b/patches/@walletconnect+socket-transport+1.8.0.patch index 001b31a..8ae0120 100644 --- a/patches/@walletconnect+socket-transport+1.8.0.patch +++ b/patches/@walletconnect+socket-transport+1.8.0.patch @@ -1,8 +1,34 @@ diff --git a/node_modules/@walletconnect/socket-transport/dist/esm/index.js b/node_modules/@walletconnect/socket-transport/dist/esm/index.js -index 9a6cc32..511b4b0 100644 +index 9a6cc32..2664801 100644 --- a/node_modules/@walletconnect/socket-transport/dist/esm/index.js +++ b/node_modules/@walletconnect/socket-transport/dist/esm/index.js -@@ -176,7 +176,7 @@ function getWebSocketUrl(_url, protocol, version) { +@@ -74,6 +74,14 @@ class SocketTransport { + on(event, callback) { + this._events.push({ event, callback }); + } ++ remove(event, callback) { ++ let self = this; ++ this._events.map((obj, i) => { ++ if (obj.event === event && obj.callback === callback) { ++ self._events.splice(i, 1); ++ } ++ }) ++ } + _socketCreate() { + if (this._nextSocket) { + return; +@@ -99,6 +107,10 @@ class SocketTransport { + this._nextSocket = null; + this._queueSubscriptions(); + this._pushQueue(); ++ const events = this._events.filter(event => event.event === "open"); ++ if (events && events.length) { ++ events.forEach(event => event.callback()); ++ } + } + _socketClose() { + if (this._socket) { +@@ -176,7 +188,7 @@ function getWebSocketUrl(_url, protocol, version) { protocol, version, env: "browser", diff --git a/src/index.ts b/src/index.ts index bb5e9ea..9992a57 100644 --- a/src/index.ts +++ b/src/index.ts @@ -107,9 +107,8 @@ export default class JCWallet { this.password = password savePassword(password) this.initInternalWallet(); - } else { - this.initThirdPartyWallet(chain); } + this.init({ chains: [322, 80001], password: this.password }) window.jc = { wallet: this } } @@ -130,17 +129,28 @@ export default class JCWallet { start = Date.now() this.data = loadData() console.log(`init wallet ext data cost: ${(Date.now() - start) / 1000}`) - this.init({ chains: [322, 80001], password: this.password }) + } - private initThirdPartyWallet(chain: number) { - for (const d of AllChains) { - const id = d.id - this.rpc[id] = d.rpc - } - - this.wConnect = new ZWalletConnect(this.rpc) - this.init({ chains: [322, 80001], password: this.password }) + public async initThirdPartyWallet() { + return new Promise((resolve, reject) => { + for (const d of AllChains) { + const id = d.id + this.rpc[id] = d.rpc + } + + this.wConnect = new ZWalletConnect(this.rpc) + // return this.wConnect.connect(); + this.wConnect.connect() + .then(()=>{ + resolve && resolve('') + }) + .catch((err: Error)=>{ + console.log('initThirdPartyWallet error: ' + err); + reject && reject(err.message); + }) + }) + } private init({ chains, password }: { chains: number[]; password: string }) { diff --git a/src/lib/WalletConnectProvider.ts b/src/lib/WalletConnectProvider.ts index 022b058..8cd99a6 100644 --- a/src/lib/WalletConnectProvider.ts +++ b/src/lib/WalletConnectProvider.ts @@ -84,7 +84,6 @@ class WalletConnectProvider extends ProviderEngine { }; request = async (payload: any): Promise => { - console.log('[WalletProvider]send: ' + JSON.stringify(payload)); return this.send(payload); }; @@ -221,9 +220,29 @@ class WalletConnectProvider extends ProviderEngine { wc.on("modal_closed", () => { reject(new Error("User closed modal")); }); + wc.on("disconnect", (error, payload)=> { + if (error) { + reject(new Error('error connect')); + } else if (payload) { + let errmsg = 'error connect'; + if (typeof payload.params[0] === 'string') { + errmsg = payload.params[0]; + } else if (typeof payload.params[0] === 'object') { + if (payload.params[0].message) { + errmsg = payload.params[0].message + } else { + errmsg = payload.params[0] + } + } + reject(new Error(errmsg)); + } else { + reject(new Error("disconnect")); + } + }); wc.createSession({ chainId: this.chainId }) .then(() => { wc.on("connect", (error, payload) => { + console.log('ws connected'); if (error) { this.isConnecting = false; return reject(error); @@ -315,7 +334,6 @@ class WalletConnectProvider extends ProviderEngine { updateHttpConnection() { if (this.rpcUrl) { - console.log(`updateHttpConnection: ${this.rpcUrl}`) this.http = new HttpConnection(this.rpcUrl); this.http.on("payload", payload => this.emit("payload", payload)); this.http.on("error", error => this.emit("error", error));