diff --git a/mobile_files/package.json.orig b/mobile_files/package.json.orig index 3145c2f003..0885709c34 100644 --- a/mobile_files/package.json.orig +++ b/mobile_files/package.json.orig @@ -54,7 +54,7 @@ "react-native-safe-area-view": "0.9.0", "react-native-securerandom": "git+https://github.com/status-im/react-native-securerandom.git#0.1.1-2", "react-native-splash-screen": "3.1.1", - "react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.3.8", + "react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.3.9", "react-native-svg": "6.5.2", "react-native-tcp": "git+https://github.com/status-im/react-native-tcp.git#v3.3.0-1-status", "react-native-udp": "git+https://github.com/status-im/react-native-udp.git#2.3.1-1", diff --git a/mobile_files/yarn.lock b/mobile_files/yarn.lock index 4abf57b57a..dbba983707 100644 --- a/mobile_files/yarn.lock +++ b/mobile_files/yarn.lock @@ -5845,9 +5845,9 @@ react-native-splash-screen@3.1.1: resolved "https://registry.yarnpkg.com/react-native-splash-screen/-/react-native-splash-screen-3.1.1.tgz#1a4e46c9fdce53ff52af2a2cb4181788c4e30b30" integrity sha512-PU2YocOSGbLjL9Vgcq/cwMNuHHKNjjuPpa1IPMuWo+6EB/fSZ5VOmxSa7+eucQe3631s3NhGuk3eHKahU03a4Q== -"react-native-status-keycard@git+https://github.com/status-im/react-native-status-keycard.git#v2.3.8": - version "2.3.8" - resolved "git+https://github.com/status-im/react-native-status-keycard.git#e0448b0960a5b4041d2a04dda55bb39e2aa6b191" +"react-native-status-keycard@git+https://github.com/status-im/react-native-status-keycard.git#v2.3.9": + version "2.3.9" + resolved "git+https://github.com/status-im/react-native-status-keycard.git#d6378e434fcf06ca23f8c373a4d44d5a69c23db5" react-native-svg@6.5.2: version "6.5.2" diff --git a/src/status_im/events.cljs b/src/status_im/events.cljs index 6c2fc850b9..3d45d957be 100644 --- a/src/status_im/events.cljs +++ b/src/status_im/events.cljs @@ -1148,11 +1148,21 @@ (fn [cofx _] (hardwallet/load-loading-keys-screen cofx))) +(handlers/register-handler-fx + :hardwallet/load-loading-keys-screen + (fn [cofx _] + (hardwallet/load-loading-keys-screen cofx))) + (handlers/register-handler-fx :hardwallet.ui/recovery-phrase-cancel-pressed (fn [{:keys [db]} _] {:db (assoc-in db [:hardwallet :setup-step] :recovery-phrase)})) +(handlers/register-handler-fx + :hardwallet/load-preparing-screen + (fn [cofx _] + (hardwallet/load-preparing-screen cofx))) + (handlers/register-handler-fx :hardwallet/connection-error (fn [_ _] @@ -1182,6 +1192,16 @@ (fn [cofx _] (hardwallet/load-pairing-screen cofx))) +(handlers/register-handler-fx + :hardwallet/load-pairing-screen + (fn [cofx _] + (hardwallet/load-pairing-screen cofx))) + +(handlers/register-handler-fx + :hardwallet/load-generating-mnemonic-screen + (fn [cofx _] + (hardwallet/load-generating-mnemonic-screen cofx))) + (handlers/register-handler-fx :hardwallet/pair (fn [cofx _] diff --git a/src/status_im/hardwallet/core.cljs b/src/status_im/hardwallet/core.cljs index 1a5c4b09b5..4fe035eec4 100644 --- a/src/status_im/hardwallet/core.cljs +++ b/src/status_im/hardwallet/core.cljs @@ -272,10 +272,9 @@ (fx/defn on-get-application-info-success [{:keys [db] :as cofx} info on-success] (let [info' (js->clj info :keywordize-keys true) - {:keys [pin-retry-counter puk-retry-counter]} info' + {:keys [pin-retry-counter puk-retry-counter instance-uid]} info' connect-screen? (= (:view-id db) :hardwallet-connect) card-state (get-in db [:hardwallet :card-state]) - instance-uid (get-in db [:hardwallet :application-info :instance-uid]) accounts-screen? (= :accounts (:view-id db)) auto-login? (and accounts-screen? (not= on-success :hardwallet/auto-login)) @@ -488,16 +487,24 @@ (navigate-to-enter-pin-screen) (navigation/navigate-to-cofx :hardwallet-connect nil))))) -(fx/defn error-button-pressed [{:keys [db] :as cofx}] - (let [return-to-step (get-in db [:hardwallet :return-to-step] :begin)] - (fx/merge cofx - {:db (assoc-in db [:hardwallet :setup-step] return-to-step)} - (when-not return-to-step - (navigation/navigate-to-cofx :hardwallet-connect nil))))) +(fx/defn error-button-pressed + [{:keys [db] :as cofx}] + (let [card-connected? (get-in db [:hardwallet :card-connected?]) + on-card-connected (get-in db [:hardwallet :on-card-connected])] + (if card-connected? + {:dispatch [on-card-connected]} + (navigation/navigate-to-cofx cofx :hardwallet-connect nil)))) -(fx/defn load-pairing-screen [{:keys [db]}] - {:db (assoc-in db [:hardwallet :setup-step] :pairing) - :dispatch [:hardwallet/pair]}) +(fx/defn load-pairing-screen + [{:keys [db] :as cofx}] + (let [card-connected? (get-in db [:hardwallet :card-connected?])] + (fx/merge cofx + {:db (-> db + (assoc-in [:hardwallet :setup-step] :pairing) + (assoc-in [:hardwallet :on-card-connected] :hardwallet/load-pairing-screen))} + (if card-connected? + (dispatch-event :hardwallet/pair) + (navigation/navigate-to-cofx :hardwallet-connect nil))))) (fx/defn pair [cofx] (let [{:keys [password]} (get-in cofx [:db :hardwallet :secrets])] @@ -511,9 +518,15 @@ (assoc-in fx [:db :hardwallet :pin :enter-step] :confirmation)) (fx/defn load-preparing-screen - [{:keys [db]}] - {:db (assoc-in db [:hardwallet :setup-step] :preparing) - :dispatch [:hardwallet/start-installation]}) + [{:keys [db] :as cofx}] + (let [card-connected? (get-in db [:hardwallet :card-connected?])] + (fx/merge cofx + {:db (-> db + (assoc-in [:hardwallet :setup-step] :preparing) + (assoc-in [:hardwallet :on-card-connected] :hardwallet/load-preparing-screen))} + (if card-connected? + (dispatch-event :hardwallet/start-installation) + (navigation/navigate-to-cofx :hardwallet-connect nil))))) (fx/defn pin-match [{:keys [db] :as fx}] @@ -738,14 +751,26 @@ (pin-enter-error :t/pin-mismatch)))) (fx/defn load-loading-keys-screen - [{:keys [db]}] - {:db (assoc-in db [:hardwallet :setup-step] :loading-keys) - :dispatch [:hardwallet/generate-and-load-key]}) + [{:keys [db] :as cofx}] + (let [card-connected? (get-in db [:hardwallet :card-connected?])] + (fx/merge cofx + {:db (-> db + (assoc-in [:hardwallet :setup-step] :loading-keys) + (assoc-in [:hardwallet :on-card-connected] :hardwallet/load-loading-keys-screen))} + (if card-connected? + (dispatch-event :hardwallet/generate-and-load-key) + (navigation/navigate-to-cofx :hardwallet-connect nil))))) (fx/defn load-generating-mnemonic-screen - [{:keys [db]}] - {:db (assoc-in db [:hardwallet :setup-step] :generating-mnemonic) - :dispatch [:hardwallet/generate-mnemonic]}) + [{:keys [db] :as cofx}] + (let [card-connected? (get-in db [:hardwallet :card-connected?])] + (fx/merge cofx + {:db (-> db + (assoc-in [:hardwallet :setup-step] :generating-mnemonic) + (assoc-in [:hardwallet :on-card-connected] :hardwallet/load-generating-mnemonic-screen))} + (if card-connected? + (dispatch-event :hardwallet/generate-mnemonic) + (navigation/navigate-to-cofx :hardwallet-connect nil))))) (fx/defn generate-mnemonic [cofx] @@ -753,10 +778,9 @@ {:hardwallet/generate-mnemonic {:pairing pairing}})) (fx/defn on-card-connected - [{:keys [db] :as cofx} data] - (log/debug "[hardwallet] card connected " data) - (let [return-to-step (get-in db [:hardwallet :return-to-step]) - setup-step (get-in db [:hardwallet :setup-step]) + [{:keys [db] :as cofx} _] + (log/debug "[hardwallet] card connected") + (let [setup-step (get-in db [:hardwallet :setup-step]) setup-running? (boolean setup-step) pin-enter-step (get-in db [:hardwallet :pin :enter-step]) login? (= :login pin-enter-step) @@ -771,11 +795,9 @@ :else (get-in db [:hardwallet :on-card-read])) pairing (get-pairing db instance-uid)] (fx/merge cofx - {:db (cond-> db - return-to-step (assoc-in [:hardwallet :setup-step] return-to-step) - true (assoc-in [:hardwallet :card-connected?] true) - true (assoc-in [:hardwallet :card-read-in-progress?] (boolean on-card-read)) - true (assoc-in [:hardwallet :return-to-step] nil)) + {:db (-> db + (assoc-in [:hardwallet :card-connected?] true) + (assoc-in [:hardwallet :card-read-in-progress?] (boolean on-card-read))) :hardwallet/get-application-info {:pairing pairing :on-success on-card-read}} (when (and on-card-connected @@ -793,8 +815,8 @@ {:db (-> db (assoc-in [:hardwallet :card-connected?] false) (assoc-in [:hardwallet :card-read-in-progress?] false))} - (when (or setup-running? - on-card-connected) + (when (and setup-running? + on-card-connected) (navigation/navigate-to-cofx :hardwallet-connect nil))))) (fx/defn begin-setup-button-pressed @@ -832,6 +854,7 @@ (let [secrets' (js->clj secrets :keywordize-keys true)] {:hardwallet/get-application-info nil :db (-> db + (assoc-in [:hardwallet :on-card-connected] nil) (assoc-in [:hardwallet :setup-step] :secret-keys) (assoc-in [:hardwallet :secrets] secrets'))})) @@ -849,9 +872,7 @@ [{:keys [db] :as cofx} {:keys [code error]}] (log/debug "[hardwallet] install applet and init card error: " error) (fx/merge cofx - {:db (-> db - (assoc-in [:hardwallet :return-to-step] :begin) - (assoc-in [:hardwallet :setup-error] error))} + {:db (assoc-in db [:hardwallet :setup-error] error)} (process-error code))) (def on-init-card-error on-install-applet-and-init-card-error) @@ -877,6 +898,7 @@ (fx/merge cofx {:db (-> db (assoc-in [:hardwallet :application-info :paired?] true) + (assoc-in [:hardwallet :on-card-connected] nil) (assoc-in [:hardwallet :setup-step] next-step) (assoc-in [:hardwallet :secrets :pairing] pairing) (assoc-in [:hardwallet :secrets :paired-on] paired-on))} @@ -888,29 +910,22 @@ (fx/defn on-pairing-error [{:keys [db] :as cofx} {:keys [error code]}] (log/debug "[hardwallet] pairing error: " error) - (let [setup-step (get-in db [:hardwallet :setup-step]) - next-step (if (= setup-step :enter-pair-code) - :enter-pair-code - :secret-keys)] - (fx/merge cofx - {:db (-> db - (assoc-in [:hardwallet :return-to-step] next-step) - (assoc-in [:hardwallet :setup-error] error))} - (process-error code)))) + (fx/merge cofx + {:db (assoc-in db [:hardwallet :setup-error] error)} + (process-error code))) (fx/defn on-generate-mnemonic-success [{:keys [db]} mnemonic] {:db (-> db (assoc-in [:hardwallet :setup-step] :recovery-phrase) + (assoc-in [:hardwallet :on-card-connected] nil) (assoc-in [:hardwallet :secrets :mnemonic] mnemonic))}) (fx/defn on-generate-mnemonic-error [{:keys [db] :as cofx} {:keys [error code]}] (log/debug "[hardwallet] generate mnemonic error: " error) (fx/merge cofx - {:db (-> db - (assoc-in [:hardwallet :return-to-step] :card-ready) - (assoc-in [:hardwallet :setup-error] error))} + {:db (assoc-in db [:hardwallet :setup-error] error)} (process-error code))) (fx/defn recovery-phrase-start-confirmation [{:keys [db]}] @@ -1016,6 +1031,7 @@ (assoc-in [:hardwallet :wallet-address] wallet-address) (assoc-in [:hardwallet :encryption-public-key] encryption-public-key) (assoc-in [:hardwallet :keycard-instance-uid] instance-uid) + (assoc-in [:hardwallet :on-card-connected] nil) (update :hardwallet dissoc :recovery-phrase) (update-in [:hardwallet :secrets] dissoc :pin :puk :password) (assoc :node/on-ready :create-keycard-account) @@ -1027,9 +1043,7 @@ [{:keys [db] :as cofx} {:keys [error code]}] (log/debug "[hardwallet] generate and load key error: " error) (fx/merge cofx - {:db (-> db - (assoc-in [:hardwallet :return-to-step] :recovery-phrase) - (assoc-in [:hardwallet :setup-error] error))} + {:db (assoc-in db [:hardwallet :setup-error] error)} (process-error code))) (fx/defn on-get-keys-success