diff --git a/package-lock.json b/package-lock.json index 5553c93fb4..7c5e40c612 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9485,7 +9485,7 @@ } }, "web3": { - "version": "github:status-im/web3.js#17b13f26044e60ac824d1b97052bfad1be5af9cc", + "version": "github:status-im/web3.js#aca66029d7ffac8ed2803b2fc7f0fec01e335ca3", "requires": { "bignumber.js": "github:status-im/bignumber.js#cc066a0a3d6bfe0c436c9957f4ea8344bf963c89", "crypto-js": "3.1.8", diff --git a/src/status_im/protocol/handlers.cljs b/src/status_im/protocol/handlers.cljs index 052cafb892..9cddffae68 100644 --- a/src/status_im/protocol/handlers.cljs +++ b/src/status_im/protocol/handlers.cljs @@ -240,8 +240,9 @@ (re-frame/reg-fx ::request-messages - (fn [{:keys [wnode topic sym-key-id]}] - (inbox/request-messages wnode + (fn [{:keys [wnode topic sym-key-id web3]}] + (inbox/request-messages web3 + wnode topic sym-key-id #(re-frame/dispatch [::request-messages-success %]) diff --git a/src/status_im/protocol/web3/inbox.cljs b/src/status_im/protocol/web3/inbox.cljs index e2c4bef0b9..01c9c00c5e 100644 --- a/src/status_im/protocol/web3/inbox.cljs +++ b/src/status_im/protocol/web3/inbox.cljs @@ -3,7 +3,8 @@ [taoensso.timbre :as log] [re-frame.core :as re-frame] [clojure.string :as string] - [status-im.protocol.web3.keys :as keys])) + [status-im.protocol.web3.keys :as keys] + [status-im.protocol.web3.utils :as utils])) (def peers (atom #{})) (def trusted-peers (atom #{})) @@ -12,20 +13,28 @@ ;; {"error": "msg"} or {"result": true} (defn- parse-json [s] (try - (-> s - js/JSON.parse - (js->clj :keywordize-keys true)) + (let [res (-> s + js/JSON.parse + (js->clj :keywordize-keys true))] + ;; NOTE(dmitryn): AddPeer() may return {"error": ""} + ;; assuming empty error is a success response + ;; by transforming {"error": ""} to {:result true} + (if (and (:error res) + (= (:error res) "")) + {:result true} + res)) (catch :default e {:error (.-message e)}))) (defn- response-handler [error-fn success-fn] - (fn [response] - (let [{:keys [error result]} (parse-json response)] - ;; NOTE(dmitryn): AddPeer() may return {"error": ""} - ;; assuming empty error is a success response - (if (seq error) - (error-fn error) - (success-fn result))))) + (fn handle-response + ([response] + (let [{:keys [error result]} (parse-json response)] + (handle-response error result))) + ([error result] + (if error + (error-fn error) + (success-fn result))))) (defn add-peer [enode success-fn error-fn] (if (@peers enode) @@ -49,27 +58,15 @@ (swap! trusted-peers conj enode) (success-fn result))))))) -;; TODO(oskarth): Use web3 binding instead of raw RPC above, pending binding and deps: -;; (.requestMessages (utils/shh web3) -;; (clj->js opts) -;; callback -;; #(log/warn :request-messages-error -;; (.stringify js/JSON (clj->js opts)) %)) -(defn request-messages [wnode topic sym-key-id success-fn error-fn] +(defn request-messages [web3 wnode topic sym-key-id success-fn error-fn] (log/info "offline inbox: sym-key-id" sym-key-id) - (let [args {:jsonrpc "2.0" - :id 2 - :method "shh_requestMessages" - ;; NOTE: "from" and "to" parameters omitted here - ;; by default "from" is 24 hours ago and "to" is time now - :params [{:mailServerPeer wnode - :topic topic - :symKeyID sym-key-id}]} - payload (.stringify js/JSON (clj->js args))] + (let [opts {:mailServerPeer wnode + :topic topic + :symKeyID sym-key-id}] (log/info "offline inbox: request-messages request") - (log/info "offline inbox: request-messages args" (pr-str args)) - (log/info "offline inbox: request-messages payload" (pr-str payload)) - (status/call-web3 payload + (log/info "offline inbox: request-messages args" (pr-str opts)) + (.requestMessages (utils/shh web3) + (clj->js opts) (response-handler error-fn success-fn)))) (defn initialize! [web3]