diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 5efe8eb2f185..ef1f2df51792 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
diff --git a/ios/StatusIm/Info.plist b/ios/StatusIm/Info.plist
index ad0ac043769d..ce96da029cdc 100644
--- a/ios/StatusIm/Info.plist
+++ b/ios/StatusIm/Info.plist
@@ -34,6 +34,7 @@
CFBundleURLSchemes
status-app
+ status-im
diff --git a/ios/StatusImPR/Info.plist b/ios/StatusImPR/Info.plist
index 1e0693833c0f..1403685f7866 100644
--- a/ios/StatusImPR/Info.plist
+++ b/ios/StatusImPR/Info.plist
@@ -30,6 +30,7 @@
CFBundleURLSchemes
status-app
+ status-im
diff --git a/src/status_im/router/core.cljs b/src/status_im/router/core.cljs
index ab55ac3986c9..511df0e7442d 100644
--- a/src/status_im/router/core.cljs
+++ b/src/status_im/router/core.cljs
@@ -20,7 +20,7 @@
(def ethereum-scheme "ethereum:")
-(def uri-schemes ["status-app://"])
+(def uri-schemes ["status-app://" "status-im://" "status-im:"])
(def web-prefixes ["https://" "http://" "https://www." "http://www."])
@@ -30,6 +30,10 @@
(def handled-schemes (set (into uri-schemes web-urls)))
+(def group-chat-extractor
+ {[#"(.*)" :params] {"" :group-chat
+ "/" :group-chat}})
+
(def eip-extractor
{#{[:prefix "-" :address]
[:address]}
@@ -40,7 +44,12 @@
(def routes
[""
{handled-schemes {["c/" :community-data] :community
- ["cc/" :chat-data] :community-chat
+ ["cc/" :chat-data] :community-channel
+ ["ccm/" :chat-id] :community-chat
+ ["p/" :chat-id] :private-chat
+ ["cr/" :community-id] :community-requests
+ "g/" group-chat-extractor
+ ["wallet/" :account] :wallet-account
["u/" :user-data] :user}
ethereum-scheme eip-extractor}])
@@ -58,7 +67,6 @@
(defn match-uri
[uri]
- ;;
(let [;; bidi has trouble parse path with `=` in it extract `=` here and add back to parsed
;; base64url regex based on https://datatracker.ietf.org/doc/html/rfc4648#section-5 may
;; include invalid base64 (invalid length, length of any base64 encoded string must be a
@@ -81,13 +89,13 @@
ens?
(assoc-in [:route-params :ens-name] fragment)
- (and (or (= handler :community) (= handler :community-chat)) fragment)
+ (and (or (= handler :community) (= handler :community-channel)) fragment)
(assoc-in [:route-params :community-id] fragment)
(and equal-end-of-base64url (= handler :community) (:community-data route-params))
(update-in [:route-params :community-data] #(str % equal-end-of-base64url))
- (and equal-end-of-base64url (= handler :community-chat) (:chat-data route-params))
+ (and equal-end-of-base64url (= handler :community-channel) (:chat-data route-params))
(update-in [:route-params :chat-data] #(str % equal-end-of-base64url))
(and equal-end-of-base64url (= handler :user) (:user-data route-params))
@@ -238,8 +246,8 @@
:community))
(defn handle-uri
- [chain _chats uri cb]
- (let [{:keys [handler route-params]} (match-uri uri)]
+ [chain chats uri cb]
+ (let [{:keys [handler route-params query-params]} (match-uri uri)]
(log/info "[router] uri " uri " matched " handler " with " route-params)
(cond
@@ -253,36 +261,39 @@
(and (= handler :user) (:user-id route-params))
(match-contact-async chain route-params cb)
- ;; ;; NOTE: removed in `match-uri`, might need this in the future
- ;; (= handler :private-chat)
- ;; (match-private-chat-async chain route-params cb)
+ ;; NOTE: removed in `match-uri`, might need this in the future
+ (= handler :private-chat)
+ (match-private-chat-async chain route-params cb)
- ;; ;; NOTE: removed in `match-uri`, might need this in the future
- ;; (= handler :group-chat)
- ;; (cb (match-group-chat chats query-params))
+ ;; NOTE: removed in `match-uri`, might need this in the future
+ (= handler :group-chat)
+ (cb (match-group-chat chats query-params))
(validators/valid-public-key? uri)
(match-contact-async chain {:user-id uri} cb)
- ;; ;; NOTE: removed in `match-uri`, might need this in the future
- ;; (= handler :community-requests)
- ;; (cb {:type handler :community-id (:community-id route-params)})
+ ;; NOTE: removed in `match-uri`, might need this in the future
+ (= handler :community-requests)
+ (cb {:type handler :community-id (:community-id route-params)})
(and (= handler :community) (:community-id route-params))
(cb {:type (community-route-type route-params)
:community-id (:community-id route-params)})
;; ;; TODO: jump to community overview for now, should jump to community channel
- ;; (and (= handler :community-chat) (:chat-id route-params))
+ ;; (and (= handler :community-channel) (:chat-id route-params))
;; (cb {:type handler :chat-id (:chat-id route-params)})
- (and (= handler :community-chat) (:community-id route-params))
+ (= handler :community-chat)
+ (cb {:type handler :chat-id (:chat-id route-params)})
+
+ (and (= handler :community-channel) (:community-id route-params))
(cb {:type (community-route-type route-params)
:community-id (:community-id route-params)})
- ;; ;; NOTE: removed in `match-uri`, might need this in the future
- ;; (= handler :wallet-account)
- ;; (cb (match-wallet-account route-params))
+ ;; NOTE: removed in `match-uri`, might need this in the future
+ (= handler :wallet-account)
+ (cb (match-wallet-account route-params))
(address/address? uri)
(cb (address->eip681 uri))