Use new RPC endpoints to fetch and count unread notifications (#15245)

There are endpoint changes in the status-go PR #3237
https://github.com/status-im/status-go/pull/3237) that will cause breakage in
the Mobile & Desktop clients. The Desktop team has already implemented the
changes and is waiting for Mobile to do the same.

The new endpoints are generally better, more ergonomic to use. There's also a
new endpoint to allow fetching multiple unread counters for all types of
notifications so we can finally remove the dreadful workaround in mobile calling
`status-go` 10+ times in a row.

- Fixes https://github.com/status-im/status-mobile/issues/15119
- Fixes https://github.com/status-im/status-mobile/issues/15229
This commit is contained in:
Icaro Motta 2023-03-03 12:43:41 -03:00 committed by GitHub
parent 064204256e
commit 1f1ab30a4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 77 additions and 170 deletions

View File

@ -13,6 +13,16 @@
(and (= type notification-types/contact-request) (and (= type notification-types/contact-request)
(= contact-id author))) (= contact-id author)))
(defn parse-notification-counts-response
[response]
(reduce-kv (fn [acc k count-number]
(let [maybe-type (js/parseInt (name k) 10)]
(if (notification-types/all-supported maybe-type)
(assoc acc maybe-type count-number)
acc)))
{}
response))
(defn- rpc->type (defn- rpc->type
[{:keys [type name] :as chat}] [{:keys [type name] :as chat}]
(case type (case type

View File

@ -107,3 +107,23 @@
"contact-id" "contact-id"
{:type notification-types/contact-request {:type notification-types/contact-request
:author "contactzzzz"})))) :author "contactzzzz"}))))
(deftest parse-notification-counts-response-test
(is
(= {notification-types/one-to-one-chat 15
notification-types/private-group-chat 16
notification-types/mention 17
notification-types/reply 18
notification-types/contact-request 19
notification-types/admin 20
notification-types/contact-verification 21}
(store/parse-notification-counts-response
{(keyword (str notification-types/one-to-one-chat)) 15
(keyword (str notification-types/private-group-chat)) 16
(keyword (str notification-types/mention)) 17
(keyword (str notification-types/reply)) 18
(keyword (str notification-types/contact-request)) 19
(keyword (str notification-types/admin)) 20
(keyword (str notification-types/contact-verification)) 21
;; Unsupported type in the response is ignored
:999 100}))))

View File

