diff --git a/src/status_im/constants.cljs b/src/status_im/constants.cljs index be6c66b8a2..afe21d3939 100644 --- a/src/status_im/constants.cljs +++ b/src/status_im/constants.cljs @@ -279,6 +279,7 @@ (def ^:const wallet-connect-supported-events #{"accountsChanged" "chainChanged"}) (def ^:const wallet-connect-session-proposal-event "session_proposal") (def ^:const wallet-connect-session-request-event "session_request") +(def ^:const wallet-connect-user-rejected-session-proposal-error-type "USER_REJECTED_METHODS") (def ^:const dapp-permission-contact-code "contact-code") (def ^:const dapp-permission-web3 "web3") diff --git a/src/status_im/contexts/wallet/wallet_connect/effects.cljs b/src/status_im/contexts/wallet/wallet_connect/effects.cljs index 699131aaed..cdec15a4de 100644 --- a/src/status_im/contexts/wallet/wallet_connect/effects.cljs +++ b/src/status_im/contexts/wallet/wallet_connect/effects.cljs @@ -78,6 +78,18 @@ (promesa/then on-success) (promesa/catch on-fail))))) +(rf/reg-fx + :effects.wallet-connect/reject-session + (fn [{:keys [web3-wallet proposal on-success on-fail]}] + (let [{:keys [id]} proposal + reason (wallet-connect/get-sdk-error + constants/wallet-connect-user-rejected-session-proposal-error-type)] + (-> (.rejectSession web3-wallet + (clj->js {:id id + :reason reason})) + (promesa/then on-success) + (promesa/catch on-fail))))) + (rf/reg-fx :effects.wallet-connect/sign-message (fn [{:keys [password address data on-success on-error]}] diff --git a/src/status_im/contexts/wallet/wallet_connect/events.cljs b/src/status_im/contexts/wallet/wallet_connect/events.cljs index b80ad76b78..17a4db81d9 100644 --- a/src/status_im/contexts/wallet/wallet_connect/events.cljs +++ b/src/status_im/contexts/wallet/wallet_connect/events.cljs @@ -111,7 +111,12 @@ :wallet-connect/close-session-request (fn [_ _] {:fx [[:dispatch [:dismiss-modal :screen/wallet.wallet-connect-session-proposal]] - [:dispatch [:wallet-connect/reset-current-session-request]]]})) + [:dispatch [:wallet-connect/reset-current-session-request]] + [:effects.wallet-connect/reject-session + {:web3-wallet + :proposal + :on-success + :on-fail}]]})) (rf/reg-event-fx :wallet-connect/fetch-active-sessions @@ -146,24 +151,24 @@ :events constants/wallet-connect-supported-events :accounts accounts}})] {:fx [[:effects.wallet-connect/approve-session - {:web3-wallet web3-wallet - :proposal current-proposal + {:web3-wallet web3-wallet + :proposal current-proposal :supported-namespaces supported-namespaces - :on-success (fn [] - (log/info "Wallet Connect session approved") - (let [metadata (-> current-proposal :params :proposer :metadata)] - (rf/dispatch [:wallet-connect/reset-current-session-proposal]) - (rf/dispatch [:wallet-connect/persist-session - {:id (:id current-proposal) - :dapp-name (:name metadata) - :dapp-url (:url metadata) - :session-info current-proposal}]))) - :on-fail (fn [error] - (log/error "Wallet Connect session approval failed" - {:error error - :event :wallet-connect/approve-session}) - (rf/dispatch - [:wallet-connect/reset-current-session-proposal]))}] + :on-success (fn [] + (log/info "Wallet Connect session approved") + (let [metadata (-> current-proposal :params :proposer :metadata)] + (rf/dispatch [:wallet-connect/reset-current-session-proposal]) + (rf/dispatch [:wallet-connect/persist-session + {:id (:id current-proposal) + :dapp-name (:name metadata) + :dapp-url (:url metadata) + :session-info current-proposal}]))) + :on-fail (fn [error] + (log/error "Wallet Connect session approval failed" + {:error error + :event :wallet-connect/approve-session}) + (rf/dispatch + [:wallet-connect/reset-current-session-proposal]))}] [:dispatch [:dismiss-modal :screen/wallet.wallet-connect-session-proposal]]]}))) (rf/reg-event-fx