优化登录流程

This commit is contained in:
cebgcontract 2022-08-26 15:52:50 +08:00
parent 4b9267929a
commit 598a99b12b
4 changed files with 95 additions and 17 deletions

View File

@ -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

View File

@ -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",

View File

@ -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 }) {

View File

@ -84,7 +84,6 @@ class WalletConnectProvider extends ProviderEngine {
};
request = async (payload: any): Promise<any> => {
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));