@ -327,6 +327,9 @@
(def ^:const status-unread 2) (def ^:const status-unread 2)
(def ^:const status-all 3) (def ^:const status-all 3)
(def ^:const read-type-read 1)
(def ^:const read-type-unread 2)
(def ^:const read-type-all 3)
(defn status (defn status
[filter-status] [filter-status]
@ -335,6 +338,15 @@
:all status-all :all status-all
99)) 99))
(defn ->rpc-read-type
[read-type]
(case read-type
:read read-type-read
:unread read-type-unread
:all read-type-all
;; Send invalid type, so the backend fails fast.
-1))
(defn filter-type->rpc-param (defn filter-type->rpc-param
[filter-type] [filter-type]
(cond (cond
@ -353,15 +365,13 @@
(rf/defn notifications-fetch (rf/defn notifications-fetch
[{:keys [db]} {:keys [cursor per-page filter-type filter-status reset-data?]}] [{:keys [db]} {:keys [cursor per-page filter-type filter-status reset-data?]}]
(when-not (get-in db [:activity-center :loading?]) (when-not (get-in db [:activity-center :loading?])
(let [per-page (or per-page (defaults :notifications-per-page)) (let [per-page (or per-page (defaults :notifications-per-page))]
accepted? true]
{:db (assoc-in db [:activity-center :loading?] true) {:db (assoc-in db [:activity-center :loading?] true)
:json-rpc/call [{:method "wakuext_activityCenterNotificationsBy" :json-rpc/call [{:method "wakuext_activityCenterNotifications"
:params [cursor :params [{:cursor cursor
per-page :limit per-page
(filter-type->rpc-param filter-type) :activityTypes (filter-type->rpc-param filter-type)
(status filter-status) :readType (->rpc-read-type filter-status)}]
accepted?]
:on-success #(rf/dispatch [:activity-center.notifications/fetch-success :on-success #(rf/dispatch [:activity-center.notifications/fetch-success
reset-data? %]) reset-data? %])
:on-error #(rf/dispatch [:activity-center.notifications/fetch-error :on-error #(rf/dispatch [:activity-center.notifications/fetch-error
@ -421,19 +431,16 @@
to explicitly support fetching notifications for 'pending' contact requests." to explicitly support fetching notifications for 'pending' contact requests."
{:events [:activity-center.notifications/fetch-pending-contact-requests]} {:events [:activity-center.notifications/fetch-pending-contact-requests]}
[{:keys [db]}] [{:keys [db]}]
(let [accepted? true] {:db (assoc-in db [:activity-center :loading?] true)
{:db (assoc-in db [:activity-center :loading?] true) :json-rpc/call
:json-rpc/call [{:method "wakuext_activityCenterNotifications"
[{:method "wakuext_activityCenterNotificationsBy" :params [{:cursor start-or-end-cursor
:params [start-or-end-cursor :limit 20
20 :activityTypes [types/contact-request]
[types/contact-request] :readType (->rpc-read-type :unread)}]
(status :unread) :on-success #(rf/dispatch [:activity-center.notifications/fetch-pending-contact-requests-success %])
accepted?] :on-error #(rf/dispatch [:activity-center.notifications/fetch-error types/contact-request :unread
:on-success #(rf/dispatch [:activity-center.notifications/fetch-pending-contact-requests-success %])}]})
%])
:on-error #(rf/dispatch [:activity-center.notifications/fetch-error
types/contact-request :unread %])}]}))
(rf/defn notifications-fetch-pending-contact-requests-success (rf/defn notifications-fetch-pending-contact-requests-success
{:events [:activity-center.notifications/fetch-pending-contact-requests-success]} {:events [:activity-center.notifications/fetch-pending-contact-requests-success]}
@ -458,24 +465,19 @@
(rf/defn notifications-fetch-unread-count (rf/defn notifications-fetch-unread-count
{:events [:activity-center.notifications/fetch-unread-count]} {:events [:activity-center.notifications/fetch-unread-count]}
[_] [_]
{:dispatch-n (mapv (fn [notification-type] {:json-rpc/call
[:activity-center.notifications/fetch-unread-count-for-type notification-type]) [{:method "wakuext_activityCenterNotificationsCount"
types/all-supported)}) :params [{:activityTypes types/all-supported
:readType (->rpc-read-type :unread)}]
(rf/defn notifications-fetch-unread-count-for-type :on-success #(rf/dispatch [:activity-center.notifications/fetch-unread-count-success %])
{:events [:activity-center.notifications/fetch-unread-count-for-type]} :on-error #(rf/dispatch [:activity-center.notifications/fetch-unread-count-error %])}]})
[_ notification-type]
{:json-rpc/call [{:method "wakuext_unreadAndAcceptedActivityCenterNotificationsCount"
:params [[notification-type]]
:on-success #(rf/dispatch [:activity-center.notifications/fetch-unread-count-success
notification-type %])
:on-error #(rf/dispatch [:activity-center.notifications/fetch-unread-count-error
%])}]})
(rf/defn notifications-fetch-unread-count-success (rf/defn notifications-fetch-unread-count-success
{:events [:activity-center.notifications/fetch-unread-count-success]} {:events [:activity-center.notifications/fetch-unread-count-success]}
[{:keys [db]} notification-type result] [{:keys [db]} response]
{:db (assoc-in db [:activity-center :unread-counts-by-type notification-type] result)}) {:db (assoc-in db
[:activity-center :unread-counts-by-type]
(activities/parse-notification-counts-response response))})
(rf/defn notifications-fetch-unread-count-error (rf/defn notifications-fetch-unread-count-error
{:events [:activity-center.notifications/fetch-unread-count-error]} {:events [:activity-center.notifications/fetch-unread-count-error]}

View File

@ -461,7 +461,7 @@
{:filter-type types/one-to-one-chat}]) {:filter-type types/one-to-one-chat}])
(is (= :unread (get-in (h/db) [:activity-center :filter :status]))) (is (= :unread (get-in (h/db) [:activity-center :filter :status])))
(is (= "" (get-in @spy-queue [0 :args 0 :params 0])) (is (= "" (get-in @spy-queue [0 :args 0 :params 0 :cursor]))
"Should be called with empty cursor when fetching first page") "Should be called with empty cursor when fetching first page")
(is (= "10" (get-in (h/db) [:activity-center :cursor]))) (is (= "10" (get-in (h/db) [:activity-center :cursor])))
(is (= [{:chat-id "0x9" (is (= [{:chat-id "0x9"
@ -506,8 +506,7 @@
(rf/dispatch [:activity-center.notifications/fetch-next-page]) (rf/dispatch [:activity-center.notifications/fetch-next-page])
(is (= "wakuext_activityCenterNotificationsBy" (get-in @spy-queue [0 :args 0 :method]))) (is (= "10" (get-in @spy-queue [0 :args 0 :params 0 :cursor]))
(is (= "10" (get-in @spy-queue [0 :args 0 :params 0]))
"Should be called with current cursor") "Should be called with current cursor")
(is (= "" (get-in (h/db) [:activity-center :cursor]))) (is (= "" (get-in (h/db) [:activity-center :cursor])))
(is (= [{:chat-id "0x9" (is (= [{:chat-id "0x9"
@ -540,32 +539,3 @@
:unread :unread
:fake-error] :fake-error]
(:args (last @spy-queue)))))))) (:args (last @spy-queue))))))))
(deftest notifications-fetch-unread-count-test
(testing "fetches total notification count and store in db"
(h/run-test-sync
(setup)
(let [spy-queue (atom [])]
(h/stub-fx-with-callbacks :json-rpc/call
:on-success
(fn [{:keys [params]}]
(if (= types/mention (ffirst params))
9
0)))
(h/spy-fx spy-queue :json-rpc/call)
(rf/dispatch [:activity-center.notifications/fetch-unread-count])
(is (= "wakuext_unreadAndAcceptedActivityCenterNotificationsCount"
(get-in @spy-queue [0 :args 0 :method])))
(let [actual (get-in (h/db) [:activity-center :unread-counts-by-type])]
(is (= {types/one-to-one-chat 0
types/private-group-chat 0
types/contact-verification 0
types/contact-request 0
types/mention 9
types/reply 0
types/admin 0}
actual))
(is (= types/all-supported (set (keys actual)))))))))

View File

@ -3,7 +3,7 @@
"_comment": "Instead use: scripts/update-status-go.sh <rev>", "_comment": "Instead use: scripts/update-status-go.sh <rev>",
"owner": "status-im", "owner": "status-im",
"repo": "status-go", "repo": "status-go",
"version": "v0.135.2", "version": "v0.136.0",
"commit-sha1": "6cdc0ed5a191f486b748b7f501ec78280ac61dfc", "commit-sha1": "ebc1fc337c07b10c9c4a5caab8dae2c540ef54a1",
"src-sha256": "1szxms3q5v0p5xnmvi96z5s8pxdnxgqzmq23jildchcrl16kqvc2" "src-sha256": "1fcv61k24zpp1cx6d9m7hn2zi5vbzqmfqz6r8l1dn5b09h3323a0"
} }

103
yarn.lock
View File

@ -2222,27 +2222,6 @@
dependencies: dependencies:
"@types/yargs-parser" "*" "@types/yargs-parser" "*"
"@walletconnect/browser-utils@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.7.1.tgz#2a28846cd4d73166debbbf7d470e78ba25616f5e"
integrity sha512-y6KvxPhi52sWzS0/HtA3EhdgmtG8mXcxdc26YURDOVC/BJh3MxV8E16JFrT4InylOqYJs6dcSLWVfcnJaiPtZw==
dependencies:
"@walletconnect/safe-json" "1.0.0"
"@walletconnect/types" "^1.7.1"
"@walletconnect/window-getters" "1.0.0"
"@walletconnect/window-metadata" "1.0.0"
detect-browser "5.2.0"
"@walletconnect/client-legacy@npm:@walletconnect/client@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.7.1.tgz#aaa74199bdc0605db9ac2ecdf8a463b271586d3b"
integrity sha512-xD8B8s1hL7Z5vJwb3L0u1bCVAk6cRQfIY9ycymf7KkmIhkAONQJNf2Y0C0xIpbPp2fdn9VwnSfLm5Ed/Ht/1IA==
dependencies:
"@walletconnect/core" "^1.7.1"
"@walletconnect/iso-crypto" "^1.7.1"
"@walletconnect/types" "^1.7.1"
"@walletconnect/utils" "^1.7.1"
"@walletconnect/client@^2.0.0-beta.23": "@walletconnect/client@^2.0.0-beta.23":
version "2.0.0-beta.23" version "2.0.0-beta.23"
resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-2.0.0-beta.23.tgz#934f91beb66ec7bb1a79afc1973fcd48481ccbc5" resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-2.0.0-beta.23.tgz#934f91beb66ec7bb1a79afc1973fcd48481ccbc5"
@ -2259,15 +2238,6 @@
"@walletconnect/utils" "^2.0.0-beta.23" "@walletconnect/utils" "^2.0.0-beta.23"
ws "^8.3.0" ws "^8.3.0"
"@walletconnect/core@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.7.1.tgz#321c14d63af81241658b028022e0e5fa6dc7f374"
integrity sha512-qO+4wykyRNiq3HEuaAA2pW2PDnMM4y7pyPAgiCwfHiqF4PpWvtcdB301hI0K5am9ghuqKZMy1HlE9LWNOEBvcw==
dependencies:
"@walletconnect/socket-transport" "^1.7.1"
"@walletconnect/types" "^1.7.1"
"@walletconnect/utils" "^1.7.1"
"@walletconnect/crypto@^1.0.1": "@walletconnect/crypto@^1.0.1":
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.1.tgz#d4c1b1cd5dd1be88fe9a82dfc54cadbbb3f9d325" resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.1.tgz#d4c1b1cd5dd1be88fe9a82dfc54cadbbb3f9d325"
@ -2301,15 +2271,6 @@
resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.0.tgz#c4545869fa9c389ec88c364e1a5f8178e8ab5034" resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.0.tgz#c4545869fa9c389ec88c364e1a5f8178e8ab5034"
integrity sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ== integrity sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ==
"@walletconnect/iso-crypto@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.7.1.tgz#c463bb5874686c2f21344e2c7f3cf4d71c34ca70"
integrity sha512-qMiW0kLN6KCjnLMD50ijIj1lQqjNjGszGUwrSVUiS2/Dp4Ecx+4QEtHbmVwGEkfx4kelYPFpDJV3ZJpQ4Kqg/g==
dependencies:
"@walletconnect/crypto" "^1.0.1"
"@walletconnect/types" "^1.7.1"
"@walletconnect/utils" "^1.7.1"
"@walletconnect/jsonrpc-provider@^1.0.0": "@walletconnect/jsonrpc-provider@^1.0.0":
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.0.tgz#066ee5a8a8554c55ea68f9ebf6fe8f96cdb66e7e" resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.0.tgz#066ee5a8a8554c55ea68f9ebf6fe8f96cdb66e7e"
@ -2365,25 +2326,11 @@
dependencies: dependencies:
"@walletconnect/jsonrpc-types" "^1.0.0" "@walletconnect/jsonrpc-types" "^1.0.0"
"@walletconnect/safe-json@1.0.0", "@walletconnect/safe-json@^1.0.0": "@walletconnect/safe-json@^1.0.0":
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2" resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2"
integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg== integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==
"@walletconnect/socket-transport@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.7.1.tgz#cc4c8dcf21c40b805812ecb066b2abb156fdb146"
integrity sha512-Gu1RPro0eLe+HHtLhq/1T5TNFfO/HW2z3BnWuUYuJ/F8w1U9iK7+4LMHe+LTgwgWy9Ybcb2k0tiO5e3LgjHBHQ==
dependencies:
"@walletconnect/types" "^1.7.1"
"@walletconnect/utils" "^1.7.1"
ws "7.5.3"
"@walletconnect/types@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.7.1.tgz#86cc3832e02415dc9f518f3dcb5366722afbfc03"
integrity sha512-X0NunEUgq46ExDcKo7BnnFpFhuZ89bZ04/1FtohNziBWcP2Mblp2yf+FN7iwmZiuZ3bRTb8J1O4oJH2JGP9I7A==
"@walletconnect/types@^2.0.0-beta.23": "@walletconnect/types@^2.0.0-beta.23":
version "2.0.0-beta.23" version "2.0.0-beta.23"
resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.0.0-beta.23.tgz#3adf5c8329b7807d8c8d4aa1419e470eab72445c" resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.0.0-beta.23.tgz#3adf5c8329b7807d8c8d4aa1419e470eab72445c"
@ -2394,19 +2341,6 @@
pino "^6.7.0" pino "^6.7.0"
pino-pretty "^4.3.0" pino-pretty "^4.3.0"
"@walletconnect/utils@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.7.1.tgz#f858d5f22425a4c2da2a28ae493bde7f2eecf815"
integrity sha512-7Lig9rruqTMaFuwEhBrArq1QgzIf2NuzO6J3sCUYCZh60EQ7uIZjekaDonQjiQJAbfYcgWUBm8qa0PG1TzYN3Q==
dependencies:
"@walletconnect/browser-utils" "^1.7.1"
"@walletconnect/encoding" "^1.0.0"
"@walletconnect/jsonrpc-utils" "^1.0.0"
"@walletconnect/types" "^1.7.1"
bn.js "4.11.8"
js-sha3 "0.8.0"
query-string "6.13.5"
"@walletconnect/utils@^2.0.0-beta.23": "@walletconnect/utils@^2.0.0-beta.23":
version "2.0.0-beta.23" version "2.0.0-beta.23"
resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.0.0-beta.23.tgz#005e4409a7014a66dda30389e4b1f31d186ebd0e" resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.0.0-beta.23.tgz#005e4409a7014a66dda30389e4b1f31d186ebd0e"
@ -2424,12 +2358,12 @@
lodash.union "^4.6.0" lodash.union "^4.6.0"
query-string "^6.13.5" query-string "^6.13.5"
"@walletconnect/window-getters@1.0.0", "@walletconnect/window-getters@^1.0.0": "@walletconnect/window-getters@^1.0.0":
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8" resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8"
integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA== integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==
"@walletconnect/window-metadata@1.0.0", "@walletconnect/window-metadata@^1.0.0": "@walletconnect/window-metadata@^1.0.0":
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz#93b1cc685e6b9b202f29c26be550fde97800c4e5" resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz#93b1cc685e6b9b202f29c26be550fde97800c4e5"
integrity sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA== integrity sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==
@ -3157,11 +3091,6 @@ bluebird@^3.5.4:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
bn.js@4.11.8:
version "4.11.8"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
version "4.11.9" version "4.11.9"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
@ -4320,11 +4249,6 @@ destroy@~1.0.4:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
detect-browser@5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.2.0.tgz#c9cd5afa96a6a19fda0bbe9e9be48a6b6e1e9c97"
integrity sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==
detect-libc@^1.0.3: detect-libc@^1.0.3:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
@ -7138,11 +7062,6 @@ js-levenshtein@^1.1.3:
resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
js-sha3@0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@ -9308,15 +9227,6 @@ qs@~6.5.2:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
query-string@6.13.5:
version "6.13.5"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.5.tgz#99e95e2fb7021db90a6f373f990c0c814b3812d8"
integrity sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q==
dependencies:
decode-uri-component "^0.2.0"
split-on-first "^1.0.0"
strict-uri-encode "^2.0.0"
query-string@^6.13.5: query-string@^6.13.5:
version "6.14.1" version "6.14.1"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a"
@ -9632,7 +9542,7 @@ react-native-share@^7.0.1:
integrity sha512-hq7nOirgih/zIF9UU9FuYKZ3NGvasu2c/eJesvyPKYiykTtgQZM+mvDwFk/ogEsGwRtTPJBtj8/6IyIFcGa7lw== integrity sha512-hq7nOirgih/zIF9UU9FuYKZ3NGvasu2c/eJesvyPKYiykTtgQZM+mvDwFk/ogEsGwRtTPJBtj8/6IyIFcGa7lw==
"react-native-status-keycard@git+https://github.com/status-im/react-native-status-keycard.git#refs/tags/v2.5.39": "react-native-status-keycard@git+https://github.com/status-im/react-native-status-keycard.git#refs/tags/v2.5.39":
version "2.5.38" version "2.5.39"
resolved "git+https://github.com/status-im/react-native-status-keycard.git#93dd64754e676172310e6ea7187cc49f2dc013c6" resolved "git+https://github.com/status-im/react-native-status-keycard.git#93dd64754e676172310e6ea7187cc49f2dc013c6"
react-native-svg@^9.8.4: react-native-svg@^9.8.4:
@ -11771,11 +11681,6 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2" signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5" typedarray-to-buffer "^3.1.5"
ws@7.5.3:
version "7.5.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74"
integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==
ws@^1.1.0, ws@^1.1.5: ws@^1.1.0, ws@^1.1.5:
version "1.1.5" version "1.1.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"