File tree 4 files changed +30
-24
lines changed
contexts/wallet/wallet_connect
4 files changed +30
-24
lines changed Original file line number Diff line number Diff line change 38
38
[path]
39
39
(map #(str % path) status-web-urls))
40
40
41
-
42
41
(def handled-schemes (set (into uri-schemes status-web-urls)))
43
42
43
+ (defn wc-normalize-uri
44
+ [uri]
45
+ (if (string/includes? uri " //wc:" ) (string/replace-first uri " /?" " ?" ) uri))
46
+
44
47
(def group-chat-extractor
45
48
{[#"(.*)" :params ] {" " :group-chat
46
49
" /" :group-chat }})
96
99
(if equal-end-of-base64url (string/replace-first uri equal-end-of-base64url " " ) uri)
97
100
98
101
; ;bidi has issue to detect wc regex with /?, couldn't fine any other workaround
99
- normalize-url
100
- (if ( string/includes? uri " //wc: " ) ( string/replace-first uri " /? " " ? " ) uri-without-equal-in-path)
102
+ normalize-uri
103
+ (wc-normalize- uri uri-without-equal-in-path)
101
104
102
105
; ; fragment is the one after `#`, usually user-id, ens-name, community-id
103
106
fragment (parse-fragment uri)
104
107
ens? (utils.ens/is-valid-eth-name? fragment)
105
108
compressed-key? (validators/valid-compressed-key? fragment)
106
109
107
110
{:keys [handler route-params query-params] :as parsed}
108
- (assoc (bidi/match-route routes normalize-url )
111
+ (assoc (bidi/match-route routes normalize-uri )
109
112
:uri uri
110
113
:query-params (parse-query-params uri))]
111
114
(cond-> parsed
148
151
(assoc-in [:route-params :uri ]
149
152
(if (get query-params " uri" )
150
153
(get query-params " uri" )
151
- (remove-scheme normalize-url ))))))
154
+ (remove-scheme normalize-uri ))))))
152
155
153
156
(defn match-contact-async
154
157
[chain {:keys [user-id ens-name]} callback]
Original file line number Diff line number Diff line change 59
59
(filter (fn [session]
60
60
(= (utils.string/remove-trailing-slash dapp-url)
61
61
(utils.string/remove-trailing-slash (get session :url )))))
62
- ( first ) )))
62
+ first)))
63
63
64
64
(defn get-dapp-redirect-url
65
65
[session]
66
- (let [peer-metadata (get-in session [:peer :metadata ])]
67
- (get-in peer-metadata [:redirect :native ])))
66
+ (get-in session [:peer :metadata :redirect :native ]))
68
67
69
68
(defn get-db-current-request-params
70
69
[db]
Original file line number Diff line number Diff line change 317
317
(rf/reg-event-fx
318
318
:wallet-connect/persist-session
319
319
(fn [_ [session-info]]
320
- {:fx [[:json-rpc/call
321
- [{:method " wallet_addWalletConnectSession"
322
- :params [(js/JSON.stringify session-info)]
323
- :on-success (fn []
324
- (log/info " Wallet Connect session persisted" )
325
- (rf/dispatch [:wallet-connect/fetch-persisted-sessions ]))
326
- :on-error #(log/info " Wallet Connect session persistence failed" %)}]]]}))
320
+ (let [redirect-url (-> session-info
321
+ (js->clj :keywordize-keys true )
322
+ (wallet-connect-core/get-dapp-redirect-url ))]
323
+ {:fx [[:json-rpc/call
324
+ [{:method " wallet_addWalletConnectSession"
325
+ :params [(js/JSON.stringify session-info)]
326
+ :on-success (fn []
327
+ (log/info " Wallet Connect session persisted" )
328
+ (rf/dispatch [:wallet-connect/fetch-persisted-sessions ])
329
+ (rf/dispatch [:wallet-connect/redirect-to-dapp redirect-url]))
330
+ :on-error #(log/info " Wallet Connect session persistence failed" %)}]]]})))
327
331
328
332
(rf/reg-event-fx
329
333
:wallet-connect/disconnect-session
Original file line number Diff line number Diff line change 1
1
(ns status-im.contexts.wallet.wallet-connect.responding-events
2
2
(:require [re-frame.core :as rf]
3
- [react-native.platform :as platform]
4
3
[react-native.wallet-connect :as wallet-connect]
5
4
[status-im.constants :as constants]
6
5
[status-im.contexts.wallet.wallet-connect.core :as wallet-connect-core]
134
133
:event :wallet-connect/send-response
135
134
:wallet-connect-event event}))
136
135
:on-success (fn []
137
- (when platform/android?
138
- (rf/dispatch [:wallet-connect/redirect-to-dapp ]))
136
+ (rf/dispatch [:wallet-connect/redirect-to-dapp ])
139
137
(log/info " Successfully sent Wallet Connect response to dApp" ))}]]}))))
140
138
141
139
(rf/reg-event-fx
142
140
:wallet-connect/redirect-to-dapp
143
- (fn [{:keys [db]} _]
144
- (let [current-request (get db :wallet-connect/current-request )
145
- sessions (get db :wallet-connect/sessions )
146
- dapp (wallet-connect-core/get-current-request-dapp current-request sessions)
147
- session (transforms/json->clj (dapp :sessionJson ))
148
- redirect-url (wallet-connect-core/get-dapp-redirect-url session)]
141
+ (fn [{:keys [db]} [url]]
142
+ (let [redirect-url (or url
143
+ (->> (get db :wallet-connect/current-request )
144
+ (wallet-connect-core/get-current-request-dapp
145
+ (get db :wallet-connect/sessions ))
146
+ :sessionJson
147
+ transforms/json->clj
148
+ wallet-connect-core/get-dapp-redirect-url))]
149
149
{:fx [[:open-url redirect-url]]})))
150
150
151
151
(rf/reg-event-fx
You can’t perform that action at this time.
0 commit comments