Set waku mode dynamically
This commit allows setting waku-mode and waku-bloom-filter-mode dynamically. It requires a relogin for the changes to take effect. Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
This commit is contained in:
parent
b8861c6c14
commit
619e176087
|
@ -3,6 +3,7 @@
|
||||||
[status-im.multiaccounts.model :as multiaccounts.model]
|
[status-im.multiaccounts.model :as multiaccounts.model]
|
||||||
[status-im.transport.filters.core :as transport.filters]
|
[status-im.transport.filters.core :as transport.filters]
|
||||||
[status-im.contact.core :as contact.core]
|
[status-im.contact.core :as contact.core]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.contact.db :as contact.db]
|
[status-im.contact.db :as contact.db]
|
||||||
[status-im.data-store.chats :as chats-store]
|
[status-im.data-store.chats :as chats-store]
|
||||||
[status-im.data-store.messages :as messages-store]
|
[status-im.data-store.messages :as messages-store]
|
||||||
|
@ -127,7 +128,7 @@
|
||||||
{:events [:chat.ui/mark-all-read-pressed
|
{:events [:chat.ui/mark-all-read-pressed
|
||||||
:chat.ui/mark-public-all-read]}
|
:chat.ui/mark-public-all-read]}
|
||||||
[{:keys [db] :as cofx} chat-id]
|
[{:keys [db] :as cofx} chat-id]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "markAllRead")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "markAllRead")
|
||||||
:params [chat-id]
|
:params [chat-id]
|
||||||
:on-success #(re-frame/dispatch [::mark-all-read-successful chat-id])}]})
|
:on-success #(re-frame/dispatch [::mark-all-read-successful chat-id])}]})
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
(:require [re-frame.core :as re-frame]
|
(:require [re-frame.core :as re-frame]
|
||||||
[status-im.constants :as constants]
|
[status-im.constants :as constants]
|
||||||
[status-im.ui.screens.chat.state :as chat.state]
|
[status-im.ui.screens.chat.state :as chat.state]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.data-store.chats :as data-store.chats]
|
[status-im.data-store.chats :as data-store.chats]
|
||||||
[status-im.data-store.messages :as data-store.messages]
|
[status-im.data-store.messages :as data-store.messages]
|
||||||
[status-im.transport.filters.core :as filters]
|
[status-im.transport.filters.core :as filters]
|
||||||
|
@ -140,11 +141,13 @@
|
||||||
(when-not (or (get-in db [:chats current-chat-id :all-loaded?])
|
(when-not (or (get-in db [:chats current-chat-id :all-loaded?])
|
||||||
(get-in db [:chats current-chat-id :loading-messages?]))
|
(get-in db [:chats current-chat-id :loading-messages?]))
|
||||||
(let [cursor (get-in db [:chats current-chat-id :cursor])
|
(let [cursor (get-in db [:chats current-chat-id :cursor])
|
||||||
load-messages-fx (data-store.messages/messages-by-chat-id-rpc current-chat-id
|
load-messages-fx (data-store.messages/messages-by-chat-id-rpc
|
||||||
cursor
|
(waku/enabled? cofx)
|
||||||
constants/default-number-of-messages
|
current-chat-id
|
||||||
#(re-frame/dispatch [::messages-loaded current-chat-id session-id %])
|
cursor
|
||||||
#(re-frame/dispatch [::failed-loading-messages current-chat-id session-id %]))]
|
constants/default-number-of-messages
|
||||||
|
#(re-frame/dispatch [::messages-loaded current-chat-id session-id %])
|
||||||
|
#(re-frame/dispatch [::failed-loading-messages current-chat-id session-id %]))]
|
||||||
(fx/merge cofx
|
(fx/merge cofx
|
||||||
load-messages-fx
|
load-messages-fx
|
||||||
(mailserver/load-gaps-fx current-chat-id)))))))
|
(mailserver/load-gaps-fx current-chat-id)))))))
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
[status-im.utils.config :as config]
|
[status-im.utils.config :as config]
|
||||||
[status-im.chat.db :as chat.db]
|
[status-im.chat.db :as chat.db]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.chat.models :as chat-model]
|
[status-im.chat.models :as chat-model]
|
||||||
[status-im.chat.models.loading :as chat-loading]
|
[status-im.chat.models.loading :as chat-loading]
|
||||||
[status-im.chat.models.message-list :as message-list]
|
[status-im.chat.models.message-list :as message-list]
|
||||||
|
@ -207,7 +208,7 @@
|
||||||
(fx/defn resend-message
|
(fx/defn resend-message
|
||||||
[{:keys [db] :as cofx} chat-id message-id]
|
[{:keys [db] :as cofx} chat-id message-id]
|
||||||
(fx/merge cofx
|
(fx/merge cofx
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "reSendChatMessage")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "reSendChatMessage")
|
||||||
:params [message-id]
|
:params [message-id]
|
||||||
:on-success #(log/debug "re-sent message successfully")
|
:on-success #(log/debug "re-sent message successfully")
|
||||||
:on-error #(log/error "failed to re-send message" %)}]}
|
:on-error #(log/error "failed to re-send message" %)}]}
|
||||||
|
@ -228,9 +229,6 @@
|
||||||
:current-chat? true})
|
:current-chat? true})
|
||||||
messages)))
|
messages)))
|
||||||
|
|
||||||
(fx/defn add-system-messages [cofx messages]
|
|
||||||
(data-store.messages/save-system-messages cofx messages))
|
|
||||||
|
|
||||||
(fx/defn send-message
|
(fx/defn send-message
|
||||||
[{:keys [db now] :as cofx} {:keys [chat-id] :as message}]
|
[{:keys [db now] :as cofx} {:keys [chat-id] :as message}]
|
||||||
(protocol/send-chat-message cofx message))
|
(protocol/send-chat-message cofx message))
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
(:require
|
(:require
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[status-im.ethereum.core :as ethereum]
|
[status-im.ethereum.core :as ethereum]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.utils.config :as config]
|
[status-im.utils.config :as config]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
[status-im.utils.fx :as fx]))
|
[status-im.utils.fx :as fx]))
|
||||||
|
@ -22,22 +23,22 @@
|
||||||
|
|
||||||
(fx/defn handle-accept-request-address-for-transaction
|
(fx/defn handle-accept-request-address-for-transaction
|
||||||
{:events [::accept-request-address-for-transaction]}
|
{:events [::accept-request-address-for-transaction]}
|
||||||
[{:keys [db]} message-id address]
|
[{:keys [db] :as cofx} message-id address]
|
||||||
{:db (dissoc db :commands/select-account)
|
{:db (dissoc db :commands/select-account)
|
||||||
::json-rpc/call [{:method (json-rpc/call-ext-method "acceptRequestAddressForTransaction")
|
::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "acceptRequestAddressForTransaction")
|
||||||
:params [message-id address]
|
:params [message-id address]
|
||||||
:on-success #(re-frame/dispatch [:transport/message-sent % 1])}]})
|
:on-success #(re-frame/dispatch [:transport/message-sent % 1])}]})
|
||||||
|
|
||||||
(fx/defn handle-decline-request-address-for-transaction
|
(fx/defn handle-decline-request-address-for-transaction
|
||||||
{:events [::decline-request-address-for-transaction]}
|
{:events [::decline-request-address-for-transaction]}
|
||||||
[cofx message-id]
|
[cofx message-id]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "declineRequestAddressForTransaction")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "declineRequestAddressForTransaction")
|
||||||
:params [message-id]
|
:params [message-id]
|
||||||
:on-success #(re-frame/dispatch [:transport/message-sent % 1])}]})
|
:on-success #(re-frame/dispatch [:transport/message-sent % 1])}]})
|
||||||
|
|
||||||
(fx/defn handle-decline-request-transaction
|
(fx/defn handle-decline-request-transaction
|
||||||
{:events [::decline-request-transaction]}
|
{:events [::decline-request-transaction]}
|
||||||
[cofx message-id]
|
[cofx message-id]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "declineRequestTransaction")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "declineRequestTransaction")
|
||||||
:params [message-id]
|
:params [message-id]
|
||||||
:on-success #(re-frame/dispatch [:transport/message-sent % 1])}]})
|
:on-success #(re-frame/dispatch [:transport/message-sent % 1])}]})
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[taoensso.timbre :as log]
|
[taoensso.timbre :as log]
|
||||||
[status-im.multiaccounts.update.core :as multiaccounts.update]
|
[status-im.multiaccounts.update.core :as multiaccounts.update]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.multiaccounts.model :as multiaccounts.model]
|
[status-im.multiaccounts.model :as multiaccounts.model]
|
||||||
[status-im.transport.filters.core :as transport.filters]
|
[status-im.transport.filters.core :as transport.filters]
|
||||||
[status-im.contact.db :as contact.db]
|
[status-im.contact.db :as contact.db]
|
||||||
|
@ -76,7 +77,7 @@
|
||||||
(fx/defn send-contact-request
|
(fx/defn send-contact-request
|
||||||
[{:keys [db] :as cofx} {:keys [public-key] :as contact}]
|
[{:keys [db] :as cofx} {:keys [public-key] :as contact}]
|
||||||
(let [{:keys [name profile-image]} (own-info db)]
|
(let [{:keys [name profile-image]} (own-info db)]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "sendContactUpdate")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "sendContactUpdate")
|
||||||
:params [public-key name profile-image]
|
:params [public-key name profile-image]
|
||||||
:on-success #(log/debug "contact request sent" public-key)}]}))
|
:on-success #(log/debug "contact request sent" public-key)}]}))
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
(:require [goog.object :as object]
|
(:require [goog.object :as object]
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[status-im.data-store.messages :as messages]
|
[status-im.data-store.messages :as messages]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.utils.config :as config]
|
[status-im.utils.config :as config]
|
||||||
[status-im.utils.fx :as fx]
|
[status-im.utils.fx :as fx]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
|
@ -114,13 +115,13 @@
|
||||||
(dissoc :chatType :members)))
|
(dissoc :chatType :members)))
|
||||||
|
|
||||||
(fx/defn save-chat [cofx {:keys [chat-id] :as chat}]
|
(fx/defn save-chat [cofx {:keys [chat-id] :as chat}]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "saveChat")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "saveChat")
|
||||||
:params [(->rpc chat)]
|
:params [(->rpc chat)]
|
||||||
:on-success #(log/debug "saved chat" chat-id "successfuly")
|
:on-success #(log/debug "saved chat" chat-id "successfuly")
|
||||||
:on-failure #(log/error "failed to save chat" chat-id %)}]})
|
:on-failure #(log/error "failed to save chat" chat-id %)}]})
|
||||||
|
|
||||||
(fx/defn fetch-chats-rpc [cofx {:keys [on-success]}]
|
(fx/defn fetch-chats-rpc [cofx {:keys [on-success]}]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "chats")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "chats")
|
||||||
:params []
|
:params []
|
||||||
:on-success #(on-success (map <-rpc %))
|
:on-success #(on-success (map <-rpc %))
|
||||||
:on-failure #(log/error "failed to fetch chats" 0 -1 %)}]})
|
:on-failure #(log/error "failed to fetch chats" 0 -1 %)}]})
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
(:require [re-frame.core :as re-frame]
|
(:require [re-frame.core :as re-frame]
|
||||||
[status-im.utils.fx :as fx]
|
[status-im.utils.fx :as fx]
|
||||||
[status-im.utils.config :as config]
|
[status-im.utils.config :as config]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.data-store.chats :as data-store.chats]
|
[status-im.data-store.chats :as data-store.chats]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
[taoensso.timbre :as log]
|
[taoensso.timbre :as log]
|
||||||
|
@ -46,20 +47,20 @@
|
||||||
|
|
||||||
(fx/defn fetch-contacts-rpc
|
(fx/defn fetch-contacts-rpc
|
||||||
[cofx on-success]
|
[cofx on-success]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "contacts")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "contacts")
|
||||||
:params []
|
:params []
|
||||||
:on-success #(on-success (map <-rpc %))
|
:on-success #(on-success (map <-rpc %))
|
||||||
:on-failure #(log/error "failed to fetch contacts" %)}]})
|
:on-failure #(log/error "failed to fetch contacts" %)}]})
|
||||||
|
|
||||||
(fx/defn save-contact
|
(fx/defn save-contact
|
||||||
[cofx {:keys [public-key] :as contact}]
|
[cofx {:keys [public-key] :as contact}]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "saveContact")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "saveContact")
|
||||||
:params [(->rpc contact)]
|
:params [(->rpc contact)]
|
||||||
:on-success #(log/debug "saved contact" public-key "successfuly")
|
:on-success #(log/debug "saved contact" public-key "successfuly")
|
||||||
:on-failure #(log/error "failed to save contact" public-key %)}]})
|
:on-failure #(log/error "failed to save contact" public-key %)}]})
|
||||||
|
|
||||||
(fx/defn block [cofx contact on-success]
|
(fx/defn block [cofx contact on-success]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "blockContact")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "blockContact")
|
||||||
:params [(->rpc contact)]
|
:params [(->rpc contact)]
|
||||||
:on-success on-success
|
:on-success on-success
|
||||||
:on-failure #(log/error "failed to block contact" % contact)}]})
|
:on-failure #(log/error "failed to block contact" % contact)}]})
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
[clojure.string :as string]
|
[clojure.string :as string]
|
||||||
[taoensso.timbre :as log]
|
[taoensso.timbre :as log]
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.utils.types :as utils.types]
|
[status-im.utils.types :as utils.types]
|
||||||
[status-im.utils.config :as config]
|
[status-im.utils.config :as config]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
|
@ -46,72 +47,59 @@
|
||||||
:outgoing (boolean (:outgoingStatus message)))
|
:outgoing (boolean (:outgoingStatus message)))
|
||||||
(dissoc :ensName :chatId :text :rtl :responseTo :sticker :lineCount :parsedText)))
|
(dissoc :ensName :chatId :text :rtl :responseTo :sticker :lineCount :parsedText)))
|
||||||
|
|
||||||
(defn update-outgoing-status-rpc [message-id status]
|
(defn update-outgoing-status-rpc [waku-enabled? message-id status]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "updateMessageOutgoingStatus")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method waku-enabled? "updateMessageOutgoingStatus")
|
||||||
:params [message-id status]
|
:params [message-id status]
|
||||||
:on-success #(log/debug "updated message outgoing stauts" message-id status)
|
:on-success #(log/debug "updated message outgoing stauts" message-id status)
|
||||||
:on-failure #(log/error "failed to update message outgoing status" message-id status %)}]})
|
:on-failure #(log/error "failed to update message outgoing status" message-id status %)}]})
|
||||||
|
|
||||||
(defn save-system-messages-rpc [messages]
|
(defn messages-by-chat-id-rpc [waku-enabled?
|
||||||
(json-rpc/call {:method (json-rpc/call-ext-method "addSystemMessages")
|
chat-id
|
||||||
:params [(map ->rpc messages)]
|
|
||||||
:on-success #(re-frame/dispatch [:messages/system-messages-saved (map <-rpc %)])
|
|
||||||
:on-failure #(log/error "failed to save messages" %)}))
|
|
||||||
|
|
||||||
(defn messages-by-chat-id-rpc [chat-id
|
|
||||||
cursor
|
cursor
|
||||||
limit
|
limit
|
||||||
on-success
|
on-success
|
||||||
on-failure]
|
on-failure]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "chatMessages")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method waku-enabled? "chatMessages")
|
||||||
:params [chat-id cursor limit]
|
:params [chat-id cursor limit]
|
||||||
:on-success (fn [result]
|
:on-success (fn [result]
|
||||||
(on-success (update result :messages #(map <-rpc %))))
|
(on-success (update result :messages #(map <-rpc %))))
|
||||||
:on-failure on-failure}]})
|
:on-failure on-failure}]})
|
||||||
|
|
||||||
(defn mark-seen-rpc [chat-id ids]
|
(defn mark-seen-rpc [waku-enabled? chat-id ids]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "markMessagesSeen")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method waku-enabled? "markMessagesSeen")
|
||||||
:params [chat-id ids]
|
:params [chat-id ids]
|
||||||
:on-success #(log/debug "successfully marked as seen")
|
:on-success #(log/debug "successfully marked as seen")
|
||||||
:on-failure #(log/error "failed to get messages" %)}]})
|
:on-failure #(log/error "failed to get messages" %)}]})
|
||||||
|
|
||||||
(defn delete-message-rpc [id]
|
(defn delete-message-rpc [waku-enabled? id]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "deleteMessage")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method waku-enabled? "deleteMessage")
|
||||||
:params [id]
|
:params [id]
|
||||||
:on-success #(log/debug "successfully deleted message" id)
|
:on-success #(log/debug "successfully deleted message" id)
|
||||||
:on-failure #(log/error "failed to delete message" % id)}]})
|
:on-failure #(log/error "failed to delete message" % id)}]})
|
||||||
|
|
||||||
(defn delete-messages-from-rpc [author]
|
(defn delete-messages-from-rpc [waku-enabled? author]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "deleteMessagesFrom")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method waku-enabled? "deleteMessagesFrom")
|
||||||
:params [author]
|
:params [author]
|
||||||
:on-success #(log/debug "successfully deleted messages from" author)
|
:on-success #(log/debug "successfully deleted messages from" author)
|
||||||
:on-failure #(log/error "failed to delete messages from" % author)}]})
|
:on-failure #(log/error "failed to delete messages from" % author)}]})
|
||||||
|
|
||||||
(defn delete-messages-by-chat-id-rpc [chat-id]
|
(defn delete-messages-by-chat-id-rpc [waku-enabled? chat-id]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "deleteMessagesByChatID")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method waku-enabled? "deleteMessagesByChatID")
|
||||||
:params [chat-id]
|
:params [chat-id]
|
||||||
:on-success #(log/debug "successfully deleted messages by chat-id" chat-id)
|
:on-success #(log/debug "successfully deleted messages by chat-id" chat-id)
|
||||||
:on-failure #(log/error "failed to delete messages by chat-id" % chat-id)}]})
|
:on-failure #(log/error "failed to delete messages by chat-id" % chat-id)}]})
|
||||||
|
|
||||||
(re-frame/reg-fx
|
|
||||||
::save-system-message
|
|
||||||
(fn [messages]
|
|
||||||
(save-system-messages-rpc messages)))
|
|
||||||
|
|
||||||
(fx/defn save-system-messages [cofx messages]
|
|
||||||
{::save-system-message messages})
|
|
||||||
|
|
||||||
(fx/defn delete-message [cofx id]
|
(fx/defn delete-message [cofx id]
|
||||||
(delete-message-rpc id))
|
(delete-message-rpc (waku/enabled? cofx) id))
|
||||||
|
|
||||||
(fx/defn delete-messages-from [cofx author]
|
(fx/defn delete-messages-from [cofx author]
|
||||||
(delete-messages-from-rpc author))
|
(delete-messages-from-rpc (waku/enabled? cofx) author))
|
||||||
|
|
||||||
(fx/defn mark-messages-seen [_ chat-id ids]
|
(fx/defn mark-messages-seen [cofx chat-id ids]
|
||||||
(mark-seen-rpc chat-id ids))
|
(mark-seen-rpc (waku/enabled? cofx) chat-id ids))
|
||||||
|
|
||||||
(fx/defn update-outgoing-status [cofx message-id status]
|
(fx/defn update-outgoing-status [cofx message-id status]
|
||||||
(update-outgoing-status-rpc message-id status))
|
(update-outgoing-status-rpc (waku/enabled? cofx) message-id status))
|
||||||
|
|
||||||
(fx/defn delete-messages-by-chat-id [cofx chat-id]
|
(fx/defn delete-messages-by-chat-id [cofx chat-id]
|
||||||
(delete-messages-by-chat-id-rpc chat-id))
|
(delete-messages-by-chat-id-rpc (waku/enabled? cofx) chat-id))
|
||||||
|
|
|
@ -291,31 +291,3 @@
|
||||||
(fx/merge cofx
|
(fx/merge cofx
|
||||||
(set-username-candidate (get-in db [:ens/registration :username] ""))
|
(set-username-candidate (get-in db [:ens/registration :username] ""))
|
||||||
(navigation/navigate-to-cofx :ens-search {})))
|
(navigation/navigate-to-cofx :ens-search {})))
|
||||||
|
|
||||||
(defn verify-names [names]
|
|
||||||
(json-rpc/call {:method (json-rpc/call-ext-method "verifyENSNames")
|
|
||||||
:params [names]
|
|
||||||
:on-success #(re-frame/dispatch [:contacts/ens-names-verified %])
|
|
||||||
:on-failure #(log/error "failed to resolve ens names" % names)}))
|
|
||||||
|
|
||||||
(re-frame/reg-fx
|
|
||||||
::verify-names
|
|
||||||
(fn [names]
|
|
||||||
(verify-names (distinct names))))
|
|
||||||
|
|
||||||
(defn should-be-verified? [cofx ens-name signature]
|
|
||||||
(and ens-name
|
|
||||||
(not (get-in cofx [:contacts/contacts signature :ens-verified]))
|
|
||||||
(not= signature (multiaccounts.model/current-public-key cofx))
|
|
||||||
(or (valid-custom-domain? ens-name)
|
|
||||||
(stateofus/valid-username? ens-name))))
|
|
||||||
|
|
||||||
(fx/defn verify-names-from-message [cofx {:keys [content]} signature]
|
|
||||||
(when (should-be-verified? cofx (:ens-name content) signature)
|
|
||||||
{::verify-names [{:name (:ens-name content)
|
|
||||||
:publicKey (subs signature 2)}]}))
|
|
||||||
|
|
||||||
(fx/defn verify-names-from-contact-request [cofx {:keys [name]} signature]
|
|
||||||
(when (should-be-verified? cofx name signature)
|
|
||||||
{::verify-names [{:name name
|
|
||||||
:publicKey (subs signature 2)}]}))
|
|
||||||
|
|
|
@ -178,8 +178,8 @@
|
||||||
(call-method (update arg :number-of-retries dec)))
|
(call-method (update arg :number-of-retries dec)))
|
||||||
on-error))
|
on-error))
|
||||||
|
|
||||||
(defn call-ext-method [method]
|
(defn call-ext-method [waku-enabled? method]
|
||||||
(if config/waku-enabled?
|
(if waku-enabled?
|
||||||
(str "wakuext_" method)
|
(str "wakuext_" method)
|
||||||
(str "shhext_" method)))
|
(str "shhext_" method)))
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
[status-im.i18n :as i18n]
|
[status-im.i18n :as i18n]
|
||||||
[status-im.init.core :as init]
|
[status-im.init.core :as init]
|
||||||
[status-im.log-level.core :as log-level]
|
[status-im.log-level.core :as log-level]
|
||||||
|
status-im.waku.core
|
||||||
[status-im.mailserver.core :as mailserver]
|
[status-im.mailserver.core :as mailserver]
|
||||||
[status-im.mailserver.constants :as mailserver.constants]
|
[status-im.mailserver.constants :as mailserver.constants]
|
||||||
[status-im.mailserver.topics :as mailserver.topics]
|
[status-im.mailserver.topics :as mailserver.topics]
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
[status-im.multiaccounts.core :as multiaccounts]
|
[status-im.multiaccounts.core :as multiaccounts]
|
||||||
[status-im.multiaccounts.model :as multiaccounts.model]
|
[status-im.multiaccounts.model :as multiaccounts.model]
|
||||||
[status-im.utils.pairing :as pairing.utils]
|
[status-im.utils.pairing :as pairing.utils]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.chat.models :as models.chat]
|
[status-im.chat.models :as models.chat]
|
||||||
[status-im.chat.models.message :as models.message]
|
[status-im.chat.models.message :as models.message]
|
||||||
[status-im.contact.core :as models.contact]
|
[status-im.contact.core :as models.contact]
|
||||||
|
@ -31,7 +32,7 @@
|
||||||
(fx/defn remove-member
|
(fx/defn remove-member
|
||||||
"Format group update message and sign membership"
|
"Format group update message and sign membership"
|
||||||
[{:keys [db] :as cofx} chat-id member]
|
[{:keys [db] :as cofx} chat-id member]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "removeMemberFromGroupChat")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "removeMemberFromGroupChat")
|
||||||
:params [nil chat-id member]
|
:params [nil chat-id member]
|
||||||
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
||||||
|
|
||||||
|
@ -74,33 +75,33 @@
|
||||||
|
|
||||||
(fx/defn join-chat
|
(fx/defn join-chat
|
||||||
[cofx chat-id]
|
[cofx chat-id]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "confirmJoiningGroup")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "confirmJoiningGroup")
|
||||||
:params [chat-id]
|
:params [chat-id]
|
||||||
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
||||||
|
|
||||||
(fx/defn create
|
(fx/defn create
|
||||||
[{:keys [db] :as cofx} group-name]
|
[{:keys [db] :as cofx} group-name]
|
||||||
(let [selected-contacts (:group/selected-contacts db)]
|
(let [selected-contacts (:group/selected-contacts db)]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "createGroupChatWithMembers")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "createGroupChatWithMembers")
|
||||||
:params [nil group-name (into [] selected-contacts)]
|
:params [nil group-name (into [] selected-contacts)]
|
||||||
:on-success #(re-frame/dispatch [::chat-updated %])}]}))
|
:on-success #(re-frame/dispatch [::chat-updated %])}]}))
|
||||||
|
|
||||||
(fx/defn make-admin
|
(fx/defn make-admin
|
||||||
[{:keys [db] :as cofx} chat-id member]
|
[{:keys [db] :as cofx} chat-id member]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "addAdminsToGroupChat")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "addAdminsToGroupChat")
|
||||||
:params [nil chat-id [member]]
|
:params [nil chat-id [member]]
|
||||||
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
||||||
|
|
||||||
(fx/defn add-members
|
(fx/defn add-members
|
||||||
"Add members to a group chat"
|
"Add members to a group chat"
|
||||||
[{{:keys [current-chat-id selected-participants]} :db :as cofx}]
|
[{{:keys [current-chat-id selected-participants]} :db :as cofx}]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "addMembersToGroupChat")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "addMembersToGroupChat")
|
||||||
:params [nil current-chat-id selected-participants]
|
:params [nil current-chat-id selected-participants]
|
||||||
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
||||||
(fx/defn remove
|
(fx/defn remove
|
||||||
"Remove & leave chat"
|
"Remove & leave chat"
|
||||||
[{:keys [db] :as cofx} chat-id]
|
[{:keys [db] :as cofx} chat-id]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "leaveGroupChat")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "leaveGroupChat")
|
||||||
:params [nil chat-id]
|
:params [nil chat-id]
|
||||||
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
:on-success #(re-frame/dispatch [::chat-updated %])}]})
|
||||||
|
|
||||||
|
@ -123,7 +124,7 @@
|
||||||
(let [new-name (get-in cofx [:db :group-chat-profile/profile :name])
|
(let [new-name (get-in cofx [:db :group-chat-profile/profile :name])
|
||||||
current-chat-id (:current-chat-id db)]
|
current-chat-id (:current-chat-id db)]
|
||||||
(when (valid-name? new-name)
|
(when (valid-name? new-name)
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "changeGroupChatName")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "changeGroupChatName")
|
||||||
:params [nil current-chat-id new-name]
|
:params [nil current-chat-id new-name]
|
||||||
:on-success #(re-frame/dispatch [::chat-updated %])}]})))
|
:on-success #(re-frame/dispatch [::chat-updated %])}]})))
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[status-im.data-store.mailservers :as data-store.mailservers]
|
[status-im.data-store.mailservers :as data-store.mailservers]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.node.core :as node]
|
[status-im.node.core :as node]
|
||||||
[status-im.i18n :as i18n]
|
[status-im.i18n :as i18n]
|
||||||
[status-im.mailserver.constants :as constants]
|
[status-im.mailserver.constants :as constants]
|
||||||
|
@ -87,9 +88,9 @@
|
||||||
|
|
||||||
;; We now wait for a confirmation from the mailserver before marking the message
|
;; We now wait for a confirmation from the mailserver before marking the message
|
||||||
;; as sent.
|
;; as sent.
|
||||||
(defn update-mailservers! [enodes]
|
(defn update-mailservers! [waku-enabled? enodes]
|
||||||
(json-rpc/call
|
(json-rpc/call
|
||||||
{:method (json-rpc/call-ext-method "updateMailservers")
|
{:method (json-rpc/call-ext-method waku-enabled? "updateMailservers")
|
||||||
:params [enodes]
|
:params [enodes]
|
||||||
:on-success #(log/debug "mailserver: update-mailservers success" %)
|
:on-success #(log/debug "mailserver: update-mailservers success" %)
|
||||||
:on-error #(log/error "mailserver: update-mailservers error" %)}))
|
:on-error #(log/error "mailserver: update-mailservers error" %)}))
|
||||||
|
@ -117,8 +118,9 @@
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:mailserver/update-mailservers
|
:mailserver/update-mailservers
|
||||||
(fn [enodes]
|
(fn [[waku-enabled? enodes]]
|
||||||
(update-mailservers! enodes)))
|
(println "HERE" waku-enabled? enodes)
|
||||||
|
(update-mailservers! waku-enabled? enodes)))
|
||||||
|
|
||||||
(defn decrease-limit []
|
(defn decrease-limit []
|
||||||
(max constants/min-limit (/ @limit 2)))
|
(max constants/min-limit (/ @limit 2)))
|
||||||
|
@ -144,9 +146,9 @@
|
||||||
(reset! limit (decrease-limit))
|
(reset! limit (decrease-limit))
|
||||||
(reset! success-counter 0)))
|
(reset! success-counter 0)))
|
||||||
|
|
||||||
(defn mark-trusted-peer! [enode]
|
(defn mark-trusted-peer! [waku-enabled? enode]
|
||||||
(json-rpc/call
|
(json-rpc/call
|
||||||
{:method (if config/waku-enabled?
|
{:method (if waku-enabled?
|
||||||
"waku_markTrustedPeer"
|
"waku_markTrustedPeer"
|
||||||
"shh_markTrustedPeer")
|
"shh_markTrustedPeer")
|
||||||
:params [enode]
|
:params [enode]
|
||||||
|
@ -157,7 +159,8 @@
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:mailserver/mark-trusted-peer
|
:mailserver/mark-trusted-peer
|
||||||
mark-trusted-peer!)
|
(fn [[waku-enabled? enode]]
|
||||||
|
(mark-trusted-peer! waku-enabled? enode)))
|
||||||
|
|
||||||
(fx/defn generate-mailserver-symkey
|
(fx/defn generate-mailserver-symkey
|
||||||
[{:keys [db] :as cofx} {:keys [password id] :as mailserver}]
|
[{:keys [db] :as cofx} {:keys [password id] :as mailserver}]
|
||||||
|
@ -166,7 +169,8 @@
|
||||||
:generating-sym-key?]
|
:generating-sym-key?]
|
||||||
true)
|
true)
|
||||||
:shh/generate-sym-key-from-password
|
:shh/generate-sym-key-from-password
|
||||||
[{:password password
|
[(waku/enabled? cofx)
|
||||||
|
{:password password
|
||||||
:on-success
|
:on-success
|
||||||
(fn [_ sym-key-id]
|
(fn [_ sym-key-id]
|
||||||
(re-frame/dispatch
|
(re-frame/dispatch
|
||||||
|
@ -189,7 +193,7 @@
|
||||||
(fetch-current db)]
|
(fetch-current db)]
|
||||||
(fx/merge cofx
|
(fx/merge cofx
|
||||||
{:db (update-mailserver-state db :added)
|
{:db (update-mailserver-state db :added)
|
||||||
:mailserver/mark-trusted-peer address}
|
:mailserver/mark-trusted-peer [(waku/enabled? cofx) address]}
|
||||||
(when-not (or sym-key-id generating-sym-key?)
|
(when-not (or sym-key-id generating-sym-key?)
|
||||||
(generate-mailserver-symkey mailserver)))))
|
(generate-mailserver-symkey mailserver)))))
|
||||||
|
|
||||||
|
@ -206,7 +210,7 @@
|
||||||
;; Any message sent before this takes effect will not be marked as sent
|
;; Any message sent before this takes effect will not be marked as sent
|
||||||
;; probably we should improve the UX so that is more transparent to the
|
;; probably we should improve the UX so that is more transparent to the
|
||||||
;; user
|
;; user
|
||||||
:mailserver/update-mailservers [address]}
|
:mailserver/update-mailservers [(waku/enabled? cofx) [address]]}
|
||||||
(when-not (or sym-key-id generating-sym-key?)
|
(when-not (or sym-key-id generating-sym-key?)
|
||||||
(generate-mailserver-symkey mailserver)))))
|
(generate-mailserver-symkey mailserver)))))
|
||||||
|
|
||||||
|
@ -345,7 +349,8 @@
|
||||||
request-id)}))))
|
request-id)}))))
|
||||||
|
|
||||||
(defn request-messages!
|
(defn request-messages!
|
||||||
[{:keys [sym-key-id address]}
|
[waku-enabled?
|
||||||
|
{:keys [sym-key-id address]}
|
||||||
{:keys [topics cursor to from force-to?] :as request}]
|
{:keys [topics cursor to from force-to?] :as request}]
|
||||||
;; Add some room to from, unless we break day boundaries so that
|
;; Add some room to from, unless we break day boundaries so that
|
||||||
;; messages that have been received after the last request are also fetched
|
;; messages that have been received after the last request are also fetched
|
||||||
|
@ -361,7 +366,7 @@
|
||||||
" cursor " cursor
|
" cursor " cursor
|
||||||
" limit " actual-limit)
|
" limit " actual-limit)
|
||||||
(json-rpc/call
|
(json-rpc/call
|
||||||
{:method (json-rpc/call-ext-method "requestMessages")
|
{:method (json-rpc/call-ext-method waku-enabled? "requestMessages")
|
||||||
:params [(cond-> {:topics topics
|
:params [(cond-> {:topics topics
|
||||||
:mailServerPeer address
|
:mailServerPeer address
|
||||||
:symKeyID sym-key-id
|
:symKeyID sym-key-id
|
||||||
|
@ -387,8 +392,8 @@
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:mailserver/request-messages
|
:mailserver/request-messages
|
||||||
(fn [{:keys [mailserver request]}]
|
(fn [{:keys [mailserver request waku-enabled?]}]
|
||||||
(request-messages! mailserver request)))
|
(request-messages! waku-enabled? mailserver request)))
|
||||||
|
|
||||||
(defn get-mailserver-when-ready
|
(defn get-mailserver-when-ready
|
||||||
"return the mailserver if the mailserver is ready"
|
"return the mailserver if the mailserver is ready"
|
||||||
|
@ -460,7 +465,8 @@
|
||||||
:mailserver/pending-requests (count requests)
|
:mailserver/pending-requests (count requests)
|
||||||
:mailserver/current-request request
|
:mailserver/current-request request
|
||||||
:mailserver/request-to request-to)
|
:mailserver/request-to request-to)
|
||||||
:mailserver/request-messages {:mailserver mailserver
|
:mailserver/request-messages {:waku-enabled? (waku/enabled? cofx)
|
||||||
|
:mailserver mailserver
|
||||||
:request request}}
|
:request request}}
|
||||||
{:db (dissoc db
|
{:db (dissoc db
|
||||||
:mailserver/pending-requests
|
:mailserver/pending-requests
|
||||||
|
@ -783,7 +789,8 @@
|
||||||
(when-let [mailserver (get-mailserver-when-ready cofx)]
|
(when-let [mailserver (get-mailserver-when-ready cofx)]
|
||||||
(let [request-with-cursor (assoc request :cursor cursor)]
|
(let [request-with-cursor (assoc request :cursor cursor)]
|
||||||
{:db (assoc db :mailserver/current-request request-with-cursor)
|
{:db (assoc db :mailserver/current-request request-with-cursor)
|
||||||
:mailserver/request-messages {:mailserver mailserver
|
:mailserver/request-messages {:waku-enabled? (waku/enabled? cofx)
|
||||||
|
:mailserver mailserver
|
||||||
:request request-with-cursor}}))
|
:request request-with-cursor}}))
|
||||||
(let [{:keys [gap chat-id]} request]
|
(let [{:keys [gap chat-id]} request]
|
||||||
(fx/merge
|
(fx/merge
|
||||||
|
@ -927,8 +934,9 @@
|
||||||
(not current-request)
|
(not current-request)
|
||||||
(-> (assoc-in [:db :mailserver/current-request] first-request)
|
(-> (assoc-in [:db :mailserver/current-request] first-request)
|
||||||
(assoc :mailserver/request-messages
|
(assoc :mailserver/request-messages
|
||||||
{:mailserver mailserver
|
{:waku-enabled? (waku/enabled? cofx)
|
||||||
:request first-request})))))
|
:mailserver mailserver
|
||||||
|
:request first-request})))))
|
||||||
|
|
||||||
(fx/defn resend-request
|
(fx/defn resend-request
|
||||||
[{:keys [db] :as cofx} {:keys [request-id]}]
|
[{:keys [db] :as cofx} {:keys [request-id]}]
|
||||||
|
@ -969,8 +977,9 @@
|
||||||
{:db (update-in db [:mailserver/current-request :attempts] inc)
|
{:db (update-in db [:mailserver/current-request :attempts] inc)
|
||||||
:mailserver/decrease-limit []
|
:mailserver/decrease-limit []
|
||||||
:mailserver/request-messages
|
:mailserver/request-messages
|
||||||
{:mailserver mailserver
|
{:waku-enabled? (waku/enabled? cofx)
|
||||||
:request (assoc request :limit (decrease-limit))}})
|
:mailserver mailserver
|
||||||
|
:request (assoc request :limit (decrease-limit))}})
|
||||||
|
|
||||||
:else
|
:else
|
||||||
{:mailserver/decrease-limit []}))))))
|
{:mailserver/decrease-limit []}))))))
|
||||||
|
|
|
@ -261,7 +261,7 @@
|
||||||
;;so here we set it at 1 already so that it passes the check once it has
|
;;so here we set it at 1 already so that it passes the check once it has
|
||||||
;;been initialized
|
;;been initialized
|
||||||
:filters/initialized 1)
|
:filters/initialized 1)
|
||||||
:filters/load-filters []}
|
:filters/load-filters [[(:waku-enabled multiaccount) []]]}
|
||||||
(finish-keycard-setup)
|
(finish-keycard-setup)
|
||||||
(protocol/initialize-protocol {:mailservers []
|
(protocol/initialize-protocol {:mailservers []
|
||||||
:mailserver-ranges {}
|
:mailserver-ranges {}
|
||||||
|
|
|
@ -7,10 +7,10 @@
|
||||||
[status-im.utils.types :as types]
|
[status-im.utils.types :as types]
|
||||||
[taoensso.timbre :as log]))
|
[taoensso.timbre :as log]))
|
||||||
|
|
||||||
(fx/defn send-multiaccount-update [{:keys [db]}]
|
(fx/defn send-multiaccount-update [{:keys [db] :as cofx}]
|
||||||
(let [multiaccount (:multiaccount db)
|
(let [multiaccount (:multiaccount db)
|
||||||
{:keys [name preferred-name photo-path address]} multiaccount]
|
{:keys [name preferred-name photo-path address]} multiaccount]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "sendContactUpdates")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (get-in db [:multiaccount :waku-enabled]) "sendContactUpdates")
|
||||||
:params [(or preferred-name name) photo-path]
|
:params [(or preferred-name name) photo-path]
|
||||||
:on-success #(log/debug "sent contact update")}]}))
|
:on-success #(log/debug "sent contact update")}]}))
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
(ns status-im.multiaccounts.update.publisher
|
(ns status-im.multiaccounts.update.publisher
|
||||||
(:require [taoensso.timbre :as log]
|
(:require [taoensso.timbre :as log]
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.utils.config :as config]
|
[status-im.utils.config :as config]
|
||||||
[status-im.constants :as constants]
|
[status-im.constants :as constants]
|
||||||
[status-im.multiaccounts.update.core :as multiaccounts]
|
[status-im.multiaccounts.update.core :as multiaccounts]
|
||||||
|
@ -11,7 +12,7 @@
|
||||||
;; Publish updates every 48 hours
|
;; Publish updates every 48 hours
|
||||||
(def publish-updates-interval (* 48 60 60 1000))
|
(def publish-updates-interval (* 48 60 60 1000))
|
||||||
|
|
||||||
(defn publish-update! [{:keys [db now]}]
|
(defn publish-update! [{:keys [db now] :as cofx}]
|
||||||
(let [my-public-key (get-in db [:multiaccount :public-key])
|
(let [my-public-key (get-in db [:multiaccount :public-key])
|
||||||
peers-count (:peers-count db)
|
peers-count (:peers-count db)
|
||||||
last-updated (get-in
|
last-updated (get-in
|
||||||
|
@ -25,7 +26,7 @@
|
||||||
{:keys [name preferred-name photo-path address]} multiaccount]
|
{:keys [name preferred-name photo-path address]} multiaccount]
|
||||||
|
|
||||||
(log/debug "sending contact updates")
|
(log/debug "sending contact updates")
|
||||||
(json-rpc/call {:method (json-rpc/call-ext-method "sendContactUpdates")
|
(json-rpc/call {:method (json-rpc/call-ext-method (waku/enabled? cofx) "sendContactUpdates")
|
||||||
:params [(or preferred-name name) photo-path]
|
:params [(or preferred-name name) photo-path]
|
||||||
:on-failure #(do
|
:on-failure #(do
|
||||||
(log/warn "failed to send contact updates")
|
(log/warn "failed to send contact updates")
|
||||||
|
|
|
@ -95,6 +95,7 @@
|
||||||
current-fleet (get-current-fleet db)
|
current-fleet (get-current-fleet db)
|
||||||
rendezvous-nodes (pick-nodes 3 (vals (:rendezvous current-fleet)))
|
rendezvous-nodes (pick-nodes 3 (vals (:rendezvous current-fleet)))
|
||||||
{:keys [installation-id log-level
|
{:keys [installation-id log-level
|
||||||
|
waku-enabled waku-bloom-filter-mode
|
||||||
custom-bootnodes custom-bootnodes-enabled?]} multiaccount
|
custom-bootnodes custom-bootnodes-enabled?]} multiaccount
|
||||||
use-custom-bootnodes (get custom-bootnodes-enabled? current-network)]
|
use-custom-bootnodes (get custom-bootnodes-enabled? current-network)]
|
||||||
(cond-> (get-in networks [current-network :config])
|
(cond-> (get-in networks [current-network :config])
|
||||||
|
@ -122,8 +123,9 @@
|
||||||
:PermissionsConfig {:Enabled true}
|
:PermissionsConfig {:Enabled true}
|
||||||
:MailserversConfig {:Enabled true}
|
:MailserversConfig {:Enabled true}
|
||||||
:EnableNTPSync true
|
:EnableNTPSync true
|
||||||
(if config/waku-enabled? :WakuConfig :WhisperConfig)
|
(if waku-enabled :WakuConfig :WhisperConfig)
|
||||||
{:Enabled true
|
{:Enabled true
|
||||||
|
:BloomFilterMode waku-bloom-filter-mode
|
||||||
:LightClient true
|
:LightClient true
|
||||||
:MinimumPoW 0.001}
|
:MinimumPoW 0.001}
|
||||||
:ShhextConfig
|
:ShhextConfig
|
||||||
|
|
|
@ -1,43 +1,43 @@
|
||||||
(ns status-im.pairing.core
|
(ns status-im.pairing.core (:require [clojure.string :as string]
|
||||||
(:require [clojure.string :as string]
|
[re-frame.core :as re-frame]
|
||||||
[re-frame.core :as re-frame]
|
[status-im.chat.models :as models.chat]
|
||||||
[status-im.chat.models :as models.chat]
|
[status-im.waku.core :as waku]
|
||||||
[status-im.contact.core :as contact]
|
[status-im.contact.core :as contact]
|
||||||
[status-im.contact.db :as contact.db]
|
[status-im.contact.db :as contact.db]
|
||||||
[taoensso.timbre :as log]
|
[taoensso.timbre :as log]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
[status-im.i18n :as i18n]
|
[status-im.i18n :as i18n]
|
||||||
[status-im.multiaccounts.model :as multiaccounts.model]
|
[status-im.multiaccounts.model :as multiaccounts.model]
|
||||||
[status-im.multiaccounts.update.core :as multiaccounts.update]
|
[status-im.multiaccounts.update.core :as multiaccounts.update]
|
||||||
[status-im.transport.message.protocol :as protocol]
|
[status-im.transport.message.protocol :as protocol]
|
||||||
[status-im.ui.screens.navigation :as navigation]
|
[status-im.ui.screens.navigation :as navigation]
|
||||||
[status-im.utils.config :as config]
|
[status-im.utils.config :as config]
|
||||||
[status-im.utils.fx :as fx]
|
[status-im.utils.fx :as fx]
|
||||||
[status-im.utils.identicon :as identicon]
|
[status-im.utils.identicon :as identicon]
|
||||||
[status-im.utils.pairing :as pairing.utils]
|
[status-im.utils.pairing :as pairing.utils]
|
||||||
[status-im.utils.platform :as utils.platform]
|
[status-im.utils.platform :as utils.platform]
|
||||||
[status-im.utils.types :as types]))
|
[status-im.utils.types :as types]))
|
||||||
|
|
||||||
(defn enable-installation-rpc [installation-id on-success on-failure]
|
(defn enable-installation-rpc [waku-enabled? installation-id on-success on-failure]
|
||||||
(json-rpc/call {:method (json-rpc/call-ext-method "enableInstallation")
|
(json-rpc/call {:method (json-rpc/call-ext-method waku-enabled? "enableInstallation")
|
||||||
:params [installation-id]
|
:params [installation-id]
|
||||||
:on-success on-success
|
:on-success on-success
|
||||||
:on-failure on-failure}))
|
:on-failure on-failure}))
|
||||||
|
|
||||||
(defn disable-installation-rpc [installation-id on-success on-failure]
|
(defn disable-installation-rpc [waku-enabled? installation-id on-success on-failure]
|
||||||
(json-rpc/call {:method (json-rpc/call-ext-method "disableInstallation")
|
(json-rpc/call {:method (json-rpc/call-ext-method waku-enabled? "disableInstallation")
|
||||||
:params [installation-id]
|
:params [installation-id]
|
||||||
:on-success on-success
|
:on-success on-success
|
||||||
:on-failure on-failure}))
|
:on-failure on-failure}))
|
||||||
|
|
||||||
(defn set-installation-metadata-rpc [installation-id metadata on-success on-failure]
|
(defn set-installation-metadata-rpc [waku-enabled? installation-id metadata on-success on-failure]
|
||||||
(json-rpc/call {:method (json-rpc/call-ext-method "setInstallationMetadata")
|
(json-rpc/call {:method (json-rpc/call-ext-method waku-enabled? "setInstallationMetadata")
|
||||||
:params [installation-id metadata]
|
:params [installation-id metadata]
|
||||||
:on-success on-success
|
:on-success on-success
|
||||||
:on-failure on-failure}))
|
:on-failure on-failure}))
|
||||||
|
|
||||||
(defn get-our-installations-rpc [on-success on-failure]
|
(defn get-our-installations-rpc [waku-enabled? on-success on-failure]
|
||||||
(json-rpc/call {:method (json-rpc/call-ext-method "getOurInstallations")
|
(json-rpc/call {:method (json-rpc/call-ext-method waku-enabled? "getOurInstallations")
|
||||||
:params []
|
:params []
|
||||||
:on-success on-success
|
:on-success on-success
|
||||||
:on-failure on-failure}))
|
:on-failure on-failure}))
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
|
|
||||||
(defn send-pair-installation
|
(defn send-pair-installation
|
||||||
[cofx]
|
[cofx]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "sendPairInstallation")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "sendPairInstallation")
|
||||||
:params []
|
:params []
|
||||||
:on-success #(log/info "sent pair installation message")}]})
|
:on-success #(log/info "sent pair installation message")}]})
|
||||||
|
|
||||||
|
@ -91,11 +91,13 @@
|
||||||
"Set the name of the device"
|
"Set the name of the device"
|
||||||
[{:keys [db] :as cofx} installation-name]
|
[{:keys [db] :as cofx} installation-name]
|
||||||
(let [our-installation-id (get-in db [:multiaccount :installation-id])]
|
(let [our-installation-id (get-in db [:multiaccount :installation-id])]
|
||||||
{:pairing/set-installation-metadata [[our-installation-id {:name installation-name
|
{:pairing/set-installation-metadata [(waku/enabled? cofx)
|
||||||
:deviceType utils.platform/os}]]}))
|
our-installation-id
|
||||||
|
{:name installation-name
|
||||||
|
:deviceType utils.platform/os}]}))
|
||||||
|
|
||||||
(fx/defn init [cofx]
|
(fx/defn init [cofx]
|
||||||
{:pairing/get-our-installations nil})
|
{:pairing/get-our-installations (waku/enabled? cofx)})
|
||||||
|
|
||||||
(defn handle-bundles-added [{:keys [db] :as cofx} bundle]
|
(defn handle-bundles-added [{:keys [db] :as cofx} bundle]
|
||||||
(let [installation-id (:installationID bundle)]
|
(let [installation-id (:installationID bundle)]
|
||||||
|
@ -139,57 +141,64 @@
|
||||||
[result]
|
[result]
|
||||||
(re-frame/dispatch [:pairing.callback/get-our-installations-success result]))
|
(re-frame/dispatch [:pairing.callback/get-our-installations-success result]))
|
||||||
|
|
||||||
(defn enable-installation! [installation-id]
|
(defn enable-installation! [waku-enabled? installation-id]
|
||||||
(enable-installation-rpc installation-id
|
(enable-installation-rpc
|
||||||
(partial handle-enable-installation-response-success installation-id)
|
waku-enabled?
|
||||||
nil))
|
installation-id
|
||||||
|
(partial handle-enable-installation-response-success installation-id)
|
||||||
|
nil))
|
||||||
|
|
||||||
(defn disable-installation! [installation-id]
|
(defn disable-installation! [waku-enabled? installation-id]
|
||||||
(disable-installation-rpc installation-id
|
(disable-installation-rpc
|
||||||
(partial handle-disable-installation-response-success installation-id)
|
waku-enabled?
|
||||||
nil))
|
installation-id
|
||||||
|
(partial handle-disable-installation-response-success installation-id)
|
||||||
|
nil))
|
||||||
|
|
||||||
(defn set-installation-metadata! [installation-id metadata]
|
(defn set-installation-metadata! [waku-enabled? installation-id metadata]
|
||||||
(set-installation-metadata-rpc installation-id
|
(set-installation-metadata-rpc
|
||||||
metadata
|
waku-enabled?
|
||||||
(partial handle-set-installation-metadata-response-success installation-id metadata)
|
installation-id
|
||||||
nil))
|
metadata
|
||||||
|
(partial handle-set-installation-metadata-response-success installation-id metadata)
|
||||||
|
nil))
|
||||||
|
|
||||||
(defn get-our-installations []
|
(defn get-our-installations [waku-enabled?]
|
||||||
(get-our-installations-rpc handle-get-our-installations-response-success nil))
|
(get-our-installations-rpc waku-enabled? handle-get-our-installations-response-success nil))
|
||||||
|
|
||||||
(defn enable-fx [cofx installation-id]
|
(defn enable-fx [cofx installation-id]
|
||||||
(if (< (count (filter :enabled? (vals (get-in cofx [:db :pairing/installations])))) (inc config/max-installations))
|
(if (< (count (filter :enabled? (vals (get-in cofx [:db :pairing/installations])))) (inc config/max-installations))
|
||||||
{:pairing/enable-installation installation-id}
|
{:pairing/enable-installation [(waku/enabled? cofx) installation-id]}
|
||||||
{:utils/show-popup {:title (i18n/label :t/pairing-maximum-number-reached-title)
|
{:utils/show-popup {:title (i18n/label :t/pairing-maximum-number-reached-title)
|
||||||
|
|
||||||
:content (i18n/label :t/pairing-maximum-number-reached-content)}}))
|
:content (i18n/label :t/pairing-maximum-number-reached-content)}}))
|
||||||
|
|
||||||
(defn disable-fx [_ installation-id]
|
(defn disable-fx [cofx installation-id]
|
||||||
{:pairing/disable-installation installation-id})
|
{:pairing/disable-installation [(waku/enabled? cofx) installation-id]})
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:pairing/enable-installation
|
:pairing/enable-installation
|
||||||
enable-installation!)
|
(fn [[waku-enabled? installation-id]]
|
||||||
|
(enable-installation! waku-enabled? installation-id)))
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:pairing/disable-installation
|
:pairing/disable-installation
|
||||||
disable-installation!)
|
(fn [[waku-enabled? installation-id]]
|
||||||
|
(disable-installation! waku-enabled? installation-id)))
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:pairing/set-installation-metadata
|
:pairing/set-installation-metadata
|
||||||
(fn [pairs]
|
(fn [[waku-enabled? installation-id metadata]]
|
||||||
(doseq [[installation-id metadata] pairs]
|
(set-installation-metadata! waku-enabled? installation-id metadata)))
|
||||||
(set-installation-metadata! installation-id metadata))))
|
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:pairing/get-our-installations
|
:pairing/get-our-installations
|
||||||
get-our-installations)
|
get-our-installations)
|
||||||
|
|
||||||
(defn send-installation-messages [{:keys [db]}]
|
(defn send-installation-messages [{:keys [db] :as cofx}]
|
||||||
(let [multiaccount (:multiaccount db)
|
(let [multiaccount (:multiaccount db)
|
||||||
{:keys [name preferred-name photo-path]} multiaccount]
|
{:keys [name preferred-name photo-path]} multiaccount]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "syncDevices")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "syncDevices")
|
||||||
:params [(or preferred-name name) photo-path]
|
:params [(or preferred-name name) photo-path]
|
||||||
:on-success #(log/debug "successfully synced devices")}]}))
|
:on-success #(log/debug "successfully synced devices")}]}))
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[status-im.constants :as constants]
|
[status-im.constants :as constants]
|
||||||
[status-im.utils.config :as config]
|
[status-im.utils.config :as config]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.ethereum.abi-spec :as abi-spec]
|
[status-im.ethereum.abi-spec :as abi-spec]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
[status-im.ethereum.core :as ethereum]
|
[status-im.ethereum.core :as ethereum]
|
||||||
|
@ -213,7 +214,7 @@
|
||||||
(fx/defn send-transaction-message
|
(fx/defn send-transaction-message
|
||||||
{:events [::send-transaction-message]}
|
{:events [::send-transaction-message]}
|
||||||
[cofx chat-id value contract transaction-hash signature]
|
[cofx chat-id value contract transaction-hash signature]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "sendTransaction")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "sendTransaction")
|
||||||
:params [chat-id value contract transaction-hash
|
:params [chat-id value contract transaction-hash
|
||||||
(:result (types/json->clj signature))]
|
(:result (types/json->clj signature))]
|
||||||
:on-success
|
:on-success
|
||||||
|
@ -222,7 +223,7 @@
|
||||||
(fx/defn send-accept-request-transaction-message
|
(fx/defn send-accept-request-transaction-message
|
||||||
{:events [::send-accept-transaction-message]}
|
{:events [::send-accept-transaction-message]}
|
||||||
[cofx message-id transaction-hash signature]
|
[cofx message-id transaction-hash signature]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "acceptRequestTransaction")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "acceptRequestTransaction")
|
||||||
:params [transaction-hash message-id
|
:params [transaction-hash message-id
|
||||||
(:result (types/json->clj signature))]
|
(:result (types/json->clj signature))]
|
||||||
:on-success
|
:on-success
|
||||||
|
|
|
@ -487,6 +487,18 @@
|
||||||
(or (get multiaccount :log-level)
|
(or (get multiaccount :log-level)
|
||||||
config/log-level-status-go)))
|
config/log-level-status-go)))
|
||||||
|
|
||||||
|
(re-frame/reg-sub
|
||||||
|
:waku/enabled
|
||||||
|
:<- [:multiaccount]
|
||||||
|
(fn [multiaccount]
|
||||||
|
(boolean (get multiaccount :waku-enabled))))
|
||||||
|
|
||||||
|
(re-frame/reg-sub
|
||||||
|
:waku/bloom-filter-mode
|
||||||
|
:<- [:multiaccount]
|
||||||
|
(fn [multiaccount]
|
||||||
|
(boolean (get multiaccount :waku-bloom-filter-mode))))
|
||||||
|
|
||||||
(re-frame/reg-sub
|
(re-frame/reg-sub
|
||||||
:dapps-address
|
:dapps-address
|
||||||
:<- [:multiaccount]
|
:<- [:multiaccount]
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
(:require
|
(:require
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.native-module.core :as status]
|
[status-im.native-module.core :as status]
|
||||||
[status-im.mailserver.core :as mailserver]
|
[status-im.mailserver.core :as mailserver]
|
||||||
[status-im.transport.message.core :as message]
|
[status-im.transport.message.core :as message]
|
||||||
|
@ -40,7 +41,7 @@
|
||||||
initializiation is completed, otherwise we might receive messages/topics
|
initializiation is completed, otherwise we might receive messages/topics
|
||||||
when the state has not been properly initialized."
|
when the state has not been properly initialized."
|
||||||
[cofx]
|
[cofx]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "startMessenger")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "startMessenger")
|
||||||
:on-success #(do
|
:on-success #(do
|
||||||
(log/debug "messenger initialized")
|
(log/debug "messenger initialized")
|
||||||
(re-frame/dispatch [::init-whisper]))
|
(re-frame/dispatch [::init-whisper]))
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[clojure.string :as string]
|
[clojure.string :as string]
|
||||||
[status-im.contact.db :as contact.db]
|
[status-im.contact.db :as contact.db]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]
|
[status-im.ethereum.json-rpc :as json-rpc]
|
||||||
[status-im.utils.fx :as fx]
|
[status-im.utils.fx :as fx]
|
||||||
[status-im.utils.config :as config]
|
[status-im.utils.config :as config]
|
||||||
|
@ -17,26 +18,26 @@
|
||||||
(defn is-public-key? [k]
|
(defn is-public-key? [k]
|
||||||
(string/starts-with? k "0x"))
|
(string/starts-with? k "0x"))
|
||||||
|
|
||||||
(defn load-filters-rpc [chats on-success on-failure]
|
(defn load-filters-rpc [waku-enabled? chats on-success on-failure]
|
||||||
(json-rpc/call {:method (json-rpc/call-ext-method "loadFilters")
|
(json-rpc/call {:method (json-rpc/call-ext-method waku-enabled? "loadFilters")
|
||||||
:params [chats]
|
:params [chats]
|
||||||
:on-success on-success
|
:on-success on-success
|
||||||
:on-failure on-failure}))
|
:on-failure on-failure}))
|
||||||
|
|
||||||
(defn remove-filters-rpc [chats on-success on-failure]
|
(defn remove-filters-rpc [waku-enabled? chats on-success on-failure]
|
||||||
(json-rpc/call {:method (json-rpc/call-ext-method "removeFilters")
|
(json-rpc/call {:method (json-rpc/call-ext-method waku-enabled? "removeFilters")
|
||||||
:params [chats]
|
:params [chats]
|
||||||
:on-success on-success
|
:on-success on-success
|
||||||
:on-failure on-failure}))
|
:on-failure on-failure}))
|
||||||
|
|
||||||
;; fx functions
|
;; fx functions
|
||||||
|
|
||||||
(defn load-filter-fx [filters]
|
(defn load-filter-fx [waku-enabled? filters]
|
||||||
{:filters/load-filters filters})
|
{:filters/load-filters [[waku-enabled? filters]]})
|
||||||
|
|
||||||
(defn remove-filter-fx [filters]
|
(defn remove-filter-fx [waku-enabled? filters]
|
||||||
(when (seq filters)
|
(when (seq filters)
|
||||||
{:filters/remove-filters filters}))
|
{:filters/remove-filters [waku-enabled? filters]}))
|
||||||
|
|
||||||
;; dispatches
|
;; dispatches
|
||||||
|
|
||||||
|
@ -249,37 +250,37 @@
|
||||||
|
|
||||||
(fx/defn load-filters
|
(fx/defn load-filters
|
||||||
"Load all contacts and chats as filters"
|
"Load all contacts and chats as filters"
|
||||||
[{:keys [db]}]
|
[{:keys [db] :as cofx}]
|
||||||
(log/debug "loading filters")
|
(log/debug "loading filters")
|
||||||
(let [chats (vals (:chats db))
|
(let [chats (vals (:chats db))
|
||||||
contacts (vals (:contacts/contacts db))
|
contacts (vals (:contacts/contacts db))
|
||||||
filters (concat
|
filters (concat
|
||||||
(chats->filter-requests chats)
|
(chats->filter-requests chats)
|
||||||
(contacts->filter-requests contacts))]
|
(contacts->filter-requests contacts))]
|
||||||
(load-filter-fx filters)))
|
(load-filter-fx (waku/enabled? cofx) filters)))
|
||||||
|
|
||||||
;; Load functions: utility function to load filters
|
;; Load functions: utility function to load filters
|
||||||
|
|
||||||
(fx/defn load-chat
|
(fx/defn load-chat
|
||||||
"Check if a filter already exists for that chat, otherw load the filter"
|
"Check if a filter already exists for that chat, otherw load the filter"
|
||||||
[{:keys [db]} chat-id]
|
[{:keys [db] :as cofx} chat-id]
|
||||||
(when (and (filters-initialized? db)
|
(when (and (filters-initialized? db)
|
||||||
(not (chat-loaded? db chat-id)))
|
(not (chat-loaded? db chat-id)))
|
||||||
(let [chat (get-in db [:chats chat-id])]
|
(let [chat (get-in db [:chats chat-id])]
|
||||||
(load-filter-fx (->filter-request chat)))))
|
(load-filter-fx (waku/enabled? cofx) (->filter-request chat)))))
|
||||||
|
|
||||||
(fx/defn load-contact
|
(fx/defn load-contact
|
||||||
"Check if we already have a filter for that contact, otherwise load the filter
|
"Check if we already have a filter for that contact, otherwise load the filter
|
||||||
if the contact has been added"
|
if the contact has been added"
|
||||||
[{:keys [db]} contact]
|
[{:keys [db] :as cofx} contact]
|
||||||
(when-not (chat-loaded? db (:public-key contact))
|
(when-not (chat-loaded? db (:public-key contact))
|
||||||
(load-filter-fx (contacts->filter-requests [contact]))))
|
(load-filter-fx (waku/enabled? cofx) (contacts->filter-requests [contact]))))
|
||||||
|
|
||||||
(fx/defn load-member
|
(fx/defn load-member
|
||||||
"Check if we already have a filter for that member, otherwise load the filter, regardless of whether is in our contacts"
|
"Check if we already have a filter for that member, otherwise load the filter, regardless of whether is in our contacts"
|
||||||
[{:keys [db]} public-key]
|
[{:keys [db] :as cofx} public-key]
|
||||||
(when-not (chat-loaded? db public-key)
|
(when-not (chat-loaded? db public-key)
|
||||||
(load-filter-fx (->filter-request {:chat-id public-key}))))
|
(load-filter-fx (waku/enabled? cofx) (->filter-request {:chat-id public-key}))))
|
||||||
|
|
||||||
(fx/defn load-members
|
(fx/defn load-members
|
||||||
"Load multiple members"
|
"Load multiple members"
|
||||||
|
@ -310,6 +311,7 @@
|
||||||
;; we exclude the negotiated filters as those are not to be removed
|
;; we exclude the negotiated filters as those are not to be removed
|
||||||
;; otherwise we might miss messages
|
;; otherwise we might miss messages
|
||||||
(remove-filter-fx
|
(remove-filter-fx
|
||||||
|
(waku/enabled? cofx)
|
||||||
(non-negotiated-filters-for-chat-id db chat-id))))))
|
(non-negotiated-filters-for-chat-id db chat-id))))))
|
||||||
|
|
||||||
;; reg-fx
|
;; reg-fx
|
||||||
|
@ -336,17 +338,21 @@
|
||||||
;; we should recreate it.
|
;; we should recreate it.
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:filters/remove-filters
|
:filters/remove-filters
|
||||||
(fn [filters]
|
(fn [[waku-enabled? filters]]
|
||||||
(log/debug "removing filters" filters)
|
(log/debug "removing filters" filters)
|
||||||
(remove-filters-rpc
|
(remove-filters-rpc
|
||||||
|
waku-enabled?
|
||||||
(map ->remove-filter-request filters)
|
(map ->remove-filter-request filters)
|
||||||
#(filters-removed! filters)
|
#(filters-removed! filters)
|
||||||
#(log/error "remove-filters: failed error" %))))
|
#(log/error "remove-filters: failed error" %))))
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:filters/load-filters
|
:filters/load-filters
|
||||||
(fn [filters]
|
(fn [raw-filters]
|
||||||
(load-filters-rpc
|
(let [waku-enabled? (first (first raw-filters))
|
||||||
filters
|
all-filters (mapcat second raw-filters)]
|
||||||
#(filters-added! (map responses->filters %))
|
(load-filters-rpc
|
||||||
#(log/error "load-filters: failed error" %))))
|
waku-enabled?
|
||||||
|
all-filters
|
||||||
|
#(filters-added! (map responses->filters %))
|
||||||
|
#(log/error "load-filters: failed error" %)))))
|
||||||
|
|
|
@ -6,15 +6,17 @@
|
||||||
[status-im.utils.fx :as fx]
|
[status-im.utils.fx :as fx]
|
||||||
[taoensso.timbre :as log]))
|
[taoensso.timbre :as log]))
|
||||||
|
|
||||||
(fx/defn send-chat-message [_ {:keys [chat-id
|
(fx/defn send-chat-message [cofx {:keys [chat-id
|
||||||
text
|
text
|
||||||
response-to
|
response-to
|
||||||
ens-name
|
ens-name
|
||||||
message-type
|
message-type
|
||||||
sticker
|
sticker
|
||||||
content-type]
|
content-type]
|
||||||
:as message}]
|
:as message}]
|
||||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "sendChatMessage")
|
{::json-rpc/call [{:method (json-rpc/call-ext-method
|
||||||
|
(get-in cofx [:db :multiaccount :waku-enabled])
|
||||||
|
"sendChatMessage")
|
||||||
:params [{:chatId chat-id
|
:params [{:chatId chat-id
|
||||||
:text text
|
:text text
|
||||||
:responseTo response-to
|
:responseTo response-to
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
[status-im.ethereum.json-rpc :as json-rpc]))
|
[status-im.ethereum.json-rpc :as json-rpc]))
|
||||||
|
|
||||||
(defn generate-sym-key-from-password
|
(defn generate-sym-key-from-password
|
||||||
[{:keys [password on-success on-error]}]
|
[waku-enabled? {:keys [password on-success on-error]}]
|
||||||
(json-rpc/call {:method (if config/waku-enabled?
|
(json-rpc/call {:method (if waku-enabled?
|
||||||
"waku_generateSymKeyFromPassword"
|
"waku_generateSymKeyFromPassword"
|
||||||
"shh_generateSymKeyFromPassword")
|
"shh_generateSymKeyFromPassword")
|
||||||
:params [password]
|
:params [password]
|
||||||
|
@ -17,8 +17,8 @@
|
||||||
:on-error on-error}))
|
:on-error on-error}))
|
||||||
|
|
||||||
(defn get-sym-key
|
(defn get-sym-key
|
||||||
[{:keys [sym-key-id on-success on-error]}]
|
[waku-enabled? {:keys [sym-key-id on-success on-error]}]
|
||||||
(json-rpc/call {:method (if config/waku-enabled?
|
(json-rpc/call {:method (if waku-enabled?
|
||||||
"waku_getSymKey"
|
"waku_getSymKey"
|
||||||
"shh_getSymKey")
|
"shh_getSymKey")
|
||||||
:params [sym-key-id]
|
:params [sym-key-id]
|
||||||
|
@ -30,12 +30,14 @@
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:shh/generate-sym-key-from-password
|
:shh/generate-sym-key-from-password
|
||||||
(fn [args]
|
(fn [[waku-enabled? {:keys [password on-success]}]]
|
||||||
(doseq [{:keys [password on-success]} args]
|
(generate-sym-key-from-password
|
||||||
(generate-sym-key-from-password {:password password
|
waku-enabled?
|
||||||
:on-success (fn [sym-key-id]
|
{:password password
|
||||||
(get-sym-key {:sym-key-id sym-key-id
|
:on-success (fn [sym-key-id]
|
||||||
:on-success (fn [sym-key]
|
(get-sym-key waku-enabled?
|
||||||
(on-success sym-key sym-key-id))
|
{:sym-key-id sym-key-id
|
||||||
:on-error log-error}))
|
:on-success (fn [sym-key]
|
||||||
:on-error log-error}))))
|
(on-success sym-key sym-key-id))
|
||||||
|
:on-error log-error}))
|
||||||
|
:on-error log-error})))
|
||||||
|
|
|
@ -6,8 +6,12 @@
|
||||||
[status-im.ui.components.react :as react]
|
[status-im.ui.components.react :as react]
|
||||||
[status-im.ui.components.topbar :as topbar]))
|
[status-im.ui.components.topbar :as topbar]))
|
||||||
|
|
||||||
(defn- normal-mode-settings-data [network-name current-log-level
|
(defn- normal-mode-settings-data [{:keys [network-name
|
||||||
current-fleet dev-mode?]
|
current-log-level
|
||||||
|
waku-enabled
|
||||||
|
waku-bloom-filter-mode
|
||||||
|
current-fleet
|
||||||
|
dev-mode?]}]
|
||||||
[{:type :small
|
[{:type :small
|
||||||
:title :t/network
|
:title :t/network
|
||||||
:accessibility-label :network-button
|
:accessibility-label :network-button
|
||||||
|
@ -45,6 +49,36 @@
|
||||||
:on-press
|
:on-press
|
||||||
#(re-frame/dispatch [:navigate-to :bootnodes-settings])
|
#(re-frame/dispatch [:navigate-to :bootnodes-settings])
|
||||||
:accessories [:chevron]}
|
:accessories [:chevron]}
|
||||||
|
{:type :small
|
||||||
|
:title :t/waku-enabled
|
||||||
|
:accessibility-label :waku-enabled-settings-switch
|
||||||
|
:container-margin-bottom 8
|
||||||
|
:on-press
|
||||||
|
#(re-frame/dispatch
|
||||||
|
[:multiaccounts.ui/waku-enabled-switched (not waku-enabled)])
|
||||||
|
:accessories
|
||||||
|
[[react/switch
|
||||||
|
{:track-color #js {:true colors/blue :false nil}
|
||||||
|
:value waku-enabled
|
||||||
|
:on-value-change
|
||||||
|
#(re-frame/dispatch
|
||||||
|
[:multiaccounts.ui/waku-enabled-switched (not waku-enabled)])
|
||||||
|
:disabled false}]]}
|
||||||
|
{:type :small
|
||||||
|
:title :t/waku-bloom-filter-mode
|
||||||
|
:accessibility-label :waku-bloom-filter-mode-settings-switch
|
||||||
|
:container-margin-bottom 8
|
||||||
|
:on-press
|
||||||
|
#(re-frame/dispatch
|
||||||
|
[:multiaccounts.ui/waku-bloom-filter-mode-switched (not waku-bloom-filter-mode)])
|
||||||
|
:accessories
|
||||||
|
[[react/switch
|
||||||
|
{:track-color #js {:true colors/blue :false nil}
|
||||||
|
:value waku-bloom-filter-mode
|
||||||
|
:on-value-change
|
||||||
|
#(re-frame/dispatch
|
||||||
|
[:multiaccounts.ui/waku-bloom-filter-mode-switched (not waku-bloom-filter-mode)])
|
||||||
|
:disabled false}]]}
|
||||||
#_{:type :small
|
#_{:type :small
|
||||||
:title :t/dev-mode
|
:title :t/dev-mode
|
||||||
:accessibility-label :dev-mode-settings-switch
|
:accessibility-label :dev-mode-settings-switch
|
||||||
|
@ -82,28 +116,34 @@
|
||||||
:disabled false}]]}
|
:disabled false}]]}
|
||||||
[react/view {:height 24}]])
|
[react/view {:height 24}]])
|
||||||
|
|
||||||
(defn- flat-list-data [network-name current-log-level current-fleet
|
(defn- flat-list-data [{:keys [dev-mode?
|
||||||
dev-mode? chaos-mode?]
|
chaos-mode?]
|
||||||
|
:as options}]
|
||||||
(if dev-mode?
|
(if dev-mode?
|
||||||
(into
|
(into
|
||||||
(normal-mode-settings-data
|
(normal-mode-settings-data options)
|
||||||
network-name current-log-level current-fleet dev-mode?)
|
|
||||||
(dev-mode-settings-data chaos-mode?))
|
(dev-mode-settings-data chaos-mode?))
|
||||||
;; else
|
;; else
|
||||||
(normal-mode-settings-data
|
(normal-mode-settings-data options)))
|
||||||
network-name current-log-level current-fleet dev-mode?)))
|
|
||||||
|
|
||||||
(views/defview advanced-settings []
|
(views/defview advanced-settings []
|
||||||
(views/letsubs [{:keys [chaos-mode?]} [:multiaccount]
|
(views/letsubs [{:keys [chaos-mode?]} [:multiaccount]
|
||||||
network-name [:network-name]
|
network-name [:network-name]
|
||||||
|
waku-enabled [:waku/enabled]
|
||||||
|
waku-bloom-filter-mode [:waku/bloom-filter-mode]
|
||||||
current-log-level [:log-level/current-log-level]
|
current-log-level [:log-level/current-log-level]
|
||||||
current-fleet [:fleets/current-fleet]]
|
current-fleet [:fleets/current-fleet]]
|
||||||
[react/view {:flex 1 :background-color colors/white}
|
[react/view {:flex 1 :background-color colors/white}
|
||||||
[topbar/topbar {:title :t/advanced}]
|
[topbar/topbar {:title :t/advanced}]
|
||||||
[list/flat-list
|
[list/flat-list
|
||||||
{:data (flat-list-data
|
{:data (flat-list-data
|
||||||
network-name current-log-level
|
{:network-name network-name
|
||||||
current-fleet false chaos-mode?)
|
:current-log-level current-log-level
|
||||||
|
:current-fleet current-fleet
|
||||||
|
:dev-mode? false
|
||||||
|
:waku-enabled waku-enabled
|
||||||
|
:waku-bloom-filter-mode waku-bloom-filter-mode
|
||||||
|
:chaos-mode? chaos-mode?})
|
||||||
|
|
||||||
:key-fn (fn [_ i] (str i))
|
:key-fn (fn [_ i] (str i))
|
||||||
:render-fn list/flat-list-generic-render-fn}]]))
|
:render-fn list/flat-list-generic-render-fn}]]))
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
:status-im.ens.core/verify-names
|
:status-im.ens.core/verify-names
|
||||||
:shh/send-direct-message
|
:shh/send-direct-message
|
||||||
:shh/remove-filter
|
:shh/remove-filter
|
||||||
:shh/generate-sym-key-from-password
|
|
||||||
:transport/confirm-messages-processed
|
:transport/confirm-messages-processed
|
||||||
:group-chats/extract-membership-signature
|
:group-chats/extract-membership-signature
|
||||||
:utils/dispatch-later
|
:utils/dispatch-later
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
(ns status-im.waku.core
|
||||||
|
(:require [re-frame.core :as re-frame]
|
||||||
|
[status-im.multiaccounts.update.core :as multiaccounts.update]
|
||||||
|
[status-im.node.core :as node]
|
||||||
|
[status-im.utils.fx :as fx]))
|
||||||
|
|
||||||
|
(defn enabled? [cofx]
|
||||||
|
(get-in cofx [:db :multiaccount :waku-enabled]))
|
||||||
|
|
||||||
|
(fx/defn switch-waku-enabled
|
||||||
|
{:events [:multiaccounts.ui/waku-enabled-switched]}
|
||||||
|
[cofx enabled?]
|
||||||
|
(fx/merge cofx
|
||||||
|
(multiaccounts.update/multiaccount-update :waku-enabled enabled?
|
||||||
|
{})
|
||||||
|
(node/prepare-new-config
|
||||||
|
{:on-success #(re-frame/dispatch [:logout])})))
|
||||||
|
|
||||||
|
(fx/defn switch-waku-bloom-filter-mode
|
||||||
|
{:events [:multiaccounts.ui/waku-bloom-filter-mode-switched]}
|
||||||
|
[cofx enabled?]
|
||||||
|
(fx/merge cofx
|
||||||
|
(multiaccounts.update/multiaccount-update
|
||||||
|
:waku-bloom-filter-mode enabled?
|
||||||
|
{})
|
||||||
|
(node/prepare-new-config
|
||||||
|
{:on-success #(re-frame/dispatch [:logout])})))
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[status-im.multiaccounts.update.core :as multiaccounts.update]
|
[status-im.multiaccounts.update.core :as multiaccounts.update]
|
||||||
[status-im.constants :as constants]
|
[status-im.constants :as constants]
|
||||||
|
[status-im.waku.core :as waku]
|
||||||
[status-im.chat.models.message :as chat.message]
|
[status-im.chat.models.message :as chat.message]
|
||||||
[status-im.ethereum.core :as ethereum]
|
[status-im.ethereum.core :as ethereum]
|
||||||
[status-im.ethereum.eip55 :as eip55]
|
[status-im.ethereum.eip55 :as eip55]
|
||||||
|
@ -407,7 +408,7 @@
|
||||||
[to-norm amount-hex])})}))
|
[to-norm amount-hex])})}))
|
||||||
{:db db
|
{:db db
|
||||||
::json-rpc/call
|
::json-rpc/call
|
||||||
[{:method (json-rpc/call-ext-method "requestAddressForTransaction")
|
[{:method (json-rpc/call-ext-method (waku/enabled? cofx) "requestAddressForTransaction")
|
||||||
:params [(:current-chat-id db)
|
:params [(:current-chat-id db)
|
||||||
from-address
|
from-address
|
||||||
amount
|
amount
|
||||||
|
@ -426,7 +427,7 @@
|
||||||
{:db (-> db
|
{:db (-> db
|
||||||
(update-in [:chat-ui-props identity] dissoc :input-bottom-sheet)
|
(update-in [:chat-ui-props identity] dissoc :input-bottom-sheet)
|
||||||
(dissoc db :wallet/prepare-transaction))
|
(dissoc db :wallet/prepare-transaction))
|
||||||
::json-rpc/call [{:method (json-rpc/call-ext-method "requestTransaction")
|
::json-rpc/call [{:method (json-rpc/call-ext-method (waku/enabled? cofx) "requestTransaction")
|
||||||
:params [(:public-key to)
|
:params [(:public-key to)
|
||||||
amount
|
amount
|
||||||
(when-not (= symbol :ETH)
|
(when-not (= symbol :ETH)
|
||||||
|
|
|
@ -625,7 +625,7 @@
|
||||||
(is (= "mailserver-password"
|
(is (= "mailserver-password"
|
||||||
(-> (mailserver/connect-to-mailserver {:db db})
|
(-> (mailserver/connect-to-mailserver {:db db})
|
||||||
:shh/generate-sym-key-from-password
|
:shh/generate-sym-key-from-password
|
||||||
first
|
second
|
||||||
:password))))
|
:password))))
|
||||||
(let [mailserver-with-sym-key-db (assoc-in db
|
(let [mailserver-with-sym-key-db (assoc-in db
|
||||||
[:mailserver/mailservers :eth.staging "mailserverid" :sym-key-id]
|
[:mailserver/mailservers :eth.staging "mailserverid" :sym-key-id]
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
"b" {:chat-id chat-id :negotiated? true}}}}
|
"b" {:chat-id chat-id :negotiated? true}}}}
|
||||||
chat-id)]
|
chat-id)]
|
||||||
(is fx)
|
(is fx)
|
||||||
(is (= fx {:filters/remove-filters [{:chat-id chat-id :filter-id "a"}]})))))
|
(is (= fx {:filters/remove-filters [nil [{:chat-id chat-id :filter-id "a"}]]})))))
|
||||||
(testing "the user is still in some group chats"
|
(testing "the user is still in some group chats"
|
||||||
(testing "we joined, and group chat is active it does not remove filters"
|
(testing "we joined, and group chat is active it does not remove filters"
|
||||||
(let [fx (transport.filters/stop-listening {:db {:multiaccount {:public-key me}
|
(let [fx (transport.filters/stop-listening {:db {:multiaccount {:public-key me}
|
||||||
|
@ -46,7 +46,7 @@
|
||||||
{member-1 {:chat-id member-1 :filter-id "a"}}}}
|
{member-1 {:chat-id member-1 :filter-id "a"}}}}
|
||||||
member-1)]
|
member-1)]
|
||||||
(is fx)
|
(is fx)
|
||||||
(is (= fx {:filters/remove-filters [{:chat-id member-1 :filter-id "a"}]})))))
|
(is (= fx {:filters/remove-filters [nil [{:chat-id member-1 :filter-id "a"}]]})))))
|
||||||
(testing "we have a 1-to-1 chat with the user"
|
(testing "we have a 1-to-1 chat with the user"
|
||||||
(testing "it does not remove filter"
|
(testing "it does not remove filter"
|
||||||
(let [fx (transport.filters/stop-listening {:db {:chats
|
(let [fx (transport.filters/stop-listening {:db {:chats
|
||||||
|
@ -98,19 +98,19 @@
|
||||||
|
|
||||||
(deftest load-member
|
(deftest load-member
|
||||||
(testing "it returns fx for a member"
|
(testing "it returns fx for a member"
|
||||||
(is (= {:filters/load-filters [{:ChatID "0xchat-id-2"
|
(is (= {:filters/load-filters [[nil [{:ChatID "0xchat-id-2"
|
||||||
:OneToOne true
|
:OneToOne true
|
||||||
:Identity "chat-id-2"}]}
|
:Identity "chat-id-2"}]]]}
|
||||||
(transport.filters/load-member {:db {}} "0xchat-id-2"))))
|
(transport.filters/load-member {:db {}} "0xchat-id-2"))))
|
||||||
(testing "merging fx"
|
(testing "merging fx"
|
||||||
(is (=
|
(is (=
|
||||||
{:db {}
|
{:db {}
|
||||||
:filters/load-filters [{:ChatID "0xchat-id-1"
|
:filters/load-filters [[nil [{:ChatID "0xchat-id-1"
|
||||||
:OneToOne true
|
:OneToOne true
|
||||||
:Identity "chat-id-1"}
|
:Identity "chat-id-1"}]]
|
||||||
{:ChatID "0xchat-id-2"
|
[nil [{:ChatID "0xchat-id-2"
|
||||||
:OneToOne true
|
:OneToOne true
|
||||||
:Identity "chat-id-2"}]}
|
:Identity "chat-id-2"}]]]}
|
||||||
(apply fx/merge {:db {}}
|
(apply fx/merge {:db {}}
|
||||||
(map transport.filters/load-member ["0xchat-id-1" "0xchat-id-2"]))))))
|
(map transport.filters/load-member ["0xchat-id-1" "0xchat-id-2"]))))))
|
||||||
|
|
||||||
|
|
|
@ -1096,5 +1096,7 @@
|
||||||
"add-seed-account": "Add account with a seed phrase",
|
"add-seed-account": "Add account with a seed phrase",
|
||||||
"account-exists-title": "Account already exists",
|
"account-exists-title": "Account already exists",
|
||||||
"add-private-key-account": "Add account from private key",
|
"add-private-key-account": "Add account from private key",
|
||||||
"user-not-found": "User not found"
|
"user-not-found": "User not found",
|
||||||
|
"waku-enabled": "Waku enabled",
|
||||||
|
"waku-bloom-filter-mode": "Waku bloom filter mode"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue