From fc4c406995aaa8d116fd5b35d9af551ebdc93e29 Mon Sep 17 00:00:00 2001 From: Parvesh Monu Date: Tue, 3 Sep 2024 17:47:30 +0530 Subject: [PATCH] Implement seed phrase fallback flow https://github.com/status-im/status-go/compare/81cfce70...84df75e8 --- .../status_im/data_store/activities_test.cljs | 34 ++++---- src/legacy/status_im/pairing/core.cljs | 17 ++++ .../common/new_device_sheet/style.cljs | 23 ++++++ .../common/new_device_sheet/view.cljs | 75 ++++++++++++++++++ src/status_im/contexts/onboarding/events.cljs | 40 ++++++---- .../onboarding/syncing/progress/view.cljs | 39 +++++++--- .../contexts/profile/login/events.cljs | 2 + .../contexts/profile/recover/events.cljs | 15 ++-- .../notification/syncing/view.cljs | 78 +++++++++++++++++++ .../activity_center/notification_types.cljs | 6 +- .../contexts/shell/activity_center/view.cljs | 7 ++ src/status_im/contexts/syncing/events.cljs | 33 +++++++- src/status_im/subs/activity_center_test.cljs | 53 +++++++------ src/status_im/subs/profile.cljs | 5 ++ status-go-version.json | 6 +- translations/en.json | 10 +++ 16 files changed, 364 insertions(+), 79 deletions(-) create mode 100644 src/status_im/common/new_device_sheet/style.cljs create mode 100644 src/status_im/common/new_device_sheet/view.cljs create mode 100644 src/status_im/contexts/shell/activity_center/notification/syncing/view.cljs diff --git a/src/legacy/status_im/data_store/activities_test.cljs b/src/legacy/status_im/data_store/activities_test.cljs index 31d78111250e..1c930ef2b7ee 100644 --- a/src/legacy/status_im/data_store/activities_test.cljs +++ b/src/legacy/status_im/data_store/activities_test.cljs @@ -117,20 +117,24 @@ (deftest parse-notification-counts-response-test (is - (= {notification-types/one-to-one-chat 15 - notification-types/private-group-chat 16 - notification-types/mention 17 - notification-types/reply 18 - notification-types/contact-request 19 - notification-types/admin 20 - notification-types/contact-verification 21} + (= {notification-types/one-to-one-chat 15 + notification-types/private-group-chat 16 + notification-types/mention 17 + notification-types/reply 18 + notification-types/contact-request 19 + notification-types/admin 20 + notification-types/contact-verification 21 + notification-types/new-installation-received 22 + notification-types/new-installation-created 23} (store/parse-notification-counts-response - {(keyword (str notification-types/one-to-one-chat)) 15 - (keyword (str notification-types/private-group-chat)) 16 - (keyword (str notification-types/mention)) 17 - (keyword (str notification-types/reply)) 18 - (keyword (str notification-types/contact-request)) 19 - (keyword (str notification-types/admin)) 20 - (keyword (str notification-types/contact-verification)) 21 + {(keyword (str notification-types/one-to-one-chat)) 15 + (keyword (str notification-types/private-group-chat)) 16 + (keyword (str notification-types/mention)) 17 + (keyword (str notification-types/reply)) 18 + (keyword (str notification-types/contact-request)) 19 + (keyword (str notification-types/admin)) 20 + (keyword (str notification-types/contact-verification)) 21 + (keyword (str notification-types/new-installation-received)) 22 + (keyword (str notification-types/new-installation-created)) 23 ;; Unsupported type in the response is ignored - :999 100})))) + :999 100})))) diff --git a/src/legacy/status_im/pairing/core.cljs b/src/legacy/status_im/pairing/core.cljs index 916ab2de3df3..282af4ff977c 100644 --- a/src/legacy/status_im/pairing/core.cljs +++ b/src/legacy/status_im/pairing/core.cljs @@ -243,6 +243,23 @@ {} installations))}) +(rf/defn finish-seed-phrase-fallback-syncing + {:events [:pairing/finish-seed-phrase-fallback-syncing]} + [{:keys [db]}] + {:fx [[:json-rpc/call + [{:method "wakuext_enableInstallationAndPair" + :params [{:installationId (:syncing/installation-id db)}] + :js-response true + :on-success #(rf/dispatch [:sanitize-messages-and-process-response %])}]]]}) + +(rf/defn pair-and-sync + {:events [:pairing/pair-and-sync]} + [cofx installation-id] + {:fx [[:json-rpc/call + [{:method "wakuext_enableInstallationAndSync" + :params [{:installationId installation-id}] + :on-success #(log/debug "successfully synced devices")}]]]}) + (rf/defn enable-installation-success {:events [:pairing.callback/enable-installation-success]} [cofx installation-id] diff --git a/src/status_im/common/new_device_sheet/style.cljs b/src/status_im/common/new_device_sheet/style.cljs new file mode 100644 index 000000000000..9d71a9df0660 --- /dev/null +++ b/src/status_im/common/new_device_sheet/style.cljs @@ -0,0 +1,23 @@ +(ns status-im.common.new-device-sheet.style + (:require [quo.foundations.colors :as colors])) + +(def heading + {:padding-left 20 + :padding-bottom 8}) + +(def message + {:padding-horizontal 20 + :padding-top 4}) + +(def warning + {:margin-horizontal 20 + :margin-top 10}) + +(def drawer-container + {:padding-horizontal 13 + :padding-top 16}) + +(def settings-subtext + {:color colors/white-opa-70 + :align-self :center + :margin-bottom 12}) diff --git a/src/status_im/common/new_device_sheet/view.cljs b/src/status_im/common/new_device_sheet/view.cljs new file mode 100644 index 000000000000..b10e03e6c7b8 --- /dev/null +++ b/src/status_im/common/new_device_sheet/view.cljs @@ -0,0 +1,75 @@ +(ns status-im.common.new-device-sheet.view + (:require + [quo.core :as quo] + [react-native.core :as rn] + [status-im.common.events-helper :as events-helper] + [status-im.common.new-device-sheet.style :as style] + [utils.i18n :as i18n] + [utils.re-frame :as rf])) + +(defn- pair-and-sync + [installation-id] + (rf/dispatch [:pairing/pair-and-sync installation-id]) + (events-helper/hide-bottom-sheet)) + +(defn installation-request-receiver-view + [installation-id] + (rn/use-mount events-helper/dismiss-keyboard) + [:<> + [quo/text + {:weight :semi-bold + :size :heading-2 + :accessibility-label :new-device-sheet-heading + :style style/heading} + (i18n/label :t/pair-new-device-and-sync)] + [quo/text + {:weight :regular + :size :paragraph-1 + :accessibility-label :new-device-sheet-message + :style style/message} + (i18n/label :t/new-device-detected-recovered-device-message)] + [quo/text + {:weight :semi-bold + :size :heading-2 + :accessibility-label :new-device-installation-id + :style style/heading} + installation-id] + [quo/bottom-actions + {:actions :two-actions + :blur? true + :container-style {:margin-top 12} + :button-two-label (i18n/label :t/cancel) + :button-two-props {:type :grey + :on-press events-helper/hide-bottom-sheet} + :button-one-label (i18n/label :t/pair-and-sync) + :button-one-props {:on-press #(pair-and-sync installation-id)}}]]) + +(defn installation-request-creator-view + [installation-id] + (rn/use-mount events-helper/dismiss-keyboard) + [:<> + [quo/text + {:weight :semi-bold + :size :heading-2 + :accessibility-label :new-device-sheet-heading + :style style/heading} + (i18n/label :t/pair-this-device-and-sync)] + [quo/text + {:weight :regular + :size :paragraph-1 + :accessibility-label :new-device-sheet-message + :style style/message} + (i18n/label :t/new-device-detected-other-device-message)] + [quo/text + {:weight :semi-bold + :size :heading-2 + :accessibility-label :new-device-installation-id + :style style/heading} + installation-id] + [quo/bottom-actions + {:actions :one-action + :blur? true + :container-style {:margin-top 12} + :button-one-label (i18n/label :t/close) + :button-one-props {:type :grey + :on-press events-helper/hide-bottom-sheet}}]]) diff --git a/src/status_im/contexts/onboarding/events.cljs b/src/status_im/contexts/onboarding/events.cljs index 3e73deac1df6..a974e47b0a6c 100644 --- a/src/status_im/contexts/onboarding/events.cljs +++ b/src/status_im/contexts/onboarding/events.cljs @@ -128,22 +128,30 @@ (rf/defn seed-phrase-validated {:events [:onboarding/seed-phrase-validated]} [{:keys [db]} seed-phrase key-uid] - (if (contains? (:profile/profiles-overview db) key-uid) - {:effects.utils/show-confirmation - {:title (i18n/label :t/multiaccount-exists-title) - :content (i18n/label :t/multiaccount-exists-content) - :confirm-button-text (i18n/label :t/unlock) - :on-accept (fn [] - (re-frame/dispatch [:pop-to-root :screen/profile.profiles]) - (re-frame/dispatch - [:profile/profile-selected key-uid])) - :on-cancel #(re-frame/dispatch [:pop-to-root :multiaccounts])}} - {:db (assoc-in db [:onboarding/profile :seed-phrase] seed-phrase) - :dispatch [:navigate-to-within-stack - [:screen/onboarding.create-profile - (get db - :onboarding/navigated-to-enter-seed-phrase-from-screen - :screen/onboarding.new-to-status)]]})) + (let [syncing-account-recovered? (and (seq (:syncing/key-uid db)) + (= (:syncing/key-uid db) key-uid)) + next-screen (if syncing-account-recovered? + :screen/onboarding.create-profile-password + :screen/onboarding.create-profile)] + (if (contains? (:profile/profiles-overview db) key-uid) + {:effects.utils/show-confirmation + {:title (i18n/label :t/multiaccount-exists-title) + :content (i18n/label :t/multiaccount-exists-content) + :confirm-button-text (i18n/label :t/unlock) + :on-accept (fn [] + (re-frame/dispatch [:pop-to-root :screen/profile.profiles]) + (re-frame/dispatch + [:profile/profile-selected key-uid])) + :on-cancel #(re-frame/dispatch [:pop-to-root :multiaccounts])}} + {:db (assoc-in db [:onboarding/profile :seed-phrase] seed-phrase) + :fx [[:dispatch + [:navigate-to-within-stack + [next-screen + (get db + :onboarding/navigated-to-enter-seed-phrase-from-screen + :screen/onboarding.new-to-status)]]] + (when-not syncing-account-recovered? + [:dispatch [:syncing/clear-syncing-data]])]}))) (rf/defn navigate-to-create-profile {:events [:onboarding/navigate-to-create-profile]} diff --git a/src/status_im/contexts/onboarding/syncing/progress/view.cljs b/src/status_im/contexts/onboarding/syncing/progress/view.cljs index c32a0f98b508..ea16830af163 100644 --- a/src/status_im/contexts/onboarding/syncing/progress/view.cljs +++ b/src/status_im/contexts/onboarding/syncing/progress/view.cljs @@ -5,6 +5,7 @@ [status-im.common.resources :as resources] [status-im.contexts.onboarding.common.background.view :as background] [status-im.contexts.onboarding.syncing.progress.style :as style] + [utils.debounce :as debounce] [utils.i18n :as i18n] [utils.re-frame :as rf])) @@ -25,17 +26,32 @@ :title-accessibility-label :progress-screen-title :description-accessibility-label :progress-screen-sub-title}]) +(defn- navigate-to-enter-seed-phrase + [] + (rf/dispatch [:navigate-back-to :screen/onboarding.sync-or-recover-profile]) + (debounce/debounce-and-dispatch + [:onboarding/navigate-to-sign-in-by-seed-phrase :screen/onboarding.sync-or-recover-profile] + 300)) + (defn try-again-button - [profile-color] - [quo/button - {:on-press (fn [] - (rf/dispatch [:syncing/clear-states]) - (rf/dispatch [:navigate-back])) - :accessibility-label :try-again-later-button - :customization-color profile-color - :size 40 - :container-style style/try-again-button} - (i18n/label :t/try-again)]) + [profile-color logged-in?] + [:<> + (when-not logged-in? + [quo/button + {:on-press navigate-to-enter-seed-phrase + :accessibility-label :try-seed-phrase-button + :customization-color profile-color + :container-style style/try-again-button} + (i18n/label :t/enter-seed-phrase)]) + [quo/button + {:on-press (fn [] + (rf/dispatch [:syncing/clear-states]) + (rf/dispatch [:navigate-back])) + :accessibility-label :try-again-later-button + :customization-color profile-color + :size 40 + :container-style style/try-again-button} + (i18n/label :t/try-again)]]) (defn- illustration [pairing-progress?] @@ -47,6 +63,7 @@ (defn view [in-onboarding?] (let [pairing-status (rf/sub [:pairing/pairing-status]) + logged-in? (rf/sub [:multiaccount/logged-in?]) pairing-progress? (pairing-progress pairing-status) profile-color (or (:color (rf/sub [:onboarding/profile])) (rf/sub [:profile/customization-color]))] @@ -58,7 +75,7 @@ [page-title pairing-progress?] [illustration pairing-progress?] (when-not (pairing-progress pairing-status) - [try-again-button profile-color])])) + [try-again-button profile-color logged-in?])])) (defn view-onboarding [] diff --git a/src/status_im/contexts/profile/login/events.cljs b/src/status_im/contexts/profile/login/events.cljs index e105be95c44c..e6fc7465b366 100644 --- a/src/status_im/contexts/profile/login/events.cljs +++ b/src/status_im/contexts/profile/login/events.cljs @@ -134,6 +134,8 @@ (rf/dispatch [:chats-list/load-success result]) (rf/dispatch [:communities/get-user-requests-to-join]) (rf/dispatch [:profile.login/get-chats-callback]))}] + (when (:syncing/installation-id db) + [:dispatch [:pairing/finish-seed-phrase-fallback-syncing]]) (when-not new-account? [:dispatch [:universal-links/process-stored-event]])]}))) diff --git a/src/status_im/contexts/profile/recover/events.cljs b/src/status_im/contexts/profile/recover/events.cljs index 850fc01cf539..381ad83af96a 100644 --- a/src/status_im/contexts/profile/recover/events.cljs +++ b/src/status_im/contexts/profile/recover/events.cljs @@ -1,6 +1,7 @@ (ns status-im.contexts.profile.recover.events (:require [native-module.core :as native-module] + [status-im.constants :as constants] [status-im.contexts.profile.config :as profile.config] status-im.contexts.profile.recover.effects [utils.re-frame :as rf] @@ -16,10 +17,10 @@ (assoc-in [:syncing :login-sha3-password] login-sha3-password)) :effects.profile/restore-and-login - (merge (profile.config/create) - {:displayName display-name - :mnemonic (security/safe-unmask-data seed-phrase) - :password login-sha3-password - :imagePath (profile.config/strip-file-prefix image-path) - :customizationColor color - :fetchBackup true})})) + (assoc (profile.config/create) + :displayName display-name + :mnemonic (security/safe-unmask-data seed-phrase) + :password login-sha3-password + :imagePath (profile.config/strip-file-prefix image-path) + :customizationColor (or color constants/profile-default-color) + :fetchBackup true)})) diff --git a/src/status_im/contexts/shell/activity_center/notification/syncing/view.cljs b/src/status_im/contexts/shell/activity_center/notification/syncing/view.cljs new file mode 100644 index 000000000000..654239150efc --- /dev/null +++ b/src/status_im/contexts/shell/activity_center/notification/syncing/view.cljs @@ -0,0 +1,78 @@ +(ns status-im.contexts.shell.activity-center.notification.syncing.view + (:require + [quo.core :as quo] + quo.theme + [react-native.core :as rn] + [status-im.common.new-device-sheet.view :as new-device-sheet] + [status-im.contexts.shell.activity-center.notification.common.view :as common] + [utils.datetime :as datetime] + [utils.i18n :as i18n] + [utils.re-frame :as rf])) + +(defn- swipeable + [{:keys [extra-fn]} child] + [common/swipeable + {:left-button common/swipe-button-read-or-unread + :left-on-press common/swipe-on-press-toggle-read + :right-button common/swipe-button-delete + :right-on-press common/swipe-on-press-delete + :extra-fn extra-fn} + child]) + +(defn installation-created-view + [{:keys [notification extra-fn]}] + (let [{:keys [installationId read timestamp]} notification + customization-color (rf/sub [:profile/customization-color]) + theme (quo.theme/use-theme) + more-details (rn/use-callback + (fn [] + (rf/dispatch [:show-bottom-sheet + {:content + (fn [] + [new-device-sheet/installation-request-creator-view + installationId])}])) + [installationId])] + [swipeable {:extra-fn extra-fn} + [quo/activity-log + {:title (i18n/label :t/sync-your-profile) + :customization-color customization-color + :icon :i/mobile + :timestamp (datetime/timestamp->relative timestamp) + :unread? (not read) + :context [(i18n/label :t/check-other-device-for-pairing)] + :items [{:type :button + :subtype :positive + :key :review-pairing-request + :blur? true + :label (i18n/label :t/more-details) + :theme theme + :on-press more-details}]}]])) + +(defn installation-received-view + [{:keys [notification extra-fn]}] + (let [{:keys [installationId read timestamp]} notification + customization-color (rf/sub [:profile/customization-color]) + theme (quo.theme/use-theme) + review-pairing-request (rn/use-callback + (fn [] + (rf/dispatch [:show-bottom-sheet + {:content + (fn [] + [new-device-sheet/installation-request-receiver-view + installationId])}])) + [installationId])] + [swipeable {:extra-fn extra-fn} + [quo/activity-log + {:title (i18n/label :t/new-device-detected) + :customization-color customization-color + :icon :i/mobile + :timestamp (datetime/timestamp->relative timestamp) + :unread? (not read) + :context [(i18n/label :t/new-device-detected)] + :items [{:type :button + :subtype :positive + :key :review-pairing-request + :blur? true + :label (i18n/label :t/review-pairing-request) + :theme theme + :on-press review-pairing-request}]}]])) diff --git a/src/status_im/contexts/shell/activity_center/notification_types.cljs b/src/status_im/contexts/shell/activity_center/notification_types.cljs index c24ef2ca5cce..a4f5ca722130 100644 --- a/src/status_im/contexts/shell/activity_center/notification_types.cljs +++ b/src/status_im/contexts/shell/activity_center/notification_types.cljs @@ -10,6 +10,8 @@ (def ^:const admin 8) (def ^:const community-kicked 9) (def ^:const contact-verification 10) +(def ^:const new-installation-received 23) +(def ^:const new-installation-created 24) (def ^:const all-supported #{one-to-one-chat @@ -20,7 +22,9 @@ community-request admin community-kicked - contact-verification}) + contact-verification + new-installation-received + new-installation-created}) ;; TODO: Replace with correct enum values once status-go implements them. (def ^:const tx 66612) diff --git a/src/status_im/contexts/shell/activity_center/view.cljs b/src/status_im/contexts/shell/activity_center/view.cljs index 25f9ca6e8e98..9137e5a2ebb1 100644 --- a/src/status_im/contexts/shell/activity_center/view.cljs +++ b/src/status_im/contexts/shell/activity_center/view.cljs @@ -19,6 +19,7 @@ [status-im.contexts.shell.activity-center.notification.membership.view :as membership] [status-im.contexts.shell.activity-center.notification.mentions.view :as mentions] [status-im.contexts.shell.activity-center.notification.reply.view :as reply] + [status-im.contexts.shell.activity-center.notification.syncing.view :as syncing] [status-im.contexts.shell.activity-center.style :as style] [status-im.contexts.shell.activity-center.tabs.empty-tab.view :as empty-tab] [utils.re-frame :as rf])) @@ -51,6 +52,12 @@ (= type types/admin) [admin/view props] + (= type types/new-installation-received) + [syncing/installation-received-view props] + + (= type types/new-installation-created) + [syncing/installation-created-view props] + (some types/membership [type]) (condp = type types/private-group-chat [membership/view props] diff --git a/src/status_im/contexts/syncing/events.cljs b/src/status_im/contexts/syncing/events.cljs index 87c69c6acfb3..bced4e125635 100644 --- a/src/status_im/contexts/syncing/events.cljs +++ b/src/status_im/contexts/syncing/events.cljs @@ -21,18 +21,44 @@ {:events [:syncing/clear-states]} [{:keys [db]} role] {:db (dissoc db :syncing)}) + (defn- input-connection-string-callback [res] (log/info "[local-pairing] input-connection-string-for-bootstrapping callback" {:response res :event :syncing/input-connection-string-for-bootstrapping}) - (let [error (when (sync-utils/extract-error res) - (str "generic-error: " res))] - (when (some? error) + (let [response (transforms/json->clj res) + installation-id (:installationId response) + key-uid (:keyUID response) + error (:error response)] + (when (seq installation-id) + (rf/dispatch [:syncing/set-syncing-installation-id installation-id key-uid])) + (when (seq error) (rf/dispatch [:toasts/upsert {:type :negative :text error}])))) +(rf/defn initiate-pairing-process + {:events [:syncing/initiate-pairing-process]} + [{:keys [db]}] + {:db (assoc db :syncing/pairing-process-initiated? true)}) + +(rf/defn set-syncing-installation-id + {:events [:syncing/set-syncing-installation-id]} + [{:keys [db]} installation-id key-uid] + {:db (assoc db + :syncing/key-uid key-uid + :syncing/installation-id installation-id)}) + +(rf/defn clear-syncing-data + {:events [:syncing/clear-syncing-data]} + [{:keys [db]}] + {:db (dissoc + db + :syncing/key-uid + :syncing/installation-id + :syncing/pairing-process-initiated?)}) + (rf/defn preflight-outbound-check-for-local-pairing {:events [:syncing/preflight-outbound-check]} [_ set-checks-passed] @@ -67,6 +93,7 @@ (when (sync-utils/valid-connection-string? response) (on-valid-connection-string response) (rf/dispatch [:syncing/update-role constants/local-pairing-role-sender]) + (rf/dispatch [:syncing/initiate-pairing-process]) (rf/dispatch [:hide-bottom-sheet])))] (when-not (and error (string/blank? error)) (let [key-uid (get-in db [:profile/profile :key-uid]) diff --git a/src/status_im/subs/activity_center_test.cljs b/src/status_im/subs/activity_center_test.cljs index 2b976d957835..3a2bc74c3b28 100644 --- a/src/status_im/subs/activity_center_test.cljs +++ b/src/status_im/subs/activity_center_test.cljs @@ -22,32 +22,37 @@ (testing "returns an empty set when no types have unread notifications" (swap! rf-db/app-db assoc-in [:activity-center :unread-counts-by-type] - {types/one-to-one-chat 0 - types/private-group-chat 0 - types/contact-verification 0 - types/contact-request 0 - types/mention 0 - types/reply 0 - types/admin 0}) + {types/one-to-one-chat 0 + types/private-group-chat 0 + types/contact-verification 0 + types/contact-request 0 + types/mention 0 + types/reply 0 + types/admin 0 + types/new-installation-received 0 + types/new-installation-created 0}) (is (= #{} (rf/sub [sub-name])))) (testing "returns a set with all types containing positive unread counts" (swap! rf-db/app-db assoc-in [:activity-center :unread-counts-by-type] - {types/one-to-one-chat 1 - types/private-group-chat 0 - types/contact-verification 1 - types/contact-request 0 - types/mention 3 - types/reply 0 - types/admin 2}) + {types/one-to-one-chat 1 + types/private-group-chat 0 + types/contact-verification 1 + types/contact-request 0 + types/mention 3 + types/reply 0 + types/admin 2 + types/new-installation-received 1 + types/new-installation-created 0}) (let [actual (rf/sub [sub-name])] (is (= #{types/one-to-one-chat types/contact-verification types/mention - types/admin} + types/admin + types/new-installation-received} actual)) (is (set? actual))))) @@ -55,15 +60,17 @@ [sub-name] (swap! rf-db/app-db assoc-in [:activity-center :unread-counts-by-type] - {types/one-to-one-chat 1 - types/private-group-chat 2 - types/contact-verification 3 - types/contact-request 4 - types/mention 5 - types/reply 6 - types/admin 7}) + {types/one-to-one-chat 1 + types/private-group-chat 2 + types/contact-verification 3 + types/contact-request 4 + types/mention 5 + types/reply 6 + types/admin 7 + types/new-installation-received 8 + types/new-installation-created 9}) - (is (= 28 (rf/sub [sub-name])))) + (is (= 45 (rf/sub [sub-name])))) (h/deftest-sub :activity-center/unread-indicator [sub-name] diff --git a/src/status_im/subs/profile.cljs b/src/status_im/subs/profile.cljs index 06ac358b0440..31c32b0c7ddf 100644 --- a/src/status_im/subs/profile.cljs +++ b/src/status_im/subs/profile.cljs @@ -266,6 +266,11 @@ (fn [{:keys [preview-privacy?]}] (boolean preview-privacy?))) +(re-frame/reg-sub :profile/installation-id + :<- [:profile/profile] + (fn [{:keys [installation-id]}] + installation-id)) + (defn- replace-multiaccount-image-uri [profile ens-names port font-file avatar-opts theme] (let [{:keys [key-uid ens-name? images diff --git a/status-go-version.json b/status-go-version.json index 5a4bc2378138..81c8c9c25393 100644 --- a/status-go-version.json +++ b/status-go-version.json @@ -3,7 +3,7 @@ "_comment": "Instead use: scripts/update-status-go.sh ", "owner": "status-im", "repo": "status-go", - "version": "v0.184.52", - "commit-sha1": "81cfce709e8d123eb1956b87f8e0f19dc47c122c", - "src-sha256": "0hna30ms4ccxmi20l5v36y84pva1s4jjkqg11whwmdjgw75d0fan" + "version": "feat/enable_sync_fallback", + "commit-sha1": "84df75e861f67295b6d3ed73ac1e5457d99696f0", + "src-sha256": "0xdahacrgw0z4f6i9p7d1m94g4y2wxnm21llpwdc2m7qf0jj6ca7" } diff --git a/translations/en.json b/translations/en.json index 39f7170aa0fb..a8ba23c4ef56 100644 --- a/translations/en.json +++ b/translations/en.json @@ -361,6 +361,7 @@ "check-before-syncing-doc-description": "To sync your devices successfully, make sure to check and complete these steps:", "check-on-block-explorer": "Check on block explorer", "check-on-opensea": "Check on opensea", + "check-other-device-for-pairing": "Check your other device for a pairing request.", "check-your-account-balance-and-activity": "Check your account balance and activity", "check-your-recovery-phrase": "Check your seed phrase", "choose-actions": "Choose actions", @@ -1577,6 +1578,7 @@ "mobile-syncing-sheet-title": "Sync using mobile data?", "mon": "Mon", "more": "more", + "more-details": "More details", "more-details-in-privacy-policy-1": "For more details refer to our ", "more-details-in-privacy-policy-2": "Privacy Policy", "move-and-reset": "Move and Reset", @@ -1643,6 +1645,9 @@ "new-community-title": "New community", "new-contact": "New contact", "new-contract": "New Contract", + "new-device-detected": "New device detected", + "new-device-detected-other-device-message": "Check your other device for a pairing request. Ensure that the this device ID displayed on your other device. Only proceed with pairing and syncing if the IDs are identical.", + "new-device-detected-recovered-device-message": "A new device has been detected. You can see device ID below and on your other device. Only confirm the request if device ID matches.", "new-favourite": "New favourite", "new-group": "New group", "new-group-chat": "New group chat", @@ -1808,14 +1813,17 @@ "page-camera-request-blocked": "camera requests blocked. To enable camera requests go to Settings", "page-would-like-to-use-camera": "would like to use your camera", "pair": "Pair", + "pair-and-sync": "Pair and Sync", "pair-card": "Pair to this device", "pair-code": "Pair code", "pair-code-explanation": "Pairs card to a different device (up to 5) to unlock keys and sign transactions with the same Keycard", "pair-code-placeholder": "Pair code...", "pair-device-toast": "Device successfully paired", "pair-devices": "Pair devices", + "pair-new-device-and-sync": "Pair new device and sync profile", "pair-this-card": "Pair this card", "pair-this-device": "Advertise device", + "pair-this-device-and-sync": "Pair this device and sync profile", "pair-this-device-description": "Pair your devices to sync contacts and chats between them", "paired-devices": "Paired devices", "paired-with-this-device": "Paired with this device", @@ -2080,6 +2088,7 @@ "reveal-qr-code": "Reveal QR code", "reveal-sync-code": "Reveal sync code", "review-bridge": "Review bridge", + "review-pairing-request": "Review pairing request", "review-send": "Review send", "review-swap": "Review swap", "revoke-access": "Revoke access", @@ -2384,6 +2393,7 @@ "sync-or-recover-profile": "Sync or recover profile", "sync-settings": "Sync settings", "sync-synced": "In sync", + "sync-your-profile": "Sync your profile", "synced-devices": "Synced Devices", "synced-with": "Synced with", "synchronise-your-data-across-your-devices": "Synchronise your data across your devices",