From 7b2a879cf0314aaf49dd457beaae4bb11e4790e7 Mon Sep 17 00:00:00 2001 From: Cristian Lungu Date: Tue, 9 Jan 2024 18:21:27 +0200 Subject: [PATCH 01/19] feat: added react-native-biometrics dependency --- nix/deps/gradle/proj.list | 1 + package.json | 1 + src/mocks/js_dependencies.cljs | 1 + src/react_native/biometrics.cljs | 42 ++++++++++++++++++++++++++++++++ yarn.lock | 5 ++++ 5 files changed, 50 insertions(+) create mode 100644 src/react_native/biometrics.cljs diff --git a/nix/deps/gradle/proj.list b/nix/deps/gradle/proj.list index ccb5c683ead..34926de7f7b 100644 --- a/nix/deps/gradle/proj.list +++ b/nix/deps/gradle/proj.list @@ -1,6 +1,7 @@ app react-native-async-storage_async-storage react-native-background-timer +react-native-biometrics react-native-blob-util react-native-blur react-native-camera-kit diff --git a/package.json b/package.json index 610535ac820..d4a1fb24184 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "react-dom": "18.0.0", "react-native": "0.72.5", "react-native-background-timer": "^2.1.1", + "react-native-biometrics": "^3.0.1", "react-native-blob-util": "^0.13.18", "react-native-camera-kit": "14.0.0-beta13", "react-native-config": "^1.5.0", diff --git a/src/mocks/js_dependencies.cljs b/src/mocks/js_dependencies.cljs index 56d7ae397b1..b5702938d63 100644 --- a/src/mocks/js_dependencies.cljs +++ b/src/mocks/js_dependencies.cljs @@ -165,6 +165,7 @@ :PlaybackCategories {}}) (def net-info #js {}) (def touchid #js {}) +(def react-native-biometrics #js {:default {}}) (def react-native-image-viewing #js {:default {}}) (def react-native-static-safe-area-insets #js {:default {}}) diff --git a/src/react_native/biometrics.cljs b/src/react_native/biometrics.cljs new file mode 100644 index 00000000000..4e5d7db02a0 --- /dev/null +++ b/src/react_native/biometrics.cljs @@ -0,0 +1,42 @@ +(ns react-native.biometrics + (:require + ["react-native-biometrics" :default rn-biometrics] + [oops.core :as oops])) + +(defonce biometrics (rn-biometrics.)) + +(defn get-supported-type + "Returns a JS promise that resolves with the biometrics types supported by the + device, regardless of whether it's enabled or disabled. + + Resolved values: `:Biometrics` `:FaceID` `:TouchID`" + [] + (-> (.isSensorAvailable biometrics) + (.then (fn [result] + (let [type (-> result + (oops/oget "biometryType") + keyword)] + type))))) + +(defn get-available + "Returns a JS promise that resolves to a boolean, which signifies whether + biometrics is enabled/disabled on the device." + [] + (-> (.isSensorAvailable biometrics) + (.then (fn [result] + (-> result + (oops/oget "available")))))) + +(defn authenticate + "Returns a JS promise that resolves with a boolean auth success state: `true` for + success and `false` when canceled by user." + [{:keys [prompt-message fallback-prompt-message cancel-button-text]}] + (-> (.simplePrompt biometrics + (clj->js {"promptMessage" prompt-message + "fallbackPromptMessage" fallback-prompt-message + "cancelButtonText" cancel-button-text})) + (.then (fn [result] + (let [result (js->clj result) + success (get result "success") + error (get result "error")] + (if error error success)))))) diff --git a/yarn.lock b/yarn.lock index 5de86771cba..304cfc78d11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8169,6 +8169,11 @@ react-native-background-timer@^2.1.1: resolved "https://registry.yarnpkg.com/react-native-background-timer/-/react-native-background-timer-2.2.0.tgz#ff82d30899209b924983cc00e6ce174b8de5054a" integrity sha512-Y7N6diSFko/FCJPMmB0PoBlmY1kEcma7qDVwn8t7zi12GLqpe/Vwls97onkSD8/QL+BR33BygUHOrLTPwgeKfg== +react-native-biometrics@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/react-native-biometrics/-/react-native-biometrics-3.0.1.tgz#23c5a0bdbae1fcb1e08b22936223fe0fc4af846e" + integrity sha512-Ru80gXRa9KG04sl5AB9HyjLjVbduhqZVjA+AiOSGqr+fNqCDmCu9y5WEksnjbnniNLmq1yGcw+qcLXmR1ddLDQ== + react-native-blob-util@^0.13.18: version "0.13.18" resolved "https://registry.yarnpkg.com/react-native-blob-util/-/react-native-blob-util-0.13.18.tgz#7b924d55607bda380d6e9862b621ed1ac0c007ec" From 08af411e477167040ccce1f9cf4e157c3dbf7ce1 Mon Sep 17 00:00:00 2001 From: Cristian Lungu Date: Tue, 9 Jan 2024 18:32:40 +0200 Subject: [PATCH 02/19] chore: added malli schema to auth --- src/react_native/biometrics.cljs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/react_native/biometrics.cljs b/src/react_native/biometrics.cljs index 4e5d7db02a0..8f1febbf451 100644 --- a/src/react_native/biometrics.cljs +++ b/src/react_native/biometrics.cljs @@ -1,7 +1,8 @@ (ns react-native.biometrics (:require ["react-native-biometrics" :default rn-biometrics] - [oops.core :as oops])) + [oops.core :as oops] + [schema.core :as schema])) (defonce biometrics (rn-biometrics.)) @@ -39,4 +40,14 @@ (let [result (js->clj result) success (get result "success") error (get result "error")] - (if error error success)))))) + (when error (throw error)) + success))))) + +(schema/=> authenticate + [:=> + [:cat + [:map {:closed true} + [:prompt-message {:optional true} string?] + [:fallback-prompt-message {:optional true} string?] + [:cancel-button-text {:optional true} string?]]] + :any]) From 5bedebbd1cf834089fe17b77944384b6f08803e7 Mon Sep 17 00:00:00 2001 From: Cristian Lungu Date: Wed, 10 Jan 2024 12:08:26 +0200 Subject: [PATCH 03/19] fix: malli schema --- src/react_native/biometrics.cljs | 2 +- src/status_im/common/biometric/events.cljs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/react_native/biometrics.cljs b/src/react_native/biometrics.cljs index 8f1febbf451..30f15d27f27 100644 --- a/src/react_native/biometrics.cljs +++ b/src/react_native/biometrics.cljs @@ -47,7 +47,7 @@ [:=> [:cat [:map {:closed true} - [:prompt-message {:optional true} string?] + [:prompt-message string?] [:fallback-prompt-message {:optional true} string?] [:cancel-button-text {:optional true} string?]]] :any]) diff --git a/src/status_im/common/biometric/events.cljs b/src/status_im/common/biometric/events.cljs index 79848bb0c70..1452972e269 100644 --- a/src/status_im/common/biometric/events.cljs +++ b/src/status_im/common/biometric/events.cljs @@ -3,6 +3,7 @@ [native-module.core :as native-module] [re-frame.core :as re-frame] [react-native.async-storage :as async-storage] + [react-native.biometrics :as biometrics] [react-native.platform :as platform] [react-native.touch-id :as touch-id] [status-im.common.keychain.events :as keychain] From 0bce19ab8e81d759304a86fc2e3d5063335b20de Mon Sep 17 00:00:00 2001 From: Cristian Lungu Date: Wed, 10 Jan 2024 17:29:24 +0200 Subject: [PATCH 04/19] feat: using react-native-biometrics --- src/react_native/biometrics.cljs | 30 +++++---- src/status_im/common/biometric/events.cljs | 73 +++++++++------------- src/status_im/constants.cljs | 13 ++-- 3 files changed, 54 insertions(+), 62 deletions(-) diff --git a/src/react_native/biometrics.cljs b/src/react_native/biometrics.cljs index 30f15d27f27..af6d9737204 100644 --- a/src/react_native/biometrics.cljs +++ b/src/react_native/biometrics.cljs @@ -1,10 +1,9 @@ (ns react-native.biometrics (:require - ["react-native-biometrics" :default rn-biometrics] + ["react-native-biometrics" :default biometrics] [oops.core :as oops] - [schema.core :as schema])) - -(defonce biometrics (rn-biometrics.)) + [schema.core :as schema] + [status-im.constants :as constants])) (defn get-supported-type "Returns a JS promise that resolves with the biometrics types supported by the @@ -12,7 +11,8 @@ Resolved values: `:Biometrics` `:FaceID` `:TouchID`" [] - (-> (.isSensorAvailable biometrics) + (-> (biometrics.) + (.isSensorAvailable) (.then (fn [result] (let [type (-> result (oops/oget "biometryType") @@ -23,24 +23,28 @@ "Returns a JS promise that resolves to a boolean, which signifies whether biometrics is enabled/disabled on the device." [] - (-> (.isSensorAvailable biometrics) + (-> (biometrics.) + (.isSensorAvailable) (.then (fn [result] - (-> result - (oops/oget "available")))))) + (oops/oget result "available"))))) (defn authenticate "Returns a JS promise that resolves with a boolean auth success state: `true` for success and `false` when canceled by user." [{:keys [prompt-message fallback-prompt-message cancel-button-text]}] - (-> (.simplePrompt biometrics - (clj->js {"promptMessage" prompt-message - "fallbackPromptMessage" fallback-prompt-message - "cancelButtonText" cancel-button-text})) + (-> (biometrics.) + (.simplePrompt #js {"promptMessage" prompt-message + "fallbackPromptMessage" fallback-prompt-message + "cancelButtonText" cancel-button-text}) (.then (fn [result] (let [result (js->clj result) success (get result "success") error (get result "error")] - (when error (throw error)) + ;; NOTE: currently `error` is only present for the user cancellation case, + ;; so putting this here for the future in case they add other errors + ;; instead of rejecting. + (when (and error (not= error constants/biometric-error-user-canceled)) + (throw error)) success))))) (schema/=> authenticate diff --git a/src/status_im/common/biometric/events.cljs b/src/status_im/common/biometric/events.cljs index 1452972e269..bfba37a70e3 100644 --- a/src/status_im/common/biometric/events.cljs +++ b/src/status_im/common/biometric/events.cljs @@ -5,7 +5,6 @@ [react-native.async-storage :as async-storage] [react-native.biometrics :as biometrics] [react-native.platform :as platform] - [react-native.touch-id :as touch-id] [status-im.common.keychain.events :as keychain] [status-im.constants :as constants] [taoensso.timbre :as log] @@ -13,27 +12,19 @@ [utils.re-frame :as rf])) (def android-device-blacklisted? - (= (:brand (native-module/get-device-model-info)) "bannedbrand")) - -(defn get-supported-type - [callback] - (cond platform/ios? (touch-id/get-supported-type callback) - platform/android? (if android-device-blacklisted? - (callback nil) - (touch-id/get-supported-type callback)) - :else (callback nil))) + (and platform/android? (= (:brand (native-module/get-device-model-info)) "bannedbrand"))) (defn get-label-by-type [biometric-type] (condp = biometric-type - :fingerprint (i18n/label :t/biometric-fingerprint) - :FaceID (i18n/label :t/biometric-faceid) + constants/biometrics-type-android (i18n/label :t/biometric-fingerprint) + constants/biometrics-type-face-id (i18n/label :t/biometric-faceid) (i18n/label :t/biometric-touchid))) (defn get-icon-by-type [biometric-type] (condp = biometric-type - :FaceID :i/face-id + constants/biometrics-type-face-id :i/face-id :i/touch-id)) (re-frame/reg-fx @@ -42,8 +33,10 @@ ;;NOTE: if we can't save user password, we can't use biometric (keychain/can-save-user-password? (fn [can-save?] - (when can-save? - (get-supported-type #(rf/dispatch [:biometric/get-supported-biometric-type-success %]))))))) + (when (and can-save? (not android-device-blacklisted?)) + (-> (biometrics/get-supported-type) + (.then (fn [type] + (rf/dispatch [:biometric/get-supported-biometric-type-success type]))))))))) (rf/defn get-supported-biometric-auth-success {:events [:biometric/get-supported-biometric-type-success]} @@ -53,19 +46,14 @@ (rf/defn show-message {:events [:biometric/show-message]} [_ code] - (let [handle-error? (and code - (not (contains? #{constants/biometric-error-user-canceled - constants/biometric-error-user-fallback} - code))) - content (if (#{constants/biometric-error-not-available - constants/biometric-error-not-enrolled} - code) - (i18n/label :t/grant-face-id-permissions) - (i18n/label :t/biometric-auth-error {:code code}))] - (when handle-error? - {:effects.utils/show-popup - {:title (i18n/label :t/biometric-auth-login-error-title) - :content content}}))) + (let [content (if (#{constants/biometric-error-not-available + constants/biometric-error-not-enrolled} + code) + (i18n/label :t/grant-face-id-permissions) + (i18n/label :t/biometric-auth-error {:code code}))] + {:effects.utils/show-popup + {:title (i18n/label :t/biometric-auth-login-error-title) + :content content}})) (defn- supress-biometry-error-key [key-uid] @@ -111,23 +99,18 @@ (re-frame/reg-fx :biometric/authenticate - (fn [options] - (touch-id/authenticate - (merge - {:reason (i18n/label :t/biometric-auth-reason-login) - :options (merge - {:unifiedErrors true} - (when platform/ios? - {:passcodeFallback false - :fallbackLabel (i18n/label :t/biometric-auth-login-ios-fallback-label)}) - (when platform/android? - {:title (i18n/label :t/biometric-auth-android-title) - :imageColor :blue - :imageErrorColor :red - :sensorDescription (i18n/label :t/biometric-auth-android-sensor-desc) - :sensorErrorDescription (i18n/label :t/biometric-auth-android-sensor-error-desc) - :cancelText (i18n/label :t/cancel)}))} - options)))) + (fn [{:keys [on-success on-fail prompt-message]}] + (-> (biometrics/authenticate + {:prompt-message (or prompt-message (i18n/label :t/biometric-auth-reason-login)) + :fallback-prompt-message (i18n/label + :t/biometric-auth-login-ios-fallback-label) + :cancel-button-text (i18n/label :t/cancel)}) + ;; NOTE: resolves to `false` when cancelled by user + (.then #(when % on-success)) + (.catch (fn [err] + (-> err + (.-message) + (on-fail))))))) (rf/defn authenticate {:events [:biometric/authenticate]} diff --git a/src/status_im/constants.cljs b/src/status_im/constants.cljs index 8bbe8968543..913886aa4f6 100644 --- a/src/status_im/constants.cljs +++ b/src/status_im/constants.cljs @@ -378,10 +378,15 @@ (def ^:const auth-method-biometric-prepare "biometric-prepare") (def ^:const auth-method-none "none") -(def ^:const biometric-error-user-canceled "USER_CANCELED") -(def ^:const biometric-error-user-fallback "USER_USER_FALLBACK") -(def ^:const biometric-error-not-available "NOT_AVAILABLE") -(def ^:const biometric-error-not-enrolled "NOT_ENROLLED") +;; NOTE all android biometrics falls under :Biometrics +(def ^:const biometrics-type-android :Biometrics) +(def ^:const biometrics-type-touch-id :TouchID) +(def ^:const biometrics-type-face-id :FaceID) + +;; NOTE react-native-biometrics error codes are bleh +(def ^:const biometric-error-user-canceled "User cancellation") +(def ^:const biometric-error-not-available "Biometric hardware unavailable") +(def ^:const biometric-error-not-enrolled "No fingerprints enrolled.") (def ^:const onboarding-generating-keys-animation-duration-ms 7000) (def ^:const onboarding-generating-keys-navigation-retry-ms 3000) From aa5e0ad2c343e5df6a9025f6a14a5a170c0683ed Mon Sep 17 00:00:00 2001 From: Cristian Lungu Date: Wed, 10 Jan 2024 20:01:38 +0200 Subject: [PATCH 05/19] fix: removed biometry not-enrolled error supression --- src/status_im/common/biometric/events.cljs | 41 ------------------- .../contexts/profile/login/events.cljs | 17 +++----- 2 files changed, 5 insertions(+), 53 deletions(-) diff --git a/src/status_im/common/biometric/events.cljs b/src/status_im/common/biometric/events.cljs index bfba37a70e3..2bf0e28bbf6 100644 --- a/src/status_im/common/biometric/events.cljs +++ b/src/status_im/common/biometric/events.cljs @@ -55,47 +55,6 @@ {:title (i18n/label :t/biometric-auth-login-error-title) :content content}})) -(defn- supress-biometry-error-key - [key-uid] - (keyword (str "biometric/supress-not-enrolled-error-" key-uid))) - -;; NOTE: if the account had biometrics registered, but it's not enrolled at the moment, -;; we should show the error message only once and supress further "NOT_ENROLLED" errors -;; until biometry is enrolled again. Note that we can only know that when :biometric/authenticate -;; is dispatched and fails with "NOT_ENROLLED", since :biometric/get-supported-biometric-type -;; only tells us what kind of biometric is available on the device, but it doesn't know of its -;; enrollment status. -(re-frame/reg-fx - :biometric/supress-not-enrolled-error - (fn [[key-uid dispatch-event]] - (let [storage-key (supress-biometry-error-key key-uid)] - (-> (async-storage/get-item storage-key identity) - (.then (fn [item] - (when (not item) - (rf/dispatch dispatch-event) - (async-storage/set-item! storage-key true)))) - (.catch (fn [err] - (log/error "Couldn't supress biometry NOT_ENROLLED error" - {:key-uid key-uid - :event :biometric/supress-not-enrolled-error - :error err}))))))) - -;; NOTE: when biometrics is re-enrolled, we erase the flag in async-storage to assure -;; the "NOT_ENROLLED" error message will be shown again if biometrics is un-enrolled -;; in the future. -(re-frame/reg-fx - :biometric/reset-not-enrolled-error - (fn [key-uid] - (let [storage-key (supress-biometry-error-key key-uid)] - (-> (async-storage/get-item storage-key identity) - (.then (fn [supress?] - (when supress? - (async-storage/set-item! storage-key nil)))) - (.catch (fn [err] - (log/error "Couldn't reset supressing biometry NOT_ENROLLED error" - {:key-uid key-uid - :event :biometric/reset-not-enrolled-error - :error err}))))))) (re-frame/reg-fx :biometric/authenticate diff --git a/src/status_im/contexts/profile/login/events.cljs b/src/status_im/contexts/profile/login/events.cljs index b04c068ff4f..0a64b67d0b2 100644 --- a/src/status_im/contexts/profile/login/events.cljs +++ b/src/status_im/contexts/profile/login/events.cljs @@ -209,21 +209,14 @@ :profile.login/biometric-success (fn [{:keys [db]}] (let [key-uid (get-in db [:profile/login :key-uid])] - {:db db - :fx [[:biometric/reset-not-enrolled-error key-uid] - [:keychain/get-user-password - [key-uid #(rf/dispatch [:profile.login/get-user-password-success %])]]]}))) + {:db db + :dispatch [:keychain/get-user-password + [key-uid #(rf/dispatch [:profile.login/get-user-password-success %])]]}))) (rf/reg-event-fx :profile.login/biometric-auth-fail - (fn [{:keys [db]} [code]] - (let [key-uid (get-in db [:profile/login :key-uid])] - {:db db - :fx [(if (= code constants/biometric-error-not-enrolled) - [:biometric/supress-not-enrolled-error - [key-uid - [:biometric/show-message code]]] - [:dispatch [:biometric/show-message code]])]}))) + (fn [_ [code]] + {:dispatch [:biometric/show-message code]})) (rf/defn verify-database-password From 561c421b180323352e9f78a2f3fd2dfb73738456 Mon Sep 17 00:00:00 2001 From: Cristian Lungu Date: Tue, 16 Jan 2024 13:01:36 +0200 Subject: [PATCH 06/19] feat: added check for enabled biometric --- src/react_native/biometrics.cljs | 17 ++++--- src/react_native/keychain.cljs | 8 ++-- src/status_im/common/biometric/events.cljs | 33 +++++++++++--- src/status_im/common/keychain/events.cljs | 21 ++++----- .../standard_auth/authorize.cljs | 44 ++++++++++--------- src/status_im/constants.cljs | 1 - .../contexts/profile/login/events.cljs | 10 ++--- 7 files changed, 78 insertions(+), 56 deletions(-) diff --git a/src/react_native/biometrics.cljs b/src/react_native/biometrics.cljs index af6d9737204..5f3a802ea81 100644 --- a/src/react_native/biometrics.cljs +++ b/src/react_native/biometrics.cljs @@ -2,8 +2,7 @@ (:require ["react-native-biometrics" :default biometrics] [oops.core :as oops] - [schema.core :as schema] - [status-im.constants :as constants])) + [schema.core :as schema])) (defn get-supported-type "Returns a JS promise that resolves with the biometrics types supported by the @@ -17,7 +16,8 @@ (let [type (-> result (oops/oget "biometryType") keyword)] - type))))) + type))) + (.catch (constantly nil)))) (defn get-available "Returns a JS promise that resolves to a boolean, which signifies whether @@ -28,14 +28,17 @@ (.then (fn [result] (oops/oget result "available"))))) +(def ^:private ^:const biometric-error-user-canceled "User cancellation") + (defn authenticate "Returns a JS promise that resolves with a boolean auth success state: `true` for success and `false` when canceled by user." [{:keys [prompt-message fallback-prompt-message cancel-button-text]}] (-> (biometrics.) - (.simplePrompt #js {"promptMessage" prompt-message - "fallbackPromptMessage" fallback-prompt-message - "cancelButtonText" cancel-button-text}) + (.simplePrompt #js + {"promptMessage" prompt-message + "fallbackPromptMessage" fallback-prompt-message + "cancelButtonText" cancel-button-text}) (.then (fn [result] (let [result (js->clj result) success (get result "success") @@ -43,7 +46,7 @@ ;; NOTE: currently `error` is only present for the user cancellation case, ;; so putting this here for the future in case they add other errors ;; instead of rejecting. - (when (and error (not= error constants/biometric-error-user-canceled)) + (when (and error (not= error biometric-error-user-canceled)) (throw error)) success))))) diff --git a/src/react_native/keychain.cljs b/src/react_native/keychain.cljs index 15ea0bc8b5d..0a3c7e1e401 100644 --- a/src/react_native/keychain.cljs +++ b/src/react_native/keychain.cljs @@ -72,9 +72,11 @@ (defn get-credentials "Gets the credentials for a specified server from the Keychain" - [server callback] - (-> (.getInternetCredentials ^js react-native-keychain (string/lower-case server)) - (.then callback))) + ([server] + (get-credentials server identity)) + ([server callback] + (-> (.getInternetCredentials ^js react-native-keychain (string/lower-case server)) + (.then callback)))) (defn reset-credentials [server] diff --git a/src/status_im/common/biometric/events.cljs b/src/status_im/common/biometric/events.cljs index 2bf0e28bbf6..a31e24a9a08 100644 --- a/src/status_im/common/biometric/events.cljs +++ b/src/status_im/common/biometric/events.cljs @@ -2,7 +2,6 @@ (:require [native-module.core :as native-module] [re-frame.core :as re-frame] - [react-native.async-storage :as async-storage] [react-native.biometrics :as biometrics] [react-native.platform :as platform] [status-im.common.keychain.events :as keychain] @@ -64,12 +63,14 @@ :fallback-prompt-message (i18n/label :t/biometric-auth-login-ios-fallback-label) :cancel-button-text (i18n/label :t/cancel)}) - ;; NOTE: resolves to `false` when cancelled by user - (.then #(when % on-success)) + (.then (fn [not-canceled?] + (when (and on-success not-canceled?) + (on-success)))) (.catch (fn [err] - (-> err - (.-message) - (on-fail))))))) + (when on-fail + (-> err + (.-message) + (on-fail)))))))) (rf/defn authenticate {:events [:biometric/authenticate]} @@ -98,3 +99,23 @@ (let [key-uid (get-in db [:profile/profile :key-uid])] {:db (assoc db :auth-method constants/auth-method-none) :keychain/clear-user-password key-uid}))) + +(rf/reg-fx + :biometric/check-if-available + (fn [[key-uid callback]] + (keychain/can-save-user-password? + (fn [can-save?] + (when can-save? + (-> (biometrics/get-available) + (.then (fn [available?] + (when-not available? + (throw (js/Error. "biometric-not-available"))))) + (.then #(keychain/get-auth-method! key-uid)) + (.then (fn [auth-method] + (when auth-method (callback auth-method)))) + (.catch (fn [err] + (when-not (= (.-message err) "biometric-not-available") + (log/error "Failed to check if biometrics is available" + {:error err + :key-uid key-uid + :event :profile.login/check-biometric})))))))))) diff --git a/src/status_im/common/keychain/events.cljs b/src/status_im/common/keychain/events.cljs index bd479aa5f7d..40ae3445646 100644 --- a/src/status_im/common/keychain/events.cljs +++ b/src/status_im/common/keychain/events.cljs @@ -70,17 +70,13 @@ {:db (assoc db :auth-method method) :keychain/save-auth-method [key-uid method]}) -(re-frame/reg-fx - :keychain/get-auth-method - (fn [[key-uid callback]] - (can-save-user-password? - (fn [can-save?] - (if can-save? - (keychain/get-credentials - (str key-uid "-auth") - (fn [value] - (callback (if value (oops/oget value "password") auth-method-none)))) - (callback nil)))))) +(defn get-auth-method! + [key-uid] + (-> (str key-uid "-auth") + (keychain/get-credentials) + (.then (fn [value] + (if value (oops/oget value "password") auth-method-none))) + (.catch (constantly auth-method-none)))) (defn save-user-password! [key-uid password] @@ -101,7 +97,8 @@ (get-user-password! key-uid callback))) (rf/defn get-user-password - [_ key-uid callback] + {:events [:keychain/get-user-password]} + [_ [key-uid callback]] {:keychain/get-user-password [key-uid callback]}) (defn- password-migration-key-name diff --git a/src/status_im/common/standard_authentication/standard_auth/authorize.cljs b/src/status_im/common/standard_authentication/standard_auth/authorize.cljs index 1784b34bbfc..9370a00ffc0 100644 --- a/src/status_im/common/standard_authentication/standard_auth/authorize.cljs +++ b/src/status_im/common/standard_authentication/standard_auth/authorize.cljs @@ -1,6 +1,6 @@ (ns status-im.common.standard-authentication.standard-auth.authorize (:require - [react-native.touch-id :as biometric] + [react-native.biometrics :as biometrics] [status-im.common.standard-authentication.enter-password.view :as enter-password] [taoensso.timbre :as log] [utils.i18n :as i18n] @@ -39,25 +39,27 @@ ; to retrigger biometric auth, so they can endlessly repeat this cycle. biometrics-login (fn [on-press-biometrics] (rf/dispatch [:dismiss-keyboard]) - (biometric/authenticate - {:reason (i18n/label :t/biometric-auth-confirm-message) - :on-success (fn [_response] - (on-close) - (rf/dispatch [:standard-auth/on-biometric-success - (handle-auth-success true)])) - :on-fail (fn [error] - (on-close) - (log/error "Authentication Failed. Error:" error) - (when on-auth-fail (on-auth-fail error)) - (password-login {:on-press-biometrics - #(on-press-biometrics - on-press-biometrics)}))}))] + (biometrics/authenticate + {:prompt-message (i18n/label :t/biometric-auth-confirm-message) + :on-success (fn [not-canceled?] + (on-close) + (when not-canceled? + (rf/dispatch [:standard-auth/on-biometric-success + (handle-auth-success true)]))) + :on-fail (fn [error] + (on-close) + (log/error "Authentication Failed. Error:" error) + (when on-auth-fail (on-auth-fail error)) + (password-login {:on-press-biometrics + #(on-press-biometrics + on-press-biometrics)}))}))] (if biometric-auth? - (biometric/get-supported-type - (fn [biometric-type] - (if biometric-type - (biometrics-login biometrics-login) - (do - (reset-password) - (password-login {}))))) + (-> (biometrics/get-supported-type) + (.then (fn [biometric-type] + (if biometric-type + (biometrics-login biometrics-login) + (do + (reset-password) + (password-login {}))))) + (.catch #(password-login {}))) (password-login {})))) diff --git a/src/status_im/constants.cljs b/src/status_im/constants.cljs index 913886aa4f6..eb0c1005ca6 100644 --- a/src/status_im/constants.cljs +++ b/src/status_im/constants.cljs @@ -384,7 +384,6 @@ (def ^:const biometrics-type-face-id :FaceID) ;; NOTE react-native-biometrics error codes are bleh -(def ^:const biometric-error-user-canceled "User cancellation") (def ^:const biometric-error-not-available "Biometric hardware unavailable") (def ^:const biometric-error-not-enrolled "No fingerprints enrolled.") diff --git a/src/status_im/contexts/profile/login/events.cljs b/src/status_im/contexts/profile/login/events.cljs index 0a64b67d0b2..cb51395add6 100644 --- a/src/status_im/contexts/profile/login/events.cljs +++ b/src/status_im/contexts/profile/login/events.cljs @@ -16,7 +16,6 @@ [status-im.common.log :as logging] [status-im.common.universal-links :as universal-links] [status-im.config :as config] - [status-im.constants :as constants] [status-im.contexts.chat.contacts.events :as contacts] [status-im.contexts.chat.messenger.messages.link-preview.events :as link-preview] [status-im.contexts.profile.config :as profile.config] @@ -178,11 +177,11 @@ (rf/defn login-with-biometric-if-available {:events [:profile.login/login-with-biometric-if-available]} [_ key-uid] - {:keychain/get-auth-method [key-uid - #(rf/dispatch [:profile.login/get-auth-method-success % key-uid])]}) + {:biometric/check-if-available [key-uid + #(rf/dispatch [:profile.login/check-biometric-success % key-uid])]}) -(rf/defn get-auth-method-success - {:events [:profile.login/get-auth-method-success]} +(rf/defn check-biometric-success + {:events [:profile.login/check-biometric-success]} [{:keys [db]} auth-method key-uid] (merge {:db (assoc db :auth-method auth-method)} (when (= auth-method keychain/auth-method-biometric) @@ -194,7 +193,6 @@ :on-fail #(rf/dispatch [:profile.login/biometric-auth-fail %])}]))}}))) -;; result of :keychain/get-auth-method above (rf/defn get-user-password-success {:events [:profile.login/get-user-password-success]} [{:keys [db] :as cofx} password] From 5536e89bcbd50fb119b9fa38e119c2bf1174897b Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Tue, 16 Jan 2024 14:20:41 +0200 Subject: [PATCH 07/19] fix: biometrics error handling on ios --- ios/Podfile.lock | 8 ++++- src/react_native/biometrics.cljs | 36 ++++++++++++++++------ src/status_im/common/biometric/events.cljs | 4 +-- src/status_im/constants.cljs | 4 --- 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 5383bf42766..3e850c33b8a 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -305,6 +305,8 @@ PODS: - glog - react-native-background-timer (2.2.0): - React + - react-native-biometrics (3.0.1): + - React-Core - react-native-blob-util (0.13.18): - React-Core - react-native-blur (4.3.3): @@ -548,6 +550,7 @@ DEPENDENCIES: - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - react-native-background-timer (from `../node_modules/react-native-background-timer`) + - react-native-biometrics (from `../node_modules/react-native-biometrics`) - react-native-blob-util (from `../node_modules/react-native-blob-util`) - "react-native-blur (from `../node_modules/@react-native-community/blur`)" - "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)" @@ -669,6 +672,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/logger" react-native-background-timer: :path: "../node_modules/react-native-background-timer" + react-native-biometrics: + :path: "../node_modules/react-native-biometrics" react-native-blob-util: :path: "../node_modules/react-native-blob-util" react-native-blur: @@ -793,7 +798,7 @@ CHECKOUT OPTIONS: :submodules: true SPEC CHECKSUMS: - boost: 64032b9e9b938fda23325e68a3771f0fabf414dc + boost: 57d2868c099736d80fcd648bf211b4431e51a558 BVLinearGradient: 612a04ff38e8480291f3379ee5b5a2c571f03fe0 CryptoSwift: c4f2debceb38bf44c80659afe009f71e23e4a082 DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 @@ -822,6 +827,7 @@ SPEC CHECKSUMS: React-jsinspector: aef73cbd43b70675f572214d10fa438c89bf11ba React-logger: 2e4aee3e11b3ec4fa6cfd8004610bbb3b8d6cca4 react-native-background-timer: 1f7d560647b40e6a60b01c452ba29c54bf581fc4 + react-native-biometrics: 352e5a794bfffc46a0c86725ea7dc62deb085bdc react-native-blob-util: 600972b1782380a5a7d5db61a3817ea32349dae9 react-native-blur: c6d0a1dc2b4b519f7afe3b14d8151998632b6d18 react-native-cameraroll: 4701ae7c3dbcd3f5e9e150ca17f250a276154b35 diff --git a/src/react_native/biometrics.cljs b/src/react_native/biometrics.cljs index 5f3a802ea81..e7ebe43cadc 100644 --- a/src/react_native/biometrics.cljs +++ b/src/react_native/biometrics.cljs @@ -1,9 +1,14 @@ (ns react-native.biometrics (:require ["react-native-biometrics" :default biometrics] + [clojure.string :as string] [oops.core :as oops] + [react-native.platform :as platform] [schema.core :as schema])) +(def ^:const biometric-error-not-available "biometric-not-available") +(def ^:const biometric-error-not-enrolled "biometric-not-enrolled") + (defn get-supported-type "Returns a JS promise that resolves with the biometrics types supported by the device, regardless of whether it's enabled or disabled. @@ -28,7 +33,21 @@ (.then (fn [result] (oops/oget result "available"))))) -(def ^:private ^:const biometric-error-user-canceled "User cancellation") +;; NOTE: the react-native-biometry package error codes/messages differ across platforms. +;; On android we get error messages while on iOS it's a stringified Obj-C error object. +(defn- convert-auth-error-message + [code] + (letfn [(includes? [substring string] + (string/includes? string substring))] + (if platform/android? + (condp = code + "No fingerprints enrolled." biometric-error-not-enrolled + "Biometric hardware unavailable" biometric-error-not-available + code) + + (condp includes? code + "No identities are enrolled" biometric-error-not-enrolled + code)))) (defn authenticate "Returns a JS promise that resolves with a boolean auth success state: `true` for @@ -40,15 +59,12 @@ "fallbackPromptMessage" fallback-prompt-message "cancelButtonText" cancel-button-text}) (.then (fn [result] - (let [result (js->clj result) - success (get result "success") - error (get result "error")] - ;; NOTE: currently `error` is only present for the user cancellation case, - ;; so putting this here for the future in case they add other errors - ;; instead of rejecting. - (when (and error (not= error biometric-error-user-canceled)) - (throw error)) - success))))) + (-> result js->clj (get "success")))) + (.catch (fn [error] + (-> (.-message error) + convert-auth-error-message + js/Error + throw))))) (schema/=> authenticate [:=> diff --git a/src/status_im/common/biometric/events.cljs b/src/status_im/common/biometric/events.cljs index a31e24a9a08..3c7dcbc2b6e 100644 --- a/src/status_im/common/biometric/events.cljs +++ b/src/status_im/common/biometric/events.cljs @@ -45,8 +45,8 @@ (rf/defn show-message {:events [:biometric/show-message]} [_ code] - (let [content (if (#{constants/biometric-error-not-available - constants/biometric-error-not-enrolled} + (let [content (if (#{biometrics/biometric-error-not-available + biometrics/biometric-error-not-enrolled} code) (i18n/label :t/grant-face-id-permissions) (i18n/label :t/biometric-auth-error {:code code}))] diff --git a/src/status_im/constants.cljs b/src/status_im/constants.cljs index eb0c1005ca6..fd24ef35f09 100644 --- a/src/status_im/constants.cljs +++ b/src/status_im/constants.cljs @@ -383,10 +383,6 @@ (def ^:const biometrics-type-touch-id :TouchID) (def ^:const biometrics-type-face-id :FaceID) -;; NOTE react-native-biometrics error codes are bleh -(def ^:const biometric-error-not-available "Biometric hardware unavailable") -(def ^:const biometric-error-not-enrolled "No fingerprints enrolled.") - (def ^:const onboarding-generating-keys-animation-duration-ms 7000) (def ^:const onboarding-generating-keys-navigation-retry-ms 3000) From 92463e1f382dbf02ea1cdb2e27692bb3ceff2b7f Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Tue, 16 Jan 2024 14:43:15 +0200 Subject: [PATCH 08/19] chore: remove touch-id library --- doc/dependencies.md | 4 ++-- ios/Podfile.lock | 6 ------ nix/deps/gradle/proj.list | 1 - package.json | 1 - src/react_native/touch_id.cljs | 20 -------------------- yarn.lock | 5 ----- 6 files changed, 2 insertions(+), 35 deletions(-) delete mode 100644 src/react_native/touch_id.cljs diff --git a/doc/dependencies.md b/doc/dependencies.md index 47f139d92f5..9a0656392b3 100644 --- a/doc/dependencies.md +++ b/doc/dependencies.md @@ -144,9 +144,9 @@ used for keycard used for svg icons, mostly collectibles are using svg TODO: updating requires a pod update on iOS -## "react-native-touch-id": "^4.4.1" +## "react-native-biometrics": "^3.0.1" -used for touch-id identification +used for biometric authentication on Android and iOS ## "react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v8.0.7_3" diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3e850c33b8a..486b75e8554 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -519,8 +519,6 @@ PODS: - SocketRocket (0.6.1) - SSZipArchive (2.4.3) - TOCropViewController (2.6.1) - - TouchID (4.4.1): - - React - Yoga (1.14.0) DEPENDENCIES: @@ -606,7 +604,6 @@ DEPENDENCIES: - RNSVG (from `../node_modules/react-native-svg`) - secp256k1 (from `https://github.com/status-im/secp256k1.swift.git`) - SSZipArchive (= 2.4.3) - - TouchID (from `../node_modules/react-native-touch-id`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: @@ -783,8 +780,6 @@ EXTERNAL SOURCES: secp256k1: :git: https://github.com/status-im/secp256k1.swift.git :submodules: true - TouchID: - :path: "../node_modules/react-native-touch-id" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" @@ -887,7 +882,6 @@ SPEC CHECKSUMS: SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 - TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4 Yoga: 86fed2e4d425ee4c6eab3813ba1791101ee153c6 PODFILE CHECKSUM: 3f98ce893757dfa17e609ef7cd24fa41635b73a6 diff --git a/nix/deps/gradle/proj.list b/nix/deps/gradle/proj.list index 34926de7f7b..a4a422c090b 100644 --- a/nix/deps/gradle/proj.list +++ b/nix/deps/gradle/proj.list @@ -37,6 +37,5 @@ react-native-static-safe-area-insets react-native-status react-native-status-keycard react-native-svg -react-native-touch-id react-native-transparent-video react-native-webview diff --git a/package.json b/package.json index d4a1fb24184..67f8d2e31b2 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "react-native-static-safe-area-insets": "^2.2.0", "react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#refs/tags/v2.5.39", "react-native-svg": "13.10.0", - "react-native-touch-id": "^4.4.1", "react-native-transparent-video": "git+https://github.com/status-im/react-native-transparent-video.git#refs/tags/0.1.1", "react-native-webview": "13.6.3", "react-syntax-highlighter": "^15.5.0", diff --git a/src/react_native/touch_id.cljs b/src/react_native/touch_id.cljs deleted file mode 100644 index 2c225e597f2..00000000000 --- a/src/react_native/touch_id.cljs +++ /dev/null @@ -1,20 +0,0 @@ -(ns react-native.touch-id - (:require - ["react-native-touch-id" :default touchid])) - -;; currently, for android, react-native-touch-id -;; is not returning supported biometric type -;; defaulting to :fingerprint -(def android-default-support :fingerprint) - -(defn get-supported-type - [callback] - (-> (.isSupported ^js touchid) - (.then #(callback (or (keyword %) android-default-support))) - (.catch #(callback nil)))) - -(defn authenticate - [{:keys [on-success on-fail reason options]}] - (-> (.authenticate ^js touchid reason (clj->js options)) - (.then #(when on-success (on-success %))) - (.catch #(when on-fail (on-fail (aget % "code")))))) diff --git a/yarn.lock b/yarn.lock index 304cfc78d11..9205514e62f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8387,11 +8387,6 @@ react-native-svg@13.10.0: css-select "^5.1.0" css-tree "^1.1.3" -react-native-touch-id@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/react-native-touch-id/-/react-native-touch-id-4.4.1.tgz#8b1bb2d04c30bac36bb9696d2d723e719c4a8b08" - integrity sha512-1jTl8fC+0fxvqegy/XXTyo6vMvPhjzkoDdaqoYZx0OH8AT250NuXnNPyKktvigIcys3+2acciqOeaCall7lrvg== - "react-native-transparent-video@git+https://github.com/status-im/react-native-transparent-video.git#refs/tags/0.1.1": version "0.1.0" resolved "git+https://github.com/status-im/react-native-transparent-video.git#1327fc622f7521269f66299c3aca610494c76fe1" From cd42a565e809792f4759a2bf1212c597ab4a0223 Mon Sep 17 00:00:00 2001 From: Cristian Lungu Date: Tue, 16 Jan 2024 17:36:59 +0200 Subject: [PATCH 09/19] chore: cleanup --- src/mocks/js_dependencies.cljs | 1 - src/status_im/common/keychain/events.cljs | 1 - src/status_im/contexts/profile/login/events.cljs | 5 ++--- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/mocks/js_dependencies.cljs b/src/mocks/js_dependencies.cljs index b5702938d63..d7321d50d9a 100644 --- a/src/mocks/js_dependencies.cljs +++ b/src/mocks/js_dependencies.cljs @@ -164,7 +164,6 @@ {:MediaStates {} :PlaybackCategories {}}) (def net-info #js {}) -(def touchid #js {}) (def react-native-biometrics #js {:default {}}) (def react-native-image-viewing #js {:default {}}) (def react-native-static-safe-area-insets #js {:default {}}) diff --git a/src/status_im/common/keychain/events.cljs b/src/status_im/common/keychain/events.cljs index 40ae3445646..1e12b52fc31 100644 --- a/src/status_im/common/keychain/events.cljs +++ b/src/status_im/common/keychain/events.cljs @@ -97,7 +97,6 @@ (get-user-password! key-uid callback))) (rf/defn get-user-password - {:events [:keychain/get-user-password]} [_ [key-uid callback]] {:keychain/get-user-password [key-uid callback]}) diff --git a/src/status_im/contexts/profile/login/events.cljs b/src/status_im/contexts/profile/login/events.cljs index cb51395add6..c1dd2bbd34b 100644 --- a/src/status_im/contexts/profile/login/events.cljs +++ b/src/status_im/contexts/profile/login/events.cljs @@ -207,9 +207,8 @@ :profile.login/biometric-success (fn [{:keys [db]}] (let [key-uid (get-in db [:profile/login :key-uid])] - {:db db - :dispatch [:keychain/get-user-password - [key-uid #(rf/dispatch [:profile.login/get-user-password-success %])]]}))) + {:keychain/get-user-password [key-uid + #(rf/dispatch [:profile.login/get-user-password-success %])]}))) (rf/reg-event-fx :profile.login/biometric-auth-fail From b6b0bed97c5f070c0aeb94af84209950c4dc27ad Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Wed, 17 Jan 2024 11:57:28 +0200 Subject: [PATCH 10/19] removed proj.list dep --- nix/deps/gradle/proj.list | 1 - 1 file changed, 1 deletion(-) diff --git a/nix/deps/gradle/proj.list b/nix/deps/gradle/proj.list index a4a422c090b..e4d83e468c0 100644 --- a/nix/deps/gradle/proj.list +++ b/nix/deps/gradle/proj.list @@ -1,7 +1,6 @@ app react-native-async-storage_async-storage react-native-background-timer -react-native-biometrics react-native-blob-util react-native-blur react-native-camera-kit From 22178aa22adf7abb4e76ebc860aa23f5bf6a09db Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Wed, 17 Jan 2024 12:47:48 +0200 Subject: [PATCH 11/19] fix: gradle get_projects regex edge-case Handles cases when the gradle project has a description, which shows up when running `gradle projects` as (`react-native-biometrics` - react-native-biometrics), breaking `make nix-update-gradle`. Here we're just adjusting the regex to ignore everything in the line after the closing (`). --- nix/deps/gradle/get_projects.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/deps/gradle/get_projects.sh b/nix/deps/gradle/get_projects.sh index 1d70efddf5c..8a97870a23e 100755 --- a/nix/deps/gradle/get_projects.sh +++ b/nix/deps/gradle/get_projects.sh @@ -19,4 +19,4 @@ trap show_gradle_log ERR ./gradlew projects --no-daemon --console plain 2>&1 \ | tee "${GRADLE_LOG_FILE}" \ | grep "Project ':" \ - | sed -E "s;^.--- Project '\:([@_a-zA-Z0-9\-]+)';\1;" + | sed -E "s;^.--- Project '\:([@_a-zA-Z0-9\-]+)'.*;\1;" From 79f5b1a6bf0aabc684ef06b1115398ada3f2c052 Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Wed, 17 Jan 2024 12:58:08 +0200 Subject: [PATCH 12/19] build: ran "make nix-update-gradle" --- nix/deps/gradle/deps.json | 556 ++------------------------------------ nix/deps/gradle/deps.list | 33 --- nix/deps/gradle/deps.urls | 42 +-- nix/deps/gradle/proj.list | 1 + 4 files changed, 30 insertions(+), 602 deletions(-) diff --git a/nix/deps/gradle/deps.json b/nix/deps/gradle/deps.json index ebfaab77872..0eb31c8111e 100644 --- a/nix/deps/gradle/deps.json +++ b/nix/deps/gradle/deps.json @@ -1055,21 +1055,6 @@ } }, - { - "path": "androidx/databinding/databinding-common/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "databinding-common-3.3.1.pom": { - "sha1": "2e932d3219ea5f6d1078b24a8a3ce24b209c9309", - "sha256": "sha256-J5Qv7Gy8ROM19MN5Rx/lo2BsA7Zwt+NG6lXxYtjrF10=" - }, - "databinding-common-3.3.1.jar": { - "sha1": "45795e2f688474b219d37beb7f9f6756578e6454", - "sha256": "sha256-mq9hUr+3QZCgovJ1St/aoqkP7Ef50KwR811ej5iYkyw=" - } - } - }, - { "path": "androidx/databinding/databinding-common/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -1179,21 +1164,6 @@ } }, - { - "path": "androidx/databinding/databinding-compiler-common/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "databinding-compiler-common-3.3.1.pom": { - "sha1": "123c2b1dd44ec6e2441be9441bdf393462936928", - "sha256": "sha256-na2hPeqxkcTcC9T7EvFs12+r1ygfSfnOHIirb3kXyzI=" - }, - "databinding-compiler-common-3.3.1.jar": { - "sha1": "e96aa159e1ed5c5a3461d15adfc42ef5b1f68b59", - "sha256": "sha256-sfLOroi0d73GMp2r8SCNhCHFrT/HzPpEOXEOVBcvxh0=" - } - } - }, - { "path": "androidx/databinding/databinding-compiler-common/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -2755,21 +2725,6 @@ } }, - { - "path": "com/android/databinding/baseLibrary/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "baseLibrary-3.3.1.pom": { - "sha1": "611fd96b47fdd27dd88afc23829975278d47774c", - "sha256": "sha256-dKLQobB7s6ExmWyEIG/CHmDQaT4pa7EI07c9B7hnUj8=" - }, - "baseLibrary-3.3.1.jar": { - "sha1": "702acc804e85563d3ae7b8ee49122e4f857dde83", - "sha256": "sha256-5QRyEqpp1J0FULCvlrQQC4xslwG4PD+24ZzGbzxK6cQ=" - } - } - }, - { "path": "com/android/databinding/baseLibrary/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -3288,21 +3243,6 @@ } }, - { - "path": "com/android/tools/analytics-library/crash/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "crash-26.3.1.pom": { - "sha1": "7b667eb48f02b8ba2a981a962e9c1137e251c1e0", - "sha256": "sha256-m0FH4hP4dmWwzUXF6w47Q79EWJf5r9rKF/c8wjjF01c=" - }, - "crash-26.3.1.jar": { - "sha1": "46163f2cf0e16a1ba9be2ad6dddc39f1a1d6b613", - "sha256": "sha256-k5OoPOLz+pZ4LCU98yROaZo7PfGG3pJssTiVj6+VYpM=" - } - } - }, - { "path": "com/android/tools/analytics-library/crash/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -3442,21 +3382,6 @@ } }, - { - "path": "com/android/tools/analytics-library/protos/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "protos-26.3.1.pom": { - "sha1": "d6015a3a017dcb62d9a9a56c28b5c47bb6727a91", - "sha256": "sha256-IP1qlda7IElg7qdLFBTEWy78J0+4Tf90MnqRYezfc3k=" - }, - "protos-26.3.1.jar": { - "sha1": "f35a0accd93cfbb4306268ea748e1ac49920a0a8", - "sha256": "sha256-70/09xLY//RrI3jBwQh5l1hXdvpsGhwgBpbXd0eNnUw=" - } - } - }, - { "path": "com/android/tools/analytics-library/protos/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -3596,21 +3521,6 @@ } }, - { - "path": "com/android/tools/analytics-library/shared/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "shared-26.3.1.pom": { - "sha1": "af1e1e7d120696bfee452247b5224290d91d828f", - "sha256": "sha256-3Hxmxmp5mFLNaGRaEXOJSRxiTU1U+OzdX5QENgHtys4=" - }, - "shared-26.3.1.jar": { - "sha1": "3457faee7a68d84dcbd258889567153acfc731a2", - "sha256": "sha256-bSe5quJj4rwth0SR72dh86WuH34wzEq2v7ktd/2tO/A=" - } - } - }, - { "path": "com/android/tools/analytics-library/shared/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -3750,21 +3660,6 @@ } }, - { - "path": "com/android/tools/analytics-library/tracker/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "tracker-26.3.1.pom": { - "sha1": "6775a4eeafd2ef5270750388ee53503eeafa688b", - "sha256": "sha256-+mgVCnuDFGnXWVQ1ZGPkmcJjl1ubk/YmTQ3qjRHlKwg=" - }, - "tracker-26.3.1.jar": { - "sha1": "26248cad2525e003752322cfc6bd86182df7daac", - "sha256": "sha256-JG6AgEtANgzjGNp7nRKUjgrUHQwpzHvbOGF9weaWnYg=" - } - } - }, - { "path": "com/android/tools/analytics-library/tracker/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -3904,21 +3799,6 @@ } }, - { - "path": "com/android/tools/annotations/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "annotations-26.3.1.pom": { - "sha1": "bce2159e811cceee12498cb34812cbae1e7b8eda", - "sha256": "sha256-Y7XWCr1wC4On07xPXk1+cRxZsOB6WsMmd2FOP/1xJLE=" - }, - "annotations-26.3.1.jar": { - "sha1": "3d46d5da6d5dd17df682a22b914cdc6b84677731", - "sha256": "sha256-U0rc5Q64KdT4yXW8NOpVs49oxjAOAA4rR8Q6xnLQxyE=" - } - } - }, - { "path": "com/android/tools/annotations/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -4346,21 +4226,6 @@ } }, - { - "path": "com/android/tools/build/apksig/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "apksig-3.3.1.pom": { - "sha1": "e916d810d293ce4ab620435b41d2e3bc67972cd3", - "sha256": "sha256-cGliMgmhK5sal8XJypuekagqDkDG4h4LlMc5barHh80=" - }, - "apksig-3.3.1.jar": { - "sha1": "5dc32667e573a18b05119685ac3f2b8c0f17182d", - "sha256": "sha256-NXs57dinjUgKlT5rl8CYWf1AyXLBpJtvnTvT1LmYyy0=" - } - } - }, - { "path": "com/android/tools/build/apksig/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -4470,21 +4335,6 @@ } }, - { - "path": "com/android/tools/build/apkzlib/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "apkzlib-3.3.1.pom": { - "sha1": "02214cdec00c2553430192a7f36e9a28cf96bf6f", - "sha256": "sha256-IVhIC03ar9F8K15CEeAPstojFB93BY+VjRqUlFBZ0IU=" - }, - "apkzlib-3.3.1.jar": { - "sha1": "0563a5b71668b4fe7da03a0a3054c9fdd973d3cf", - "sha256": "sha256-ZAVmwOT1BZATm7z7sP90TB9tzZ8mL48tAVn8QZQTgcw=" - } - } - }, - { "path": "com/android/tools/build/apkzlib/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -4624,21 +4474,6 @@ } }, - { - "path": "com/android/tools/build/builder-model/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "builder-model-3.3.1.pom": { - "sha1": "4011d22709777c4063e84d39dbfe4ed535a31905", - "sha256": "sha256-XVNezIVtl4YN/ZElCFrqki4FTrfZ4SRPg3p0n76b++M=" - }, - "builder-model-3.3.1.jar": { - "sha1": "2c47cf0451da2eaad484ccd2d580a8cfd23fa064", - "sha256": "sha256-BXtSlcP+jNze+uaN47+/nHbTnaI+BMw0ZdZgA3oxfwA=" - } - } - }, - { "path": "com/android/tools/build/builder-model/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -4790,21 +4625,6 @@ } }, - { - "path": "com/android/tools/build/builder-test-api/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "builder-test-api-3.3.1.pom": { - "sha1": "e79a310b9c89fcb62f343b727f5747783c778861", - "sha256": "sha256-heZof7B9lqEFRE1Rouwnrz9798H5w72QcGZ9QblfZAY=" - }, - "builder-test-api-3.3.1.jar": { - "sha1": "c1a1ce91c0f34c43a52c54c1a2f6fdbaafadd3da", - "sha256": "sha256-KYnV5vE5YwFoEC40dwJCFbnKvew+Gqc4saBze0tfyww=" - } - } - }, - { "path": "com/android/tools/build/builder-test-api/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -4956,21 +4776,6 @@ } }, - { - "path": "com/android/tools/build/builder/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "builder-3.3.1.pom": { - "sha1": "fbca96adc8069b8fcb01c7271c3b4be4f901b517", - "sha256": "sha256-pg/e6U4EqMemXDi6m2UFhcOkv0cisGFnuI85cO4UA+Q=" - }, - "builder-3.3.1.jar": { - "sha1": "e4d2ad1ef694fca700b3ab1f4df4b79313d17c98", - "sha256": "sha256-zoj1PYZLXN+oW1cC5yiz1u0NOqkoy2HghCRtSlUBXFI=" - } - } - }, - { "path": "com/android/tools/build/builder/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -5092,21 +4897,6 @@ } }, - { - "path": "com/android/tools/build/bundletool/0.6.0", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "bundletool-0.6.0.pom": { - "sha1": "5a6e5b5af1687285125f43e00a8e5a8efe6f76a4", - "sha256": "sha256-YDqi6WyRrkPynACNA16mdo0fJya6qjAqXwzYBFfgRiI=" - }, - "bundletool-0.6.0.jar": { - "sha1": "fb944be26f692e6ac937924ad5be7faa4093dd80", - "sha256": "sha256-QAU1QDlstRlZ0GYLSihk7mqBaXi/AT/UwB3L7IlcS7o=" - } - } - }, - { "path": "com/android/tools/build/bundletool/0.9.0", "repo": "https://dl.google.com/dl/android/maven2", @@ -5242,21 +5032,6 @@ } }, - { - "path": "com/android/tools/build/gradle-api/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "gradle-api-3.3.1.pom": { - "sha1": "c9a6cecdb5e233c2ffde76507bddc6f26ade5528", - "sha256": "sha256-3BUSdrg4w9TdT8QdcwRoOkTGotjb3ngpdN9p+1g8dRQ=" - }, - "gradle-api-3.3.1.jar": { - "sha1": "93aac19942998e480db4195212150fb30f7a78cd", - "sha256": "sha256-SMmx/OFMswX3/3XdL97Ds/qtZK/pFQbviYoEsIbmtBY=" - } - } - }, - { "path": "com/android/tools/build/gradle-api/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -5457,21 +5232,6 @@ } }, - { - "path": "com/android/tools/build/gradle/3.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "gradle-3.3.1.pom": { - "sha1": "1769370bffda87132eb79580bf54ccb9eb339020", - "sha256": "sha256-9eitp3Q6B3or5f+qF0Q0VmkSQa7ZEoYVgAXzUcRA/3w=" - }, - "gradle-3.3.1.jar": { - "sha1": "7d642f14aa35443dd7aeecd0600c17da37d3bccc", - "sha256": "sha256-9WSZq8Ux35uuhlFo5y8kCHAtSgH0bXuMGgowDWLcEb0=" - } - } - }, - { "path": "com/android/tools/build/gradle/3.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -5593,21 +5353,6 @@ } }, - { - "path": "com/android/tools/build/jetifier/jetifier-core/1.0.0-beta02", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "jetifier-core-1.0.0-beta02.pom": { - "sha1": "db878af76000b681798b114a5169163b1efe59ea", - "sha256": "sha256-kJGGklY7MCjkeLrxyUM3jfSIOTpSeJWMbzaWO2jfw7k=" - }, - "jetifier-core-1.0.0-beta02.jar": { - "sha1": "fa93fdb83bdfd51e80e09a808fb2515a7134d406", - "sha256": "sha256-72H4QwL4tB3OOFjB/H56kOx0omOgITsfZegMVhRaR5M=" - } - } - }, - { "path": "com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04", "repo": "https://dl.google.com/dl/android/maven2", @@ -5672,21 +5417,6 @@ } }, - { - "path": "com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta02", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "jetifier-processor-1.0.0-beta02.pom": { - "sha1": "3bf006f5a449806a9ad493a99c9f9417b3040ef0", - "sha256": "sha256-+zYwiX233O8PE6VViKrYxkvcGPZ64KHizNR1igcioa8=" - }, - "jetifier-processor-1.0.0-beta02.jar": { - "sha1": "624d187319c8dfd6bc8281b4afbab87c39bbb005", - "sha256": "sha256-J+UFZWvlNLNIYHQy/EEeKVQLCE0NTkhlIyqnYswe9Aw=" - } - } - }, - { "path": "com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta04", "repo": "https://dl.google.com/dl/android/maven2", @@ -5781,21 +5511,6 @@ } }, - { - "path": "com/android/tools/build/manifest-merger/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "manifest-merger-26.3.1.pom": { - "sha1": "1aad18d13e7389cf148b1c6c468b2947ca23cbbd", - "sha256": "sha256-YNhLNKJlpgVeZhxpOvIFB1mgbYpuXLpk370esi0vpPU=" - }, - "manifest-merger-26.3.1.jar": { - "sha1": "aa94f738e318fc73059d9207f433f13556072d05", - "sha256": "sha256-hNrba75FBJgCeexO/2RdkaGgsPpagAQjmjS5vOZ1crU=" - } - } - }, - { "path": "com/android/tools/build/manifest-merger/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -5947,21 +5662,6 @@ } }, - { - "path": "com/android/tools/common/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "common-26.3.1.pom": { - "sha1": "b79360c83ea68ba7f0ac0fadf7c48e1a53511352", - "sha256": "sha256-mvrBYjeX9GBEevDT9gMuQfLdXx1N7pSbd3OBSR6NxVM=" - }, - "common-26.3.1.jar": { - "sha1": "b0e3aa846dd94f9608018f7ef6501d1069f6488c", - "sha256": "sha256-QashymLYGxzYciSbVSlD1rzTZmN32f1/cY3rQd7HM9Y=" - } - } - }, - { "path": "com/android/tools/common/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -6101,21 +5801,6 @@ } }, - { - "path": "com/android/tools/ddms/ddmlib/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "ddmlib-26.3.1.pom": { - "sha1": "14405d92c982c96ace23b7a4c505b0d9de58cd8d", - "sha256": "sha256-MhUp9OEUJ8VtX0uLtcJkLAHza1LkO1wwnEk81IM9sNE=" - }, - "ddmlib-26.3.1.jar": { - "sha1": "61ca2873fcce1012ba9782adf7e9b0e164fb6007", - "sha256": "sha256-oTYJ+lhJr4+Os0JzaOG8KMp7DwSvKGwLqVoAfrkkHro=" - } - } - }, - { "path": "com/android/tools/ddms/ddmlib/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -6255,21 +5940,6 @@ } }, - { - "path": "com/android/tools/dvlib/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "dvlib-26.3.1.pom": { - "sha1": "c438f3c025bd878ac3b54368e012b3792f9c8928", - "sha256": "sha256-3lL/6GFK8OCRXxbiIujskxfriVuL9GtfE7hU8B2mDdY=" - }, - "dvlib-26.3.1.jar": { - "sha1": "971430b6163a834656d07434c46fee64d109ad8e", - "sha256": "sha256-cLMOL4Sc+kKqE7+GWenhTAKtfLSkbLKB4CKOuC5XM4s=" - } - } - }, - { "path": "com/android/tools/dvlib/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -6514,21 +6184,6 @@ } }, - { - "path": "com/android/tools/layoutlib/layoutlib-api/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "layoutlib-api-26.3.1.pom": { - "sha1": "0355e0146c59a91fbb303d7faaa6d2d0413f5dde", - "sha256": "sha256-az/hSE+y4dWr/4VYc0KxX5tM3W6E/Vkjm9r7ShTtLXg=" - }, - "layoutlib-api-26.3.1.jar": { - "sha1": "969ef3a7c0c3b245a3efe8aff7a2f6f15ff4e824", - "sha256": "sha256-Tk6yS7wTU2sl1t063kHZJWr1rnuBpBe5a1WEMLUKQV4=" - } - } - }, - { "path": "com/android/tools/layoutlib/layoutlib-api/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -6728,21 +6383,6 @@ } }, - { - "path": "com/android/tools/lint/lint-gradle-api/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "lint-gradle-api-26.3.1.pom": { - "sha1": "dbdbed4b5fa948b991335771c7005fc8aa8be73b", - "sha256": "sha256-6xds70C7k1Yy8gaACv2XSeMP+suuYIgzflDCP2vG5CA=" - }, - "lint-gradle-api-26.3.1.jar": { - "sha1": "d55e1bcbe4e7c0bb97f5c385a003c4339e38d07f", - "sha256": "sha256-RcBjcp/izzXWOh/9Ih17gtPkpxWay2AvqWuc/5BN5sk=" - } - } - }, - { "path": "com/android/tools/lint/lint-gradle-api/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -7017,21 +6657,6 @@ } }, - { - "path": "com/android/tools/repository/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "repository-26.3.1.pom": { - "sha1": "ab5a2f6cbedccf4ff9efbd5301fe26c9d1aaea2a", - "sha256": "sha256-VRlYrn5H3gUTtUim8TrCf8Bv8/Ww/x6aQ8SAjzRz6zc=" - }, - "repository-26.3.1.jar": { - "sha1": "0fe4c713437ebfb8c68e95c717c063843bd63758", - "sha256": "sha256-UZR25PiBJMbbndC98J8MSqXMi/Hvq4Dd3uL3Wmug784=" - } - } - }, - { "path": "com/android/tools/repository/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -7171,21 +6796,6 @@ } }, - { - "path": "com/android/tools/sdklib/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "sdklib-26.3.1.pom": { - "sha1": "d6cfc0d8a0f49620138cfaea6c51201c7c678633", - "sha256": "sha256-gnUcqRaojEMoL7ZX1kJerqAstwsEAJlroYEZr6GRRCE=" - }, - "sdklib-26.3.1.jar": { - "sha1": "85c3c1de8824ca1f5ff491690931256c23a7297b", - "sha256": "sha256-aEN9Fbfmle8G6Yu88HEQQJlVtjsBijR7pofwGuxQfQo=" - } - } - }, - { "path": "com/android/tools/sdklib/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -7325,21 +6935,6 @@ } }, - { - "path": "com/android/tools/sdk-common/26.3.1", - "repo": "https://dl.google.com/dl/android/maven2", - "files": { - "sdk-common-26.3.1.pom": { - "sha1": "9b7b4248e21db9c342dba7c3e891f740246b97c3", - "sha256": "sha256-jFp1bExxaochJmmIvOMohkjrj3uDF3DFct1Pcp85iqg=" - }, - "sdk-common-26.3.1.jar": { - "sha1": "c9bed0f05024f919fe6168ef381afbe72074a272", - "sha256": "sha256-s2dcStd5EUHIfzaADxkUIz8q9Rx2b+F67BsVIsgOL8g=" - } - } - }, - { "path": "com/android/tools/sdk-common/26.5.4", "repo": "https://dl.google.com/dl/android/maven2", @@ -11342,17 +10937,6 @@ } }, - { - "path": "com/google/guava/guava-parent/26.0-jre", - "repo": "https://repo.maven.apache.org/maven2", - "files": { - "guava-parent-26.0-jre.pom": { - "sha1": "3a638a46e3277ff6a3d43d2a50bcccfac2966815", - "sha256": "sha256-u31c1BfA19714+Jwkv3SNSLT/CUa2KB5VsE84Fc66qM=" - } - } - }, - { "path": "com/google/guava/guava-parent/27.0.1-jre", "repo": "https://repo.maven.apache.org/maven2", @@ -11505,21 +11089,6 @@ } }, - { - "path": "com/google/guava/guava/26.0-jre", - "repo": "https://repo.maven.apache.org/maven2", - "files": { - "guava-26.0-jre.pom": { - "sha1": "7883e19f8b0cca8c4498d476743e31b107674155", - "sha256": "sha256-HDN63JpKtLhE2oHahZNlgbiUbHy3EoTF3L2vHqp+4Qk=" - }, - "guava-26.0-jre.jar": { - "sha1": "6a806eff209f36f635f943e16d97491f00f6bfab", - "sha256": "sha256-oOnKutZlvCC80rAfEI5fwD91bhOuqAq6rbn0BwM76iw=" - } - } - }, - { "path": "com/google/guava/guava/27.0.1-jre", "repo": "https://repo.maven.apache.org/maven2", @@ -14121,16 +13690,16 @@ }, { - "path": "net/bytebuddy/byte-buddy-agent/1.14.10", + "path": "net/bytebuddy/byte-buddy-agent/1.14.11", "repo": "https://repo.maven.apache.org/maven2", "files": { - "byte-buddy-agent-1.14.10.pom": { - "sha1": "ab24aa41b81d9496ec9ccd188a0449327d93bfdf", - "sha256": "sha256-U7yX6ca/fC0OX5y6x9Xeaykk2RbPS4F+ajo1kpx5a0o=" + "byte-buddy-agent-1.14.11.pom": { + "sha1": "00a2165ce3253489dd9fd0836a169dfce74e2042", + "sha256": "sha256-VBMQ/3WsTurkYFUJn8Ec3b5TqcBe6vry9wMgZQ2zzOk=" }, - "byte-buddy-agent-1.14.10.jar": { - "sha1": "90ed94ac044ea8953b224304c762316e91fd6b31", - "sha256": "sha256-Z5k6idR8pY/4aIAqREjd0VDl/k5aVkXe2ZDXtNVXprk=" + "byte-buddy-agent-1.14.11.jar": { + "sha1": "f9cb566608fbac6bc7bf54901a7aa11543a989ee", + "sha256": "sha256-L1N6Yhpk+nAT1oxpWnajTujXna105jXKyhbdViV664A=" } } }, @@ -14158,12 +13727,12 @@ }, { - "path": "net/bytebuddy/byte-buddy-parent/1.14.10", + "path": "net/bytebuddy/byte-buddy-parent/1.14.11", "repo": "https://repo.maven.apache.org/maven2", "files": { - "byte-buddy-parent-1.14.10.pom": { - "sha1": "4c560a925c30d5911dc875af5af4737e21b397be", - "sha256": "sha256-xpghkGD7DlZaDyyWCU6Ssg7+FG/WFjayyeTAO9m6Sns=" + "byte-buddy-parent-1.14.11.pom": { + "sha1": "696bf3e007e88bd1c0c2d877d74e0f3c56f2b96f", + "sha256": "sha256-RsDxP8l3jcLrtpdIgjqixMvwfqt9GMaqGRxSnRZQiSs=" } } }, @@ -14199,16 +13768,16 @@ }, { - "path": "net/bytebuddy/byte-buddy/1.14.10", + "path": "net/bytebuddy/byte-buddy/1.14.11", "repo": "https://repo.maven.apache.org/maven2", "files": { - "byte-buddy-1.14.10.pom": { - "sha1": "8806052a8770a6b3e14362ed0ce6ef263e6a20ab", - "sha256": "sha256-zVh4KEX/ju3y7YOgw+30Xu65nhTAWvii6QGGDqCAzq8=" + "byte-buddy-1.14.11.pom": { + "sha1": "5ecfcd2f75aa8c7b6347d864a4d0a5212c360301", + "sha256": "sha256-NYRJ1sc1OFhFCN2K5s/eVrr0o0t2e3HZzEZE8PH0IRo=" }, - "byte-buddy-1.14.10.jar": { - "sha1": "8117daf4a612122eb4f517f66adff778cb8b4737", - "sha256": "sha256-MObgRGQ3pn2zfit/fTP1B4fd/ZcDWTGd/QVGnaoty84=" + "byte-buddy-1.14.11.jar": { + "sha1": "725602eb7c8c56b51b9c21f273f9df5c909d9e7d", + "sha256": "sha256-Yq4oGH7SsGKBPaap1We/7nM8NBWCaZti3ZgCMHKaAxM=" } } }, @@ -17822,21 +17391,6 @@ } }, - { - "path": "org/jetbrains/kotlin/kotlin-reflect/1.3.20", - "repo": "https://repo.maven.apache.org/maven2", - "files": { - "kotlin-reflect-1.3.20.pom": { - "sha1": "7cc0e8dc8e9bf863127aee4501449e25e85a6f78", - "sha256": "sha256-ajZdjTUpX69X8t86ssuQQgnaqsiQb8Y3R9Pjv6sJPeI=" - }, - "kotlin-reflect-1.3.20.jar": { - "sha1": "cd49eec32cf964333faf59e04b4085eac7008477", - "sha256": "sha256-7hqSbtZY594ObfAkLNV0s7TgjmT+emgngibG8tM3Mjg=" - } - } - }, - { "path": "org/jetbrains/kotlin/kotlin-reflect/1.3.50", "repo": "https://repo.maven.apache.org/maven2", @@ -18227,21 +17781,6 @@ } }, - { - "path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20", - "repo": "https://repo.maven.apache.org/maven2", - "files": { - "kotlin-stdlib-common-1.3.20.pom": { - "sha1": "507fa9faf5120c5c5247bc1b23476ad91760c09c", - "sha256": "sha256-BIjdHCYv5hfXc2K8Sa+BjYztQJQ6pbA8GITb8kdRCjA=" - }, - "kotlin-stdlib-common-1.3.20.jar": { - "sha1": "7d7934e26ce34da1a0a8d00e38038d7cf3375e89", - "sha256": "sha256-Br3Yrto0fvbvPk6diKASVMzbcHhLaXSV9qQh/WY6tkk=" - } - } - }, - { "path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.3.31", "repo": "https://repo.maven.apache.org/maven2", @@ -18527,21 +18066,6 @@ } }, - { - "path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20", - "repo": "https://repo.maven.apache.org/maven2", - "files": { - "kotlin-stdlib-jdk7-1.3.20.pom": { - "sha1": "665178dfa4d04de64edecf5f0dbda61b55f8f4e3", - "sha256": "sha256-SdtmBiZNOmpI+QgzXASEYirVyPTfjEjdSgAmdA4eFsU=" - }, - "kotlin-stdlib-jdk7-1.3.20.jar": { - "sha1": "aa17d6fd473ce53061a7b2b9d2ae96f547cae93d", - "sha256": "sha256-/Sr3C90rwCT7A8vtYzyhQ4cso2pqFuIYzGfIkLefsx0=" - } - } - }, - { "path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50", "repo": "https://repo.maven.apache.org/maven2", @@ -18722,21 +18246,6 @@ } }, - { - "path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20", - "repo": "https://repo.maven.apache.org/maven2", - "files": { - "kotlin-stdlib-jdk8-1.3.20.pom": { - "sha1": "5c65523f57e3918ef722a15faae5173fc9a31331", - "sha256": "sha256-DF+73Rh7hSpRoKP7YskCSdpOdN//jf/5RphOL3AlCkI=" - }, - "kotlin-stdlib-jdk8-1.3.20.jar": { - "sha1": "b1f3cb184c4ce4139741454df2f8fca5320f822d", - "sha256": "sha256-bAgx5+OsqjkL8i952B8y8hLcj94ZgHo1Sk7k9migxHg=" - } - } - }, - { "path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.50", "repo": "https://repo.maven.apache.org/maven2", @@ -18962,21 +18471,6 @@ } }, - { - "path": "org/jetbrains/kotlin/kotlin-stdlib/1.3.20", - "repo": "https://repo.maven.apache.org/maven2", - "files": { - "kotlin-stdlib-1.3.20.pom": { - "sha1": "9d1e01f424795aa471a8def0b5dc8aeeb537aafd", - "sha256": "sha256-Mu+dGkDXXOr0F5KW7VTdylp+ekpl4aAZ5kmOusg14Rw=" - }, - "kotlin-stdlib-1.3.20.jar": { - "sha1": "eb2a232734e09fcd1b958a5c7520a93c6de38b32", - "sha256": "sha256-YB+RDalo+z2o6te2Tta/XJcQ2DzqN+SmMYR+fWiOM2E=" - } - } - }, - { "path": "org/jetbrains/kotlin/kotlin-stdlib/1.3.31", "repo": "https://repo.maven.apache.org/maven2", @@ -19666,16 +19160,16 @@ }, { - "path": "org/mockito/mockito-core/5.8.0", + "path": "org/mockito/mockito-core/5.9.0", "repo": "https://repo.maven.apache.org/maven2", "files": { - "mockito-core-5.8.0.pom": { - "sha1": "a2b7b33c5d649a2f48b1e7aab95d81671f66875f", - "sha256": "sha256-dJWKzd4UjzC/ox/8CFi2L3H2PMws602KjGfX9CjUOi0=" + "mockito-core-5.9.0.pom": { + "sha1": "2054dcc15b9ede899cb9ec6e8e960e36c68b4574", + "sha256": "sha256-BJDEL+Yu7WRzQdpAojcHGW2BO0TbKj3KMB2IFz56yPc=" }, - "mockito-core-5.8.0.jar": { - "sha1": "df310627f77f859114ad31e1376fff0dce263cca", - "sha256": "sha256-wyD2YqA8KVHtzFGkS2TXmo6ZQ3P/VIRTtf2vad6+RoI=" + "mockito-core-5.9.0.jar": { + "sha1": "faa88b96db3aeb96a93e83dec7491345bfbfc414", + "sha256": "sha256-u62Rhe1zSWX6x+Nn8OUVlvaVMeUdiyy87BBI3W+0Hyw=" } } }, diff --git a/nix/deps/gradle/deps.list b/nix/deps/gradle/deps.list index b8449b0344e..85cf1272e0c 100644 --- a/nix/deps/gradle/deps.list +++ b/nix/deps/gradle/deps.list @@ -49,7 +49,6 @@ androidx.core:core:1.7.0 androidx.cursoradapter:cursoradapter:1.0.0 androidx.customview:customview:1.0.0 androidx.databinding:databinding-common:3.2.1 -androidx.databinding:databinding-common:3.3.1 androidx.databinding:databinding-common:3.5.4 androidx.databinding:databinding-common:4.1.0 androidx.databinding:databinding-common:7.0.4 @@ -57,7 +56,6 @@ androidx.databinding:databinding-common:7.2.1 androidx.databinding:databinding-common:7.3.1 androidx.databinding:databinding-common:7.4.2 androidx.databinding:databinding-compiler-common:3.2.1 -androidx.databinding:databinding-compiler-common:3.3.1 androidx.databinding:databinding-compiler-common:3.5.4 androidx.databinding:databinding-compiler-common:4.1.0 androidx.databinding:databinding-compiler-common:7.0.4 @@ -159,7 +157,6 @@ com.android.databinding:baseLibrary:1.0-rc5 com.android.databinding:baseLibrary:3.0.0 com.android.databinding:baseLibrary:3.0.1 com.android.databinding:baseLibrary:3.2.1 -com.android.databinding:baseLibrary:3.3.1 com.android.databinding:baseLibrary:3.5.4 com.android.databinding:baseLibrary:4.1.0 com.android.databinding:baseLibrary:7.0.4 @@ -170,7 +167,6 @@ com.android.databinding:compilerCommon:1.0-rc5 com.android.databinding:compilerCommon:3.0.0 com.android.databinding:compilerCommon:3.0.1 com.android.tools.analytics-library:crash:26.2.1 -com.android.tools.analytics-library:crash:26.3.1 com.android.tools.analytics-library:crash:26.5.4 com.android.tools.analytics-library:crash:27.1.0 com.android.tools.analytics-library:crash:30.0.4 @@ -180,7 +176,6 @@ com.android.tools.analytics-library:crash:30.4.2 com.android.tools.analytics-library:protos:26.0.0 com.android.tools.analytics-library:protos:26.0.1 com.android.tools.analytics-library:protos:26.2.1 -com.android.tools.analytics-library:protos:26.3.1 com.android.tools.analytics-library:protos:26.5.4 com.android.tools.analytics-library:protos:27.1.0 com.android.tools.analytics-library:protos:30.0.4 @@ -190,7 +185,6 @@ com.android.tools.analytics-library:protos:30.4.2 com.android.tools.analytics-library:shared:26.0.0 com.android.tools.analytics-library:shared:26.0.1 com.android.tools.analytics-library:shared:26.2.1 -com.android.tools.analytics-library:shared:26.3.1 com.android.tools.analytics-library:shared:26.5.4 com.android.tools.analytics-library:shared:27.1.0 com.android.tools.analytics-library:shared:30.0.4 @@ -200,7 +194,6 @@ com.android.tools.analytics-library:shared:30.4.2 com.android.tools.analytics-library:tracker:26.0.0 com.android.tools.analytics-library:tracker:26.0.1 com.android.tools.analytics-library:tracker:26.2.1 -com.android.tools.analytics-library:tracker:26.3.1 com.android.tools.analytics-library:tracker:26.5.4 com.android.tools.analytics-library:tracker:27.1.0 com.android.tools.analytics-library:tracker:30.0.4 @@ -208,12 +201,10 @@ com.android.tools.analytics-library:tracker:30.2.1 com.android.tools.analytics-library:tracker:30.3.1 com.android.tools.analytics-library:tracker:30.4.2 com.android.tools.build.jetifier:jetifier-core:1.0.0-alpha10 -com.android.tools.build.jetifier:jetifier-core:1.0.0-beta02 com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04 com.android.tools.build.jetifier:jetifier-core:1.0.0-beta09 com.android.tools.build.jetifier:jetifier-core:1.0.0-beta10 com.android.tools.build.jetifier:jetifier-processor:1.0.0-alpha10 -com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02 com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta04 com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09 com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta10 @@ -232,7 +223,6 @@ com.android.tools.build:aaptcompiler:7.4.2 com.android.tools.build:apksig:3.0.0 com.android.tools.build:apksig:3.0.1 com.android.tools.build:apksig:3.2.1 -com.android.tools.build:apksig:3.3.1 com.android.tools.build:apksig:3.5.4 com.android.tools.build:apksig:4.1.0 com.android.tools.build:apksig:7.0.4 @@ -240,7 +230,6 @@ com.android.tools.build:apksig:7.2.1 com.android.tools.build:apksig:7.3.1 com.android.tools.build:apksig:7.4.2 com.android.tools.build:apkzlib:3.2.1 -com.android.tools.build:apkzlib:3.3.1 com.android.tools.build:apkzlib:3.5.4 com.android.tools.build:apkzlib:4.1.0 com.android.tools.build:apkzlib:7.0.4 @@ -252,7 +241,6 @@ com.android.tools.build:builder-model:1.5.0 com.android.tools.build:builder-model:3.0.0 com.android.tools.build:builder-model:3.0.1 com.android.tools.build:builder-model:3.2.1 -com.android.tools.build:builder-model:3.3.1 com.android.tools.build:builder-model:3.5.4 com.android.tools.build:builder-model:4.1.0 com.android.tools.build:builder-model:7.0.4 @@ -264,7 +252,6 @@ com.android.tools.build:builder-test-api:1.5.0 com.android.tools.build:builder-test-api:3.0.0 com.android.tools.build:builder-test-api:3.0.1 com.android.tools.build:builder-test-api:3.2.1 -com.android.tools.build:builder-test-api:3.3.1 com.android.tools.build:builder-test-api:3.5.4 com.android.tools.build:builder-test-api:4.1.0 com.android.tools.build:builder-test-api:7.0.4 @@ -276,7 +263,6 @@ com.android.tools.build:builder:1.5.0 com.android.tools.build:builder:3.0.0 com.android.tools.build:builder:3.0.1 com.android.tools.build:builder:3.2.1 -com.android.tools.build:builder:3.3.1 com.android.tools.build:builder:3.5.4 com.android.tools.build:builder:4.1.0 com.android.tools.build:builder:7.0.4 @@ -284,7 +270,6 @@ com.android.tools.build:builder:7.2.1 com.android.tools.build:builder:7.3.1 com.android.tools.build:builder:7.4.2 com.android.tools.build:bundletool:0.5.0 -com.android.tools.build:bundletool:0.6.0 com.android.tools.build:bundletool:0.9.0 com.android.tools.build:bundletool:0.14.0 com.android.tools.build:bundletool:1.6.0 @@ -294,7 +279,6 @@ com.android.tools.build:bundletool:1.11.4 com.android.tools.build:gradle-api:3.0.0 com.android.tools.build:gradle-api:3.0.1 com.android.tools.build:gradle-api:3.2.1 -com.android.tools.build:gradle-api:3.3.1 com.android.tools.build:gradle-api:3.5.4 com.android.tools.build:gradle-api:4.1.0 com.android.tools.build:gradle-api:7.0.4 @@ -311,7 +295,6 @@ com.android.tools.build:gradle:1.5.0 com.android.tools.build:gradle:3.0.0 com.android.tools.build:gradle:3.0.1 com.android.tools.build:gradle:3.2.1 -com.android.tools.build:gradle:3.3.1 com.android.tools.build:gradle:3.5.4 com.android.tools.build:gradle:4.1.0 com.android.tools.build:gradle:7.0.4 @@ -322,7 +305,6 @@ com.android.tools.build:manifest-merger:24.5.0 com.android.tools.build:manifest-merger:26.0.0 com.android.tools.build:manifest-merger:26.0.1 com.android.tools.build:manifest-merger:26.2.1 -com.android.tools.build:manifest-merger:26.3.1 com.android.tools.build:manifest-merger:26.5.4 com.android.tools.build:manifest-merger:27.1.0 com.android.tools.build:manifest-merger:30.0.4 @@ -336,7 +318,6 @@ com.android.tools.ddms:ddmlib:24.5.0 com.android.tools.ddms:ddmlib:26.0.0 com.android.tools.ddms:ddmlib:26.0.1 com.android.tools.ddms:ddmlib:26.2.1 -com.android.tools.ddms:ddmlib:26.3.1 com.android.tools.ddms:ddmlib:26.5.4 com.android.tools.ddms:ddmlib:27.1.0 com.android.tools.ddms:ddmlib:30.0.4 @@ -355,7 +336,6 @@ com.android.tools.layoutlib:layoutlib-api:24.5.0 com.android.tools.layoutlib:layoutlib-api:26.0.0 com.android.tools.layoutlib:layoutlib-api:26.0.1 com.android.tools.layoutlib:layoutlib-api:26.2.1 -com.android.tools.layoutlib:layoutlib-api:26.3.1 com.android.tools.layoutlib:layoutlib-api:26.5.4 com.android.tools.layoutlib:layoutlib-api:27.1.0 com.android.tools.layoutlib:layoutlib-api:30.0.4 @@ -371,7 +351,6 @@ com.android.tools.lint:lint-checks:24.5.0 com.android.tools.lint:lint-checks:26.0.0 com.android.tools.lint:lint-checks:26.0.1 com.android.tools.lint:lint-gradle-api:26.2.1 -com.android.tools.lint:lint-gradle-api:26.3.1 com.android.tools.lint:lint-gradle-api:26.5.4 com.android.tools.lint:lint-gradle-api:27.1.0 com.android.tools.lint:lint-model:27.1.0 @@ -412,7 +391,6 @@ com.android.tools:annotations:24.5.0 com.android.tools:annotations:26.0.0 com.android.tools:annotations:26.0.1 com.android.tools:annotations:26.2.1 -com.android.tools:annotations:26.3.1 com.android.tools:annotations:26.5.4 com.android.tools:annotations:27.1.0 com.android.tools:annotations:30.0.4 @@ -424,7 +402,6 @@ com.android.tools:common:24.5.0 com.android.tools:common:26.0.0 com.android.tools:common:26.0.1 com.android.tools:common:26.2.1 -com.android.tools:common:26.3.1 com.android.tools:common:26.5.4 com.android.tools:common:27.1.0 com.android.tools:common:30.0.4 @@ -436,7 +413,6 @@ com.android.tools:dvlib:24.5.0 com.android.tools:dvlib:26.0.0 com.android.tools:dvlib:26.0.1 com.android.tools:dvlib:26.2.1 -com.android.tools:dvlib:26.3.1 com.android.tools:dvlib:26.5.4 com.android.tools:dvlib:27.1.0 com.android.tools:dvlib:30.0.4 @@ -446,7 +422,6 @@ com.android.tools:dvlib:30.4.2 com.android.tools:repository:26.0.0 com.android.tools:repository:26.0.1 com.android.tools:repository:26.2.1 -com.android.tools:repository:26.3.1 com.android.tools:repository:26.5.4 com.android.tools:repository:27.1.0 com.android.tools:repository:30.0.4 @@ -458,7 +433,6 @@ com.android.tools:sdklib:24.5.0 com.android.tools:sdklib:26.0.0 com.android.tools:sdklib:26.0.1 com.android.tools:sdklib:26.2.1 -com.android.tools:sdklib:26.3.1 com.android.tools:sdklib:26.5.4 com.android.tools:sdklib:27.1.0 com.android.tools:sdklib:30.0.4 @@ -470,7 +444,6 @@ com.android.tools:sdk-common:24.5.0 com.android.tools:sdk-common:26.0.0 com.android.tools:sdk-common:26.0.1 com.android.tools:sdk-common:26.2.1 -com.android.tools:sdk-common:26.3.1 com.android.tools:sdk-common:26.5.4 com.android.tools:sdk-common:27.1.0 com.android.tools:sdk-common:30.0.4 @@ -590,7 +563,6 @@ com.google.guava:failureaccess:1.0.1 com.google.guava:guava:17.0 com.google.guava:guava:22.0 com.google.guava:guava:23.0 -com.google.guava:guava:26.0-jre com.google.guava:guava:27.0.1-jre com.google.guava:guava:28.1-jre com.google.guava:guava:29.0-jre @@ -817,7 +789,6 @@ org.jetbrains.kotlin:kotlin-project-model:1.6.20 org.jetbrains.kotlin:kotlin-project-model:1.9.0 org.jetbrains.kotlin:kotlin-reflect:1.1.3-2 org.jetbrains.kotlin:kotlin-reflect:1.2.0 -org.jetbrains.kotlin:kotlin-reflect:1.3.20 org.jetbrains.kotlin:kotlin-reflect:1.3.50 org.jetbrains.kotlin:kotlin-reflect:1.3.72 org.jetbrains.kotlin:kotlin-reflect:1.4.32 @@ -834,7 +805,6 @@ org.jetbrains.kotlin:kotlin-scripting-jvm:1.6.20 org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.0 org.jetbrains.kotlin:kotlin-script-runtime:1.9.0 org.jetbrains.kotlin:kotlin-stdlib-common:1.2.71 -org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20 org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50 org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72 org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32 @@ -843,7 +813,6 @@ org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20 org.jetbrains.kotlin:kotlin-stdlib-common:1.7.22 org.jetbrains.kotlin:kotlin-stdlib-common:1.9.0 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.71 -org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.20 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32 @@ -852,7 +821,6 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.20 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.22 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.71 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.20 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32 @@ -861,7 +829,6 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.22 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 org.jetbrains.kotlin:kotlin-stdlib:1.1.3-2 org.jetbrains.kotlin:kotlin-stdlib:1.2.71 -org.jetbrains.kotlin:kotlin-stdlib:1.3.20 org.jetbrains.kotlin:kotlin-stdlib:1.3.50 org.jetbrains.kotlin:kotlin-stdlib:1.3.72 org.jetbrains.kotlin:kotlin-stdlib:1.4.32 diff --git a/nix/deps/gradle/deps.urls b/nix/deps/gradle/deps.urls index cba1f595887..a12be9dc5ef 100644 --- a/nix/deps/gradle/deps.urls +++ b/nix/deps/gradle/deps.urls @@ -62,7 +62,6 @@ https://dl.google.com/dl/android/maven2/androidx/core/core/1.7.0/core-1.7.0.pom https://dl.google.com/dl/android/maven2/androidx/cursoradapter/cursoradapter/1.0.0/cursoradapter-1.0.0.pom https://dl.google.com/dl/android/maven2/androidx/customview/customview/1.0.0/customview-1.0.0.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.2.1/databinding-common-3.2.1.pom -https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.3.1/databinding-common-3.3.1.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.5.4/databinding-common-3.5.4.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/4.1.0/databinding-common-4.1.0.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.0.4/databinding-common-7.0.4.pom @@ -70,7 +69,6 @@ https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/ https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.3.1/databinding-common-7.3.1.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.4.2/databinding-common-7.4.2.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.2.1/databinding-compiler-common-3.2.1.pom -https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.3.1/databinding-compiler-common-3.3.1.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.5.4/databinding-compiler-common-3.5.4.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/4.1.0/databinding-compiler-common-4.1.0.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/7.0.4/databinding-compiler-common-7.0.4.pom @@ -170,7 +168,6 @@ https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.0.0/run https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.0/baseLibrary-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.1/baseLibrary-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.2.1/baseLibrary-3.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.3.1/baseLibrary-3.3.1.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.5.4/baseLibrary-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/4.1.0/baseLibrary-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/7.0.4/baseLibrary-7.0.4.pom @@ -205,7 +202,6 @@ https://dl.google.com/dl/android/maven2/com/android/support/support-v4/26.0.2/su https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/26.0.2/support-vector-drawable-26.0.2.pom https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/27.0.1/support-vector-drawable-27.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.2.1/crash-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.3.1/crash-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.5.4/crash-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/27.1.0/crash-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/30.0.4/crash-30.0.4.pom @@ -215,7 +211,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/cras https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.0.0/protos-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.0.1/protos-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.2.1/protos-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.3.1/protos-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.5.4/protos-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/27.1.0/protos-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/30.0.4/protos-30.0.4.pom @@ -225,7 +220,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/prot https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.0.0/shared-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.0.1/shared-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.2.1/shared-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.3.1/shared-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.5.4/shared-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/27.1.0/shared-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/30.0.4/shared-30.0.4.pom @@ -235,7 +229,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shar https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.0.0/tracker-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.0.1/tracker-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.2.1/tracker-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.3.1/tracker-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.5.4/tracker-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/27.1.0/tracker-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/30.0.4/tracker-30.0.4.pom @@ -245,7 +238,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/trac https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.0/annotations-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.1/annotations-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.2.1/annotations-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.3.1/annotations-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.5.4/annotations-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/27.1.0/annotations-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/30.0.4/annotations-30.0.4.pom @@ -271,7 +263,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/aaptcompiler/7.4 https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.0/apksig-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.1/apksig-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.2.1/apksig-3.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.3.1/apksig-3.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.5.4/apksig-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/4.1.0/apksig-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.0.4/apksig-7.0.4.pom @@ -279,7 +270,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.2.1/apk https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.3.1/apksig-7.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.4.2/apksig-7.4.2.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.2.1/apkzlib-3.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.3.1/apkzlib-3.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.5.4/apkzlib-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/4.1.0/apkzlib-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/7.0.4/apkzlib-7.0.4.pom @@ -289,7 +279,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/7.4.2/ap https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.0.0/builder-model-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.0.1/builder-model-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.2.1/builder-model-3.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.3.1/builder-model-3.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.5.4/builder-model-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/4.1.0/builder-model-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/7.0.4/builder-model-7.0.4.pom @@ -299,7 +288,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/7. https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.0.0/builder-test-api-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.0.1/builder-test-api-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.2.1/builder-test-api-3.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.3.1/builder-test-api-3.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.5.4/builder-test-api-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/4.1.0/builder-test-api-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/7.0.4/builder-test-api-7.0.4.pom @@ -309,7 +297,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.0/builder-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.1/builder-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.2.1/builder-3.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.3.1/builder-3.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.5.4/builder-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/4.1.0/builder-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.0.4/builder-7.0.4.pom @@ -317,7 +304,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.2.1/bu https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.3.1/builder-7.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.4.2/builder-7.4.2.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.5.0/bundletool-0.5.0.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.6.0/bundletool-0.6.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.9.0/bundletool-0.9.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.14.0/bundletool-0.14.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.6.0/bundletool-1.6.0.pom @@ -327,7 +313,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.11. https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.0.0/gradle-api-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.0.1/gradle-api-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.2.1/gradle-api-3.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.3.1/gradle-api-3.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.5.4/gradle-api-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/4.1.0/gradle-api-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/7.0.4/gradle-api-7.0.4.pom @@ -340,7 +325,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-settings- https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.0/gradle-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.1/gradle-3.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.3.1/gradle-3.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.5.4/gradle-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/4.1.0/gradle-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.0.4/gradle-7.0.4.pom @@ -348,19 +332,16 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.2.1/gra https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.3.1/gradle-7.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.4.2/gradle-7.4.2.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-alpha10/jetifier-core-1.0.0-alpha10.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta02/jetifier-core-1.0.0-beta02.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta09/jetifier-core-1.0.0-beta09.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta10/jetifier-core-1.0.0-beta10.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-alpha10/jetifier-processor-1.0.0-alpha10.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta02/jetifier-processor-1.0.0-beta02.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta04/jetifier-processor-1.0.0-beta04.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta09/jetifier-processor-1.0.0-beta09.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta10/jetifier-processor-1.0.0-beta10.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.0.0/manifest-merger-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.0.1/manifest-merger-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.2.1/manifest-merger-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.3.1/manifest-merger-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.5.4/manifest-merger-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/27.1.0/manifest-merger-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/30.0.4/manifest-merger-30.0.4.pom @@ -370,7 +351,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/ https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.0/common-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.1/common-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/26.2.1/common-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/common/26.3.1/common-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/26.5.4/common-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/27.1.0/common-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/30.0.4/common-30.0.4.pom @@ -380,7 +360,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/common/30.4.2/common-3 https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.0/ddmlib-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.1/ddmlib-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.3.1/ddmlib-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.5.4/ddmlib-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/27.1.0/ddmlib-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/30.0.4/ddmlib-30.0.4.pom @@ -390,7 +369,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/30.4.2/ddm https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.0/dvlib-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.1/dvlib-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.3.1/dvlib-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.5.4/dvlib-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/27.1.0/dvlib-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/30.0.4/dvlib-30.0.4.pom @@ -407,7 +385,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetbrains https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.0.0/layoutlib-api-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.0.1/layoutlib-api-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.2.1/layoutlib-api-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.3.1/layoutlib-api-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.5.4/layoutlib-api-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/27.1.0/layoutlib-api-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/30.0.4/layoutlib-api-30.0.4.pom @@ -421,7 +398,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/26.0. https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/26.0.1/lint-checks-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/30.4.2/lint-checks-30.4.2.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.2.1/lint-gradle-api-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.3.1/lint-gradle-api-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.5.4/lint-gradle-api-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/27.1.0/lint-gradle-api-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/30.4.2/lint-gradle-30.4.2.pom @@ -440,7 +416,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/play-sdk-proto/30.4.2/ https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.0/repository-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.1/repository-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.2.1/repository-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.3.1/repository-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.5.4/repository-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/27.1.0/repository-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/30.0.4/repository-30.0.4.pom @@ -450,7 +425,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/repository/30.4.2/repo https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.0/sdklib-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.1/sdklib-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.3.1/sdklib-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.5.4/sdklib-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/27.1.0/sdklib-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/30.0.4/sdklib-30.0.4.pom @@ -460,7 +434,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/30.4.2/sdklib-3 https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.0/sdk-common-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.1/sdk-common-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.2.1/sdk-common-26.2.1.pom -https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.3.1/sdk-common-26.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.5.4/sdk-common-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/27.1.0/sdk-common-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/30.0.4/sdk-common-30.0.4.pom @@ -715,7 +688,6 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/17.0/guava-pa https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/22.0/guava-parent-22.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/23.0/guava-parent-23.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android.pom -https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-jre/guava-parent-26.0-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/27.0.1-jre/guava-parent-27.0.1-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/28.1-jre/guava-parent-28.1-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/29.0-jre/guava-parent-29.0-jre.pom @@ -728,7 +700,6 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava/17.0/guava-17.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/23.0/guava-23.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/26.0-android/guava-26.0-android.pom -https://repo.maven.apache.org/maven2/com/google/guava/guava/26.0-jre/guava-26.0-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/27.0.1-jre/guava-27.0.1-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/28.1-jre/guava-28.1-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/29.0-jre/guava-29.0-jre.pom @@ -913,13 +884,13 @@ https://repo.maven.apache.org/maven2/junit/junit/4.13.2/junit-4.13.2.pom https://repo.maven.apache.org/maven2/me/zhanghai/android/materialprogressbar/library/1.4.2/library-1.4.2.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.13/byte-buddy-agent-1.11.13.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.19/byte-buddy-agent-1.11.19.pom -https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.14.10/byte-buddy-agent-1.14.10.pom +https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.14.11/byte-buddy-agent-1.14.11.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.13/byte-buddy-parent-1.11.13.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.19/byte-buddy-parent-1.11.19.pom -https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.14.10/byte-buddy-parent-1.14.10.pom +https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.14.11/byte-buddy-parent-1.14.11.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.13/byte-buddy-1.11.13.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.19/byte-buddy-1.11.19.pom -https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.14.10/byte-buddy-1.14.10.pom +https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.14.11/byte-buddy-1.14.11.pom https://repo.maven.apache.org/maven2/net/java/dev/jna/jna-platform/5.6.0/jna-platform-5.6.0.pom https://repo.maven.apache.org/maven2/net/java/dev/jna/jna/5.6.0/jna-5.6.0.pom https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1.pom @@ -1167,7 +1138,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-project-model/1 https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-project-model/1.9.0/kotlin-project-model-1.9.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/kotlin-reflect-1.1.3-2.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotlin-reflect-1.2.0.pom -https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.72/kotlin-reflect-1.3.72.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.32/kotlin-reflect-1.4.32.pom @@ -1194,7 +1164,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.9.0/kotlin-script-runtime-1.9.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.71/kotlin-stdlib-common-1.2.71.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.0/kotlin-stdlib-common-1.3.0.pom -https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.31/kotlin-stdlib-common-1.3.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.50/kotlin-stdlib-common-1.3.50.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.60/kotlin-stdlib-common-1.3.60.pom @@ -1214,7 +1183,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1 https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.7.22/kotlin-stdlib-common-1.7.22.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.0/kotlin-stdlib-common-1.9.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.pom -https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50/kotlin-stdlib-jdk7-1.3.50.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.72/kotlin-stdlib-jdk7-1.3.72.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.10/kotlin-stdlib-jdk7-1.4.10.pom @@ -1227,7 +1195,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7 https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7.22/kotlin-stdlib-jdk7-1.7.22.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.0/kotlin-stdlib-jdk7-1.9.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/kotlin-stdlib-jdk8-1.2.71.pom -https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.50/kotlin-stdlib-jdk8-1.3.50.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.72/kotlin-stdlib-jdk8-1.3.72.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.10/kotlin-stdlib-jdk8-1.4.10.pom @@ -1243,7 +1210,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/ko https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.20/kotlin-stdlib-1.2.20.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotlin-stdlib-1.2.71.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.0/kotlin-stdlib-1.3.0.pom -https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotlin-stdlib-1.3.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotlin-stdlib-1.3.50.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.60/kotlin-stdlib-1.3.60.pom @@ -1288,7 +1254,7 @@ https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.po https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/2.1.0/stax-ex-2.1.0.pom https://repo.maven.apache.org/maven2/org/mockito/mockito-core/3.12.4/mockito-core-3.12.4.pom https://repo.maven.apache.org/maven2/org/mockito/mockito-core/4.0.0/mockito-core-4.0.0.pom -https://repo.maven.apache.org/maven2/org/mockito/mockito-core/5.8.0/mockito-core-5.8.0.pom +https://repo.maven.apache.org/maven2/org/mockito/mockito-core/5.9.0/mockito-core-5.9.0.pom https://repo.maven.apache.org/maven2/org/mockito/mockito-inline/4.0.0/mockito-inline-4.0.0.pom https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.2/objenesis-parent-3.2.pom https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.3/objenesis-parent-3.3.pom diff --git a/nix/deps/gradle/proj.list b/nix/deps/gradle/proj.list index e4d83e468c0..a4a422c090b 100644 --- a/nix/deps/gradle/proj.list +++ b/nix/deps/gradle/proj.list @@ -1,6 +1,7 @@ app react-native-async-storage_async-storage react-native-background-timer +react-native-biometrics react-native-blob-util react-native-blur react-native-camera-kit From 2fdd817e06562cd7c9160dc7d736a5fcf5704c66 Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Wed, 17 Jan 2024 13:01:13 +0200 Subject: [PATCH 13/19] chore: comment typo --- src/react_native/biometrics.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/react_native/biometrics.cljs b/src/react_native/biometrics.cljs index e7ebe43cadc..319262021f7 100644 --- a/src/react_native/biometrics.cljs +++ b/src/react_native/biometrics.cljs @@ -33,7 +33,7 @@ (.then (fn [result] (oops/oget result "available"))))) -;; NOTE: the react-native-biometry package error codes/messages differ across platforms. +;; NOTE: the react-native-biometrics package error codes/messages differ across platforms. ;; On android we get error messages while on iOS it's a stringified Obj-C error object. (defn- convert-auth-error-message [code] From 492080d9dc4ccdc52c2e66697c1b6fcb7a09d1e0 Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Wed, 17 Jan 2024 13:04:19 +0200 Subject: [PATCH 14/19] chore: replaced old lib in test mocks --- src/mocks/js_dependencies.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mocks/js_dependencies.cljs b/src/mocks/js_dependencies.cljs index d7321d50d9a..ec5d44576ea 100644 --- a/src/mocks/js_dependencies.cljs +++ b/src/mocks/js_dependencies.cljs @@ -391,7 +391,7 @@ "react-native-fetch-polyfill" fetch "react-native-status-keycard" status-keycard "react-native-keychain" keychain - "react-native-touch-id" touchid + "react-native-biometrics" react-native-biometrics "@react-native-community/netinfo" net-info "react-native-dialogs" dialogs "react-native" react-native From 22bd6555c776a663569e370e8911b8ead72fc687 Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Fri, 19 Jan 2024 10:54:56 +0200 Subject: [PATCH 15/19] fix: addressed review comments --- .clj-kondo/funcool/promesa/config.edn | 9 +++++ src/react_native/biometrics.cljs | 47 +++++++++++----------- src/status_im/common/biometric/events.cljs | 8 ++-- 3 files changed, 35 insertions(+), 29 deletions(-) create mode 100644 .clj-kondo/funcool/promesa/config.edn diff --git a/.clj-kondo/funcool/promesa/config.edn b/.clj-kondo/funcool/promesa/config.edn new file mode 100644 index 00000000000..1844f77c5a6 --- /dev/null +++ b/.clj-kondo/funcool/promesa/config.edn @@ -0,0 +1,9 @@ +{:lint-as {promesa.core/-> clojure.core/-> + promesa.core/->> clojure.core/->> + promesa.core/as-> clojure.core/as-> + promesa.core/let clojure.core/let + promesa.core/plet clojure.core/let + promesa.core/loop clojure.core/loop + promesa.core/recur clojure.core/recur + promesa.core/with-redefs clojure.core/with-redefs + promesa.core/doseq clojure.core/doseq}} diff --git a/src/react_native/biometrics.cljs b/src/react_native/biometrics.cljs index 319262021f7..db12a97462e 100644 --- a/src/react_native/biometrics.cljs +++ b/src/react_native/biometrics.cljs @@ -1,13 +1,14 @@ (ns react-native.biometrics (:require - ["react-native-biometrics" :default biometrics] + ["react-native-biometrics" :default Biometrics] [clojure.string :as string] [oops.core :as oops] [react-native.platform :as platform] [schema.core :as schema])) -(def ^:const biometric-error-not-available "biometric-not-available") -(def ^:const biometric-error-not-enrolled "biometric-not-enrolled") +(def ^:private ^:const android-not-available-error-message "Biometric hardware unavailable") +(def ^:private ^:const android-not-enrolled-error-message "No fingerprints enrolled.") +(def ^:private ^:const ios-not-enrolled-error-message "No identities are enrolled") (defn get-supported-type "Returns a JS promise that resolves with the biometrics types supported by the @@ -15,55 +16,53 @@ Resolved values: `:Biometrics` `:FaceID` `:TouchID`" [] - (-> (biometrics.) + (-> (Biometrics.) (.isSensorAvailable) (.then (fn [result] - (let [type (-> result - (oops/oget "biometryType") - keyword)] - type))) + (-> result + (oops/oget :biometryType) + keyword))) (.catch (constantly nil)))) (defn get-available "Returns a JS promise that resolves to a boolean, which signifies whether biometrics is enabled/disabled on the device." [] - (-> (biometrics.) + (-> (Biometrics.) (.isSensorAvailable) (.then (fn [result] - (oops/oget result "available"))))) + (oops/oget result :available))))) ;; NOTE: the react-native-biometrics package error codes/messages differ across platforms. ;; On android we get error messages while on iOS it's a stringified Obj-C error object. (defn- convert-auth-error-message - [code] - (letfn [(includes? [substring string] - (string/includes? string substring))] - (if platform/android? - (condp = code - "No fingerprints enrolled." biometric-error-not-enrolled - "Biometric hardware unavailable" biometric-error-not-available - code) + [message] + (ex-info "Failed to authenticate with biometrics" + {:orig-error-message message + :code (if platform/android? + (condp = message + android-not-enrolled-error-message ::not-enrolled + android-not-available-error-message ::not-available + ::unknown) - (condp includes? code - "No identities are enrolled" biometric-error-not-enrolled - code)))) + (condp #(string/includes? %2 %1) message + ios-not-enrolled-error-message ::not-enrolled + ::unknown))})) (defn authenticate "Returns a JS promise that resolves with a boolean auth success state: `true` for success and `false` when canceled by user." [{:keys [prompt-message fallback-prompt-message cancel-button-text]}] - (-> (biometrics.) + (-> (Biometrics.) (.simplePrompt #js {"promptMessage" prompt-message "fallbackPromptMessage" fallback-prompt-message "cancelButtonText" cancel-button-text}) (.then (fn [result] - (-> result js->clj (get "success")))) + (oops/oget result :success))) (.catch (fn [error] (-> (.-message error) convert-auth-error-message - js/Error throw))))) (schema/=> authenticate diff --git a/src/status_im/common/biometric/events.cljs b/src/status_im/common/biometric/events.cljs index 3c7dcbc2b6e..705ee59897c 100644 --- a/src/status_im/common/biometric/events.cljs +++ b/src/status_im/common/biometric/events.cljs @@ -45,8 +45,8 @@ (rf/defn show-message {:events [:biometric/show-message]} [_ code] - (let [content (if (#{biometrics/biometric-error-not-available - biometrics/biometric-error-not-enrolled} + (let [content (if (#{::biometrics/not-enrolled + ::biometrics/not-available} code) (i18n/label :t/grant-face-id-permissions) (i18n/label :t/biometric-auth-error {:code code}))] @@ -68,9 +68,7 @@ (on-success)))) (.catch (fn [err] (when on-fail - (-> err - (.-message) - (on-fail)))))))) + (-> err ex-data :code on-fail))))))) (rf/defn authenticate {:events [:biometric/authenticate]} From 0bbdac20afd7ec9d8ece98c8803e015d60c7fae5 Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Fri, 19 Jan 2024 11:42:37 +0200 Subject: [PATCH 16/19] fix: using event for standard-auth biometrics --- .../standard_auth/authorize.cljs | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/status_im/common/standard_authentication/standard_auth/authorize.cljs b/src/status_im/common/standard_authentication/standard_auth/authorize.cljs index 9370a00ffc0..53198fda283 100644 --- a/src/status_im/common/standard_authentication/standard_auth/authorize.cljs +++ b/src/status_im/common/standard_authentication/standard_auth/authorize.cljs @@ -39,20 +39,21 @@ ; to retrigger biometric auth, so they can endlessly repeat this cycle. biometrics-login (fn [on-press-biometrics] (rf/dispatch [:dismiss-keyboard]) - (biometrics/authenticate - {:prompt-message (i18n/label :t/biometric-auth-confirm-message) - :on-success (fn [not-canceled?] - (on-close) - (when not-canceled? - (rf/dispatch [:standard-auth/on-biometric-success - (handle-auth-success true)]))) - :on-fail (fn [error] - (on-close) - (log/error "Authentication Failed. Error:" error) - (when on-auth-fail (on-auth-fail error)) - (password-login {:on-press-biometrics - #(on-press-biometrics - on-press-biometrics)}))}))] + (rf/dispatch + [:biometric/authenticate + {:prompt-message (i18n/label :t/biometric-auth-confirm-message) + :on-success (fn [not-canceled?] + (on-close) + (when not-canceled? + (rf/dispatch [:standard-auth/on-biometric-success + (handle-auth-success true)]))) + :on-fail (fn [error] + (on-close) + (log/error "Authentication Failed. Error:" error) + (when on-auth-fail (on-auth-fail error)) + (password-login {:on-press-biometrics + #(on-press-biometrics + on-press-biometrics)}))}]))] (if biometric-auth? (-> (biometrics/get-supported-type) (.then (fn [biometric-type] From e235541b1ac48d13b2b06c31c13835c61ad76f2c Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Fri, 19 Jan 2024 11:43:34 +0200 Subject: [PATCH 17/19] ref: using ex-cause for biometric error codes --- src/react_native/biometrics.cljs | 21 ++++++++++--------- src/status_im/common/biometric/events.cljs | 7 ++++--- .../standard_auth/authorize.cljs | 4 +++- .../contexts/profile/login/events.cljs | 10 ++++++--- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/react_native/biometrics.cljs b/src/react_native/biometrics.cljs index db12a97462e..0e46c6eaa79 100644 --- a/src/react_native/biometrics.cljs +++ b/src/react_native/biometrics.cljs @@ -37,17 +37,18 @@ ;; On android we get error messages while on iOS it's a stringified Obj-C error object. (defn- convert-auth-error-message [message] - (ex-info "Failed to authenticate with biometrics" - {:orig-error-message message - :code (if platform/android? - (condp = message - android-not-enrolled-error-message ::not-enrolled - android-not-available-error-message ::not-available - ::unknown) + (let [cause (if platform/android? + (condp = message + android-not-enrolled-error-message ::not-enrolled + android-not-available-error-message ::not-available + ::unknown) - (condp #(string/includes? %2 %1) message - ios-not-enrolled-error-message ::not-enrolled - ::unknown))})) + (condp #(string/includes? %2 %1) message + ios-not-enrolled-error-message ::not-enrolled + ::unknown))] + (ex-info "Failed to authenticate with biometrics" + {:orig-error-message message} + cause))) (defn authenticate "Returns a JS promise that resolves with a boolean auth success state: `true` for diff --git a/src/status_im/common/biometric/events.cljs b/src/status_im/common/biometric/events.cljs index 705ee59897c..ab2c3a5d937 100644 --- a/src/status_im/common/biometric/events.cljs +++ b/src/status_im/common/biometric/events.cljs @@ -44,8 +44,9 @@ (rf/defn show-message {:events [:biometric/show-message]} - [_ code] - (let [content (if (#{::biometrics/not-enrolled + [_ error] + (let [code (ex-cause error) + content (if (#{::biometrics/not-enrolled ::biometrics/not-available} code) (i18n/label :t/grant-face-id-permissions) @@ -68,7 +69,7 @@ (on-success)))) (.catch (fn [err] (when on-fail - (-> err ex-data :code on-fail))))))) + (on-fail err))))))) (rf/defn authenticate {:events [:biometric/authenticate]} diff --git a/src/status_im/common/standard_authentication/standard_auth/authorize.cljs b/src/status_im/common/standard_authentication/standard_auth/authorize.cljs index 53198fda283..6193fec476c 100644 --- a/src/status_im/common/standard_authentication/standard_auth/authorize.cljs +++ b/src/status_im/common/standard_authentication/standard_auth/authorize.cljs @@ -49,7 +49,9 @@ (handle-auth-success true)]))) :on-fail (fn [error] (on-close) - (log/error "Authentication Failed. Error:" error) + (log/error + (ex-message error) + (-> error ex-data (assoc :code (ex-cause error)))) (when on-auth-fail (on-auth-fail error)) (password-login {:on-press-biometrics #(on-press-biometrics diff --git a/src/status_im/contexts/profile/login/events.cljs b/src/status_im/contexts/profile/login/events.cljs index c1dd2bbd34b..aad293b4070 100644 --- a/src/status_im/contexts/profile/login/events.cljs +++ b/src/status_im/contexts/profile/login/events.cljs @@ -212,9 +212,13 @@ (rf/reg-event-fx :profile.login/biometric-auth-fail - (fn [_ [code]] - {:dispatch [:biometric/show-message code]})) - + (fn [_ [error]] + (log/error (ex-message error) + (-> error + ex-data + (assoc :code (ex-cause error) + :event :profile.login/biometric-auth-fail))) + {:dispatch [:biometric/show-message error]})) (rf/defn verify-database-password {:events [:profile.login/verify-database-password]} From 108d67f759a12f51ee15695c0fb59fd9c955e79f Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Mon, 22 Jan 2024 10:14:37 +0200 Subject: [PATCH 18/19] fix: removed promesa changes --- .clj-kondo/funcool/promesa/config.edn | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 .clj-kondo/funcool/promesa/config.edn diff --git a/.clj-kondo/funcool/promesa/config.edn b/.clj-kondo/funcool/promesa/config.edn deleted file mode 100644 index 1844f77c5a6..00000000000 --- a/.clj-kondo/funcool/promesa/config.edn +++ /dev/null @@ -1,9 +0,0 @@ -{:lint-as {promesa.core/-> clojure.core/-> - promesa.core/->> clojure.core/->> - promesa.core/as-> clojure.core/as-> - promesa.core/let clojure.core/let - promesa.core/plet clojure.core/let - promesa.core/loop clojure.core/loop - promesa.core/recur clojure.core/recur - promesa.core/with-redefs clojure.core/with-redefs - promesa.core/doseq clojure.core/doseq}} From a571cf1ea76bf2b7d839ac7da24f7dd50280d3ce Mon Sep 17 00:00:00 2001 From: Lungu Cristian Date: Thu, 25 Jan 2024 13:06:12 +0200 Subject: [PATCH 19/19] fix: auth slide biometric success not triggered --- .../standard_authentication/standard_auth/authorize.cljs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/status_im/common/standard_authentication/standard_auth/authorize.cljs b/src/status_im/common/standard_authentication/standard_auth/authorize.cljs index 6193fec476c..b2bda80df8b 100644 --- a/src/status_im/common/standard_authentication/standard_auth/authorize.cljs +++ b/src/status_im/common/standard_authentication/standard_auth/authorize.cljs @@ -42,11 +42,10 @@ (rf/dispatch [:biometric/authenticate {:prompt-message (i18n/label :t/biometric-auth-confirm-message) - :on-success (fn [not-canceled?] + :on-success (fn [] (on-close) - (when not-canceled? - (rf/dispatch [:standard-auth/on-biometric-success - (handle-auth-success true)]))) + (rf/dispatch [:standard-auth/on-biometric-success + (handle-auth-success true)])) :on-fail (fn [error] (on-close) (log/error