diff --git a/android/app/build.gradle b/android/app/build.gradle
index c96bb5dcd..99cf7fc48 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,5 +1,6 @@
apply plugin: "com.android.application"
apply plugin: "com.facebook.react"
+apply plugin: "com.google.gms.google-services"
// Blixt:
apply plugin: "com.google.protobuf"
@@ -185,6 +186,7 @@ android {
}
dependencies {
+ implementation platform('com.google.firebase:firebase-bom:32.6.0')
// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")
diff --git a/android/app/src/chainregtest/google-services.json b/android/app/src/chainregtest/google-services.json
index 7f881c5c8..92d161e41 100644
--- a/android/app/src/chainregtest/google-services.json
+++ b/android/app/src/chainregtest/google-services.json
@@ -1,78 +1,151 @@
{
"project_info": {
- "project_number": "123456789",
- "firebase_url": "https://phonyblixt.firebaseio.com",
- "project_id": "phony-blixt-wallet",
- "storage_bucket": "phony-blixt-wallet.appspot.com"
+ "project_number": "349959255310",
+ "firebase_url": "https://blixt-wallet.firebaseio.com",
+ "project_id": "blixt-wallet",
+ "storage_bucket": "blixt-wallet.appspot.com"
},
- "client": [{
- "client_info": {
- "mobilesdk_app_id": "1:123465798:android:123465798123",
- "android_client_info": {
- "package_name": "com.blixtwallet.regtest.debug"
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:349959255310:android:674d8ca658d8468d59d35f",
+ "android_client_info": {
+ "package_name": "com.blixtwallet"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "349959255310-oa9ogtk6vp969jmbeg1hdodt3cp78a9g.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "com.blixtwallet",
+ "certificate_hash": "b8c178ee58a694507442dbe627f5343addb4c5bb"
+ }
+ },
+ {
+ "client_id": "349959255310-nlhtlfjlcv4jufk8c659flj8colqm8r4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCYJ3myPlN9bsL7PRs6_VrWIqEZAQLE8D4"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "349959255310-nlhtlfjlcv4jufk8c659flj8colqm8r4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
}
},
- "api_key": [{
- "current_key": "abcde123465789"
- }]
- },
- {
- "client_info": {
- "mobilesdk_app_id": "1:123465798:android:123465798123",
- "android_client_info": {
- "package_name": "com.blixtwallet.regtest"
- }
- },
- "api_key": [{
- "current_key": "abcde123465789"
- }]
- },
-
-
- {
- "client_info": {
- "mobilesdk_app_id": "1:123465798:android:123465798123",
- "android_client_info": {
- "package_name": "com.blixtwallet.regtest.experiment1"
- }
- },
- "api_key": [{
- "current_key": "abcde123465789"
- }]
- },
- {
- "client_info": {
- "mobilesdk_app_id": "1:123465798:android:123465798123",
- "android_client_info": {
- "package_name": "com.blixtwallet.regtest.experiment1.debug"
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:349959255310:android:85ac1e39762a39fb59d35f",
+ "android_client_info": {
+ "package_name": "com.blixtwallet.debug"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "349959255310-5nm9kipu9dmap1374fkv3mk4adumbabm.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "com.blixtwallet.debug",
+ "certificate_hash": "076a963bc0168507ca72117b5a9513fe814b6e9d"
+ }
+ },
+ {
+ "client_id": "349959255310-nlhtlfjlcv4jufk8c659flj8colqm8r4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCYJ3myPlN9bsL7PRs6_VrWIqEZAQLE8D4"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "349959255310-nlhtlfjlcv4jufk8c659flj8colqm8r4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
}
},
- "api_key": [{
- "current_key": "abcde123465789"
- }]
- },
- {
- "client_info": {
- "mobilesdk_app_id": "1:123465798:android:123465798123",
- "android_client_info": {
- "package_name": "com.blixtwallet.regtest.fakelnd.debug"
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:349959255310:android:c703af800eb9dff159d35f",
+ "android_client_info": {
+ "package_name": "com.blixtwallet.regtest.debug"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "349959255310-nlhtlfjlcv4jufk8c659flj8colqm8r4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCYJ3myPlN9bsL7PRs6_VrWIqEZAQLE8D4"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "349959255310-nlhtlfjlcv4jufk8c659flj8colqm8r4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
}
},
- "api_key": [{
- "current_key": "abcde123465789"
- }]
- },
- {
- "client_info": {
- "mobilesdk_app_id": "1:123465798:android:123465798123",
- "android_client_info": {
- "package_name": "com.blixtwallet.regtest.fakelnd"
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:349959255310:android:b3b30a7ca155ace959d35f",
+ "android_client_info": {
+ "package_name": "com.blixtwallet.restore.debug"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "349959255310-m1qakerr8ll92b7nu0vclb3f14qggg7i.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "com.blixtwallet.restore.debug",
+ "certificate_hash": "076a963bc0168507ca72117b5a9513fe814b6e9d"
+ }
+ },
+ {
+ "client_id": "349959255310-nlhtlfjlcv4jufk8c659flj8colqm8r4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCYJ3myPlN9bsL7PRs6_VrWIqEZAQLE8D4"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "349959255310-nlhtlfjlcv4jufk8c659flj8colqm8r4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
}
- },
- "api_key": [{
- "current_key": "abcde123465789"
- }]
- }
-],
+ }
+ ],
"configuration_version": "1"
-}
+}
\ No newline at end of file
diff --git a/android/app/src/chainregtest/google-services.json.bak b/android/app/src/chainregtest/google-services.json.bak
new file mode 100644
index 000000000..7f881c5c8
--- /dev/null
+++ b/android/app/src/chainregtest/google-services.json.bak
@@ -0,0 +1,78 @@
+{
+ "project_info": {
+ "project_number": "123456789",
+ "firebase_url": "https://phonyblixt.firebaseio.com",
+ "project_id": "phony-blixt-wallet",
+ "storage_bucket": "phony-blixt-wallet.appspot.com"
+ },
+ "client": [{
+ "client_info": {
+ "mobilesdk_app_id": "1:123465798:android:123465798123",
+ "android_client_info": {
+ "package_name": "com.blixtwallet.regtest.debug"
+ }
+ },
+ "api_key": [{
+ "current_key": "abcde123465789"
+ }]
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:123465798:android:123465798123",
+ "android_client_info": {
+ "package_name": "com.blixtwallet.regtest"
+ }
+ },
+ "api_key": [{
+ "current_key": "abcde123465789"
+ }]
+ },
+
+
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:123465798:android:123465798123",
+ "android_client_info": {
+ "package_name": "com.blixtwallet.regtest.experiment1"
+ }
+ },
+ "api_key": [{
+ "current_key": "abcde123465789"
+ }]
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:123465798:android:123465798123",
+ "android_client_info": {
+ "package_name": "com.blixtwallet.regtest.experiment1.debug"
+ }
+ },
+ "api_key": [{
+ "current_key": "abcde123465789"
+ }]
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:123465798:android:123465798123",
+ "android_client_info": {
+ "package_name": "com.blixtwallet.regtest.fakelnd.debug"
+ }
+ },
+ "api_key": [{
+ "current_key": "abcde123465789"
+ }]
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:123465798:android:123465798123",
+ "android_client_info": {
+ "package_name": "com.blixtwallet.regtest.fakelnd"
+ }
+ },
+ "api_key": [{
+ "current_key": "abcde123465789"
+ }]
+ }
+],
+ "configuration_version": "1"
+}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 86d8457e9..729d7083f 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -7,7 +7,10 @@
android:name="com.google.mlkit.vision.DEPENDENCIES"
android:value="barcode" />
+
+
+
@@ -19,6 +22,10 @@
+
+
+
diff --git a/android/build.gradle b/android/build.gradle
index cd8d4e461..ed6f34b82 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -26,8 +26,7 @@ buildscript {
// Needed for react-native-camera-kit
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
classpath("com.google.protobuf:protobuf-gradle-plugin:0.9.3")// 0.8.12")
- // classpath "com.google.gms:google-services:4.3.10" // TODO(hsjoberg): Needed?
-
+ classpath ("com.google.gms:google-services:4.4.0")
}
}
diff --git a/index.js b/index.js
index ab41e3153..a011d4424 100644
--- a/index.js
+++ b/index.js
@@ -1,14 +1,15 @@
import "react-native-gesture-handler";
import React from "react";
import ReactNative, { AppRegistry, LogBox, Platform, UIManager, Text } from "react-native";
+import "@react-native-firebase/messaging";
+import messaging from "@react-native-firebase/messaging";
import App from "./src/App";
-import {name as appName} from "./app.json";
+import { name as appName } from "./app.json";
import Long from "long";
import protobuf from "protobufjs";
import { enableES5 } from "immer";
import "./src/i18n/i18n";
-
protobuf.util.Long = Long;
protobuf.configure();
enableES5();
@@ -29,11 +30,13 @@ LogBox.ignoreLogs([
"i18next::pluralResolver: Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.",
]);
-if (
- Platform.OS === "android" &&
- UIManager.setLayoutAnimationEnabledExperimental
-) {
+if (Platform.OS === "android" && UIManager.setLayoutAnimationEnabledExperimental) {
UIManager.setLayoutAnimationEnabledExperimental(true);
}
+// Register background handler
+messaging().setBackgroundMessageHandler(async (remoteMessage) => {
+ console.log("Message handled in the background!", remoteMessage);
+});
+
AppRegistry.registerComponent(appName, () => App);
diff --git a/package.json b/package.json
index 9dfd927e1..7696c879b 100644
--- a/package.json
+++ b/package.json
@@ -62,6 +62,8 @@
"@react-native-community/netinfo": "^9.4.1",
"@react-native-community/push-notification-ios": "^1.11.0",
"@react-native-community/slider": "^4.4.2",
+ "@react-native-firebase/app": "^18.7.1",
+ "@react-native-firebase/messaging": "^18.7.1",
"@react-native-google-signin/google-signin": "^10.1.1",
"@react-navigation/bottom-tabs": "^6.5.8",
"@react-navigation/drawer": "7.0.0-alpha.5",
@@ -125,7 +127,7 @@
"react-native-modal": "^13.0.1",
"react-native-paper": "^5.11.1",
"react-native-permissions": "^3.10.1",
- "react-native-push-notification": "8.1.1",
+ "react-native-push-notification": "^8.1.1",
"react-native-qrcode-svg": "^6.2.0",
"react-native-reanimated": "3.5.4",
"react-native-safe-area-context": "^4.7.4",
diff --git a/src/state/NotificationManager.ts b/src/state/NotificationManager.ts
index fd99a4023..d94bf59eb 100644
--- a/src/state/NotificationManager.ts
+++ b/src/state/NotificationManager.ts
@@ -4,11 +4,16 @@ import PushNotification, { PushNotificationObject } from "react-native-push-noti
import { navigate } from "../utils/navigation";
import { IStoreModel } from "./index";
-import { ANDROID_PUSH_NOTIFICATION_PUSH_CHANNEL_ID, ANDROID_PUSH_NOTIFICATION_PUSH_CHANNEL_NAME, PLATFORM } from "../utils/constants";
-import { localNotification } from "../utils/push-notification";
+import {
+ ANDROID_PUSH_NOTIFICATION_PUSH_CHANNEL_ID,
+ ANDROID_PUSH_NOTIFICATION_PUSH_CHANNEL_NAME,
+ PLATFORM,
+} from "../utils/constants";
+import { getFcmToken, localNotification, notificationListener } from "../utils/push-notification";
import { toast } from "../utils";
import logger from "./../utils/log";
+import { StorageItem, getItem, getItemObject, setItem } from "../storage/app";
const log = logger("NotificationManager");
interface ILocalNotificationPayload {
@@ -19,8 +24,8 @@ interface ILocalNotificationPayload {
export interface INotificationManagerModel {
initialize: Thunk;
- localNotification: Thunk;
-};
+ localNotification: Thunk;
+}
export const notificationManager: INotificationManagerModel = {
initialize: thunk(async () => {
@@ -35,24 +40,35 @@ export const notificationManager: INotificationManagerModel = {
if (PLATFORM === "ios") {
const permissions = await PushNotification.requestPermissions(["alert", "sound", "badge"]);
- if(!permissions.alert) {
+ if (!permissions.alert) {
log.w("Didn't get permissions to send push notifications.");
return;
}
+
+ const token = await getFcmToken();
+ if (!!token) {
+ await setItem(StorageItem.firebaseToken, token);
+ }
+ notificationListener();
} else if (PLATFORM === "android") {
const granted = await PermissionsAndroid.request(
- PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS
+ PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS,
);
if (granted === "denied" || granted === "never_ask_again") {
log.w("Post notification permission was denied", [granted]);
} else {
+ const token = await getFcmToken();
+ if (!!token) {
+ await setItem(StorageItem.firebaseToken, token);
+ }
+ notificationListener();
return;
}
}
PushNotification.configure({
requestPermissions: false,
- onNotification: ((notification) => {
+ onNotification: (notification) => {
log.i("onNotification", [notification]);
// TODO(hsjoberg): ios notification deeplinking
@@ -60,21 +76,23 @@ export const notificationManager: INotificationManagerModel = {
if (notification.message.toString().includes("on-chain")) {
log.i("Navigating to OnChainTransactionLog");
navigate("OnChain", { screen: "OnChainTransactionLog" });
- }
- else if (notification.message.toString().toLocaleLowerCase().includes("payment channel")) {
+ } else if (
+ notification.message.toString().toLocaleLowerCase().includes("payment channel")
+ ) {
log.i("Navigating to LightningInfo");
navigate("LightningInfo");
}
}
- }),
+ },
});
if (PLATFORM === "android") {
- PushNotification.createChannel({
+ PushNotification.createChannel(
+ {
channelId: ANDROID_PUSH_NOTIFICATION_PUSH_CHANNEL_ID,
channelName: ANDROID_PUSH_NOTIFICATION_PUSH_CHANNEL_NAME,
},
- () => {}
+ () => {},
);
}
} catch (error) {
@@ -90,10 +108,7 @@ export const notificationManager: INotificationManagerModel = {
localNotification: thunk((_, { message, importance }, { getStoreState }) => {
if (getStoreState().settings.pushNotificationsEnabled) {
if (PLATFORM !== "macos") {
- localNotification(
- message,
- importance ?? "default"
- );
+ localNotification(message, importance ?? "default");
} else {
toast(message);
}
diff --git a/src/storage/app.ts b/src/storage/app.ts
index 88d8a0fb8..df05e1e53 100644
--- a/src/storage/app.ts
+++ b/src/storage/app.ts
@@ -89,6 +89,7 @@ export enum StorageItem { // const enums not supported in Babel 7...
lightningBoxServer = "lightningBoxServer",
lightningBoxAddress = "lightningBoxAddress",
lightningBoxLnurlPayDesc = "lightningBoxLnurlPayDesc",
+ firebaseToken = "firebaseToken",
}
export const setItem = async (key: StorageItem, value: string) =>
@@ -192,6 +193,7 @@ export const clearApp = async () => {
removeItem(StorageItem.lightningBoxServer),
removeItem(StorageItem.lightningBoxAddress),
removeItem(StorageItem.lightningBoxLnurlPayDesc),
+ removeItem(StorageItem.firebaseToken),
]);
};
@@ -283,5 +285,6 @@ export const setupApp = async () => {
setItem(StorageItem.lightningBoxServer, DEFAULT_LIGHTNINGBOX_SERVER),
// setItem(StorageItem.lightningBoxAddress, ""),
setItem(StorageItem.lightningBoxLnurlPayDesc, DEFAULT_LIGHTNINGBOX_LNURLPDESC),
+ setItem(StorageItem.firebaseToken, ""),
]);
};
diff --git a/src/utils/push-notification.ts b/src/utils/push-notification.ts
index a3bb45651..e01321cef 100644
--- a/src/utils/push-notification.ts
+++ b/src/utils/push-notification.ts
@@ -1,7 +1,12 @@
import PushNotification, { PushNotificationObject } from "react-native-push-notification";
import { ANDROID_PUSH_NOTIFICATION_PUSH_CHANNEL_ID } from "./constants";
+import firebase from "@react-native-firebase/app";
+import { Alert } from "./alert";
-export const localNotification = (message: string, importance: PushNotificationObject["importance"] = "default"): void => {
+export const localNotification = (
+ message: string,
+ importance: PushNotificationObject["importance"] = "default",
+): void => {
PushNotification.localNotification({
channelId: ANDROID_PUSH_NOTIFICATION_PUSH_CHANNEL_ID,
message,
@@ -12,3 +17,40 @@ export const localNotification = (message: string, importance: PushNotificationO
autoCancel: true,
});
};
+
+export const notificationListener = () => {
+ firebase.messaging().onNotificationOpenedApp((remoteMessage) => {
+ console.log(
+ "Notification caused app to open from background state:",
+ remoteMessage.notification,
+ );
+ });
+
+ // Quiet and Background State -> Check whether an initial notification is available
+ firebase
+ .messaging()
+ .getInitialNotification()
+ .then((remoteMessage) => {
+ if (remoteMessage) {
+ console.log("Notification caused app to open from quit state:", remoteMessage.notification);
+ }
+ })
+ .catch((error) => console.error("Quiet and background state error: ", error));
+
+ // Foreground State
+ firebase.messaging().onMessage(async (remoteMessage) => {
+ Alert.alert("A new FCM message arrived!", JSON.stringify(remoteMessage));
+ console.log("foreground", remoteMessage);
+ });
+};
+
+export const getFcmToken = async () => {
+ try {
+ const newFcmToken = await firebase.messaging().getToken();
+ console.log("firebase token: ", newFcmToken);
+ return newFcmToken;
+ } catch (error) {
+ console.error("error fetching firebase token", error);
+ return null;
+ }
+};
diff --git a/yarn.lock b/yarn.lock
index 34df1188b..f22ace364 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3017,6 +3017,19 @@
resolved "https://registry.yarnpkg.com/@react-native-community/slider/-/slider-4.4.3.tgz#9b9dc639b88f5bfda72bd72a9dff55cbf9f777ed"
integrity sha512-WdjvGtqJfqcCiLwtbzie53Z/H6w6dIfRHhlW832D89ySAdE5DxLAsqRhDOG0eacuAxxEB+T9sGCkVMD0fa3aBg==
+"@react-native-firebase/app@^18.7.1":
+ version "18.7.1"
+ resolved "https://registry.yarnpkg.com/@react-native-firebase/app/-/app-18.7.1.tgz#89fea18713a0fec9e2a0190a4be6b6c54208a73e"
+ integrity sha512-OcWfOUl47pIXcmD5lDn+b1hJktiU7DawXTqjxzDLfWpPzSQUys4OH9kV2ZEnFNKMuvgPELNtzq/H9+Bylc4PGA==
+ dependencies:
+ opencollective-postinstall "^2.0.3"
+ superstruct "^0.6.2"
+
+"@react-native-firebase/messaging@^18.7.1":
+ version "18.7.1"
+ resolved "https://registry.yarnpkg.com/@react-native-firebase/messaging/-/messaging-18.7.1.tgz#0b5885a40711ad21ae8e1c28c583fa0df0cb1d27"
+ integrity sha512-66aBHF9gmuvYpZwb/jviTRo1t845+Ib7D8xMxNnRKh+aHzTN1eHnjY7M0E4lkG9gpw00t7bP+U05riOAveL1dw==
+
"@react-native-google-signin/google-signin@^10.1.1":
version "10.1.1"
resolved "https://registry.yarnpkg.com/@react-native-google-signin/google-signin/-/google-signin-10.1.1.tgz#1306aac8c32cb5deb994a1bfb05bed8172defed1"
@@ -5430,6 +5443,16 @@ cliui@^8.0.1:
strip-ansi "^6.0.1"
wrap-ansi "^7.0.0"
+clone-deep@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713"
+ integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==
+ dependencies:
+ for-own "^1.0.0"
+ is-plain-object "^2.0.4"
+ kind-of "^6.0.0"
+ shallow-clone "^1.0.0"
+
clone-deep@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
@@ -7330,11 +7353,23 @@ for-each@^0.3.3:
dependencies:
is-callable "^1.1.3"
-for-in@^1.0.2:
+for-in@^0.1.3:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
+ integrity sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==
+
+for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
+for-own@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
+ integrity sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==
+ dependencies:
+ for-in "^1.0.1"
+
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -9346,7 +9381,12 @@ kind-of@^4.0.0:
dependencies:
is-buffer "^1.1.5"
-kind-of@^6.0.2:
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.1, kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
@@ -10675,6 +10715,14 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
+mixin-object@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
+ integrity sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==
+ dependencies:
+ for-in "^0.1.3"
+ is-extendable "^0.1.1"
+
mkdirp@^0.5.1:
version "0.5.6"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
@@ -11159,7 +11207,7 @@ open@^8.0.9:
is-docker "^2.1.1"
is-wsl "^2.2.0"
-opencollective-postinstall@^2.0.2:
+opencollective-postinstall@^2.0.2, opencollective-postinstall@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
@@ -12145,7 +12193,7 @@ react-native-permissions@^3.10.1:
resolved "https://registry.yarnpkg.com/react-native-permissions/-/react-native-permissions-3.10.1.tgz#cb0171c8d12113869deaabbdfb979aad1a44752b"
integrity sha512-Gc5BxxpjZn4QNUDiVeHOO0vXh3AH7ToolmwTJozqC6DsxV7NAf3ttap+8BSmzDR8WxuAM3Cror+YNiBhHJx7/w==
-react-native-push-notification@8.1.1:
+react-native-push-notification@^8.1.1:
version "8.1.1"
resolved "https://registry.yarnpkg.com/react-native-push-notification/-/react-native-push-notification-8.1.1.tgz#a41d20c70ea5a7709417e96261b225461f8dc73a"
integrity sha512-XpBtG/w+a6WXTxu6l1dNYyTiHnbgnvjoc3KxPTxYkaIABRmvuJZkFxqruyGvfCw7ELAlZEAJO+dthdTabCe1XA==
@@ -13159,6 +13207,15 @@ sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8:
inherits "^2.0.1"
safe-buffer "^5.0.1"
+shallow-clone@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571"
+ integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==
+ dependencies:
+ is-extendable "^0.1.1"
+ kind-of "^5.0.0"
+ mixin-object "^2.0.1"
+
shallow-clone@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
@@ -13704,6 +13761,14 @@ sumchecker@^3.0.1:
dependencies:
debug "^4.1.0"
+superstruct@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.6.2.tgz#c5eb034806a17ff98d036674169ef85e4c7f6a1c"
+ integrity sha512-lvA97MFAJng3rfjcafT/zGTSWm6Tbpk++DP6It4Qg7oNaeM+2tdJMuVgGje21/bIpBEs6iQql1PJH6dKTjl4Ig==
+ dependencies:
+ clone-deep "^2.0.1"
+ kind-of "^6.0.1"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"