[#21853] fix: unregister event listener after logout (#21873)

* [#21853] fix: check deeplink pending request after wallet connect loaded

* [#21853] fix: isolate the usage of pending deeplink url

* [#21853] fix: remove redundant check for web3 object

* [#21853] fix: unregister event listener after logout

* [#21853] fix: extract handler
This commit is contained in:
Mohsen 2025-01-15 20:33:31 +03:00 committed by GitHub
parent ae00ecb3e0
commit 35c5d5ae6a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 68 additions and 6 deletions

View File

@ -87,3 +87,11 @@
event
#(-> (bean/->clj %)
handler)))
(defn unregister-handler
[{:keys [web3-wallet event handler]}]
(oops/ocall web3-wallet
"off"
event
#(-> (bean/->clj %)
handler)))

View File

@ -108,8 +108,7 @@
(rf/defn handle-wallet-connect
[_ uri]
(log/info "universal-links: handle-wallet-connect" uri)
{:dispatch-later {:ms 1500
:dispatch [:wallet-connect/on-scan-connection uri]}})
{:dispatch [:wallet-connect/process-deeplink uri]})
(defn dispatch-url
"Dispatch url so we can get access to re-frame/db"

View File

@ -44,6 +44,7 @@
{:db (assoc db :profile/logging-out? true)
;; We need to disable notifications before starting the logout process
:fx [[:dispatch [:profile.logout/disable-notifications]]
[:dispatch [:wallet-connect/unregister-event-listeners]]
[:dispatch-later
{:ms 100
:dispatch [:profile.logout/reset-state]}]]}))

View File

@ -30,7 +30,8 @@
(log/info "WalletConnect SDK initialisation successful")
{:db (assoc db :wallet-connect/web3-wallet web3-wallet)
:fx [[:dispatch [:wallet-connect/register-event-listeners]]
[:dispatch [:wallet-connect/get-sessions]]]}))
[:dispatch [:wallet-connect/get-sessions]]
[:dispatch [:wallet-connect/pair-with-pending-deeplink]]]}))
(rf/reg-event-fx
:wallet-connect/reload-on-network-change
@ -40,6 +41,19 @@
(log/info "Re-Initialising WalletConnect SDK due to network change")
{:fx [[:dispatch [:wallet-connect/init]]]}))))
(defn- on-session-proposal
[data]
(rf/dispatch [:wallet-connect/on-session-proposal data]))
(defn- on-session-request
[data]
(rf/dispatch [:wallet-connect/on-session-request data]))
(defn- on-session-delete
[data]
(rf/dispatch [:wallet-connect/on-session-delete data]))
(rf/reg-event-fx
:wallet-connect/register-event-listeners
(fn [{:keys [db]}]
@ -47,15 +61,32 @@
{:fx [[:effects.wallet-connect/register-event-listener
[web3-wallet
constants/wallet-connect-session-proposal-event
#(rf/dispatch [:wallet-connect/on-session-proposal %])]]
on-session-proposal]]
[:effects.wallet-connect/register-event-listener
[web3-wallet
constants/wallet-connect-session-request-event
#(rf/dispatch [:wallet-connect/on-session-request %])]]
on-session-request]]
[:effects.wallet-connect/register-event-listener
[web3-wallet
constants/wallet-connect-session-delete-event
#(rf/dispatch [:wallet-connect/on-session-delete %])]]]})))
on-session-delete]]]})))
(rf/reg-event-fx
:wallet-connect/unregister-event-listeners
(fn [{:keys [db]}]
(let [web3-wallet (get db :wallet-connect/web3-wallet)]
{:fx [[:effects.wallet-connect/unregister-event-listener
[web3-wallet
constants/wallet-connect-session-proposal-event
on-session-proposal]]
[:effects.wallet-connect/unregister-event-listener
[web3-wallet
constants/wallet-connect-session-request-event
on-session-request]]
[:effects.wallet-connect/unregister-event-listener
[web3-wallet
constants/wallet-connect-session-delete-event
on-session-delete]]]})))
(rf/reg-event-fx
:wallet-connect/on-init-fail

View File

@ -34,6 +34,14 @@
:event wc-event
:handler handler})))
(rf/reg-fx
:effects.wallet-connect/unregister-event-listener
(fn [[web3-wallet wc-event handler]]
(wallet-connect/unregister-handler
{:web3-wallet web3-wallet
:event wc-event
:handler handler})))
(rf/reg-fx
:effects.wallet-connect/pair
(fn [{:keys [web3-wallet url on-success on-fail]}]

View File

@ -21,6 +21,21 @@
:on-fail #(log/error "Failed to pair with dApp" {:error %})
:on-success #(log/info "dApp paired successfully")}]]})))
(rf/reg-event-fx
:wallet-connect/process-deeplink
(fn [{:keys [db]} [url]]
(let [web3-wallet (get db :wallet-connect/web3-wallet)]
(if web3-wallet
{:fx [[:dispatch [:wallet-connect/on-scan-connection url]]]}
{:db (assoc db :wallet-connect/pending-url url)}))))
(rf/reg-event-fx
:wallet-connect/pair-with-pending-deeplink
(fn [{:keys [db]}]
(when-let [pending-url (get db :wallet-connect/pending-url)]
{:db (dissoc db :wallet-connect/pending-url)
:fx [[:dispatch [:wallet-connect/on-scan-connection pending-url]]]})))
(rf/reg-event-fx
:wallet-connect/on-scan-connection
(fn [{:keys [db]} [scanned-text]]