diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 28345fdb0..4e5bcd748 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -142,12 +142,14 @@ jobs: # Actual environment variables are not being picked up # by the build so they're put into an .env file. - name: Create environment settings - if: env.MEDIATOR_URL != null + if: env.MEDIATOR_URL != null || env.BUGSNAG_API_KEY != null working-directory: app env: MEDIATOR_URL: ${{ secrets.MEDIATOR_URL }} + BUGSNAG_API_KEY: ${{ secrets.BUGSNAG_API_KEY }} run: | - echo "MEDIATOR_URL=${MEDIATOR_URL}" >.env + echo "MEDIATOR_URL=${MEDIATOR_URL}" >.env | + echo "BUGSNAG_API_KEY=${BUGSNAG_API_KEY}" >>.env # https://docs.github.com/en/actions/deployment/deploying-xcode-applications/installing-an-apple-certificate-on-macos-runners-for-xcode-development - name: Create Provisioning Profile if: github.ref_name == 'main' && needs.check-ios-secrets.outputs.isReleaseBuild == 'true' @@ -301,12 +303,14 @@ jobs: # Actual environment variables are not being picked up # by the build so they're put into an .env file. - name: Create environment settings - if: env.MEDIATOR_URL != null + if: env.MEDIATOR_URL != null || env.BUGSNAG_API_KEY != null working-directory: app env: MEDIATOR_URL: ${{ secrets.MEDIATOR_URL }} + BUGSNAG_API_KEY: ${{ secrets.BUGSNAG_API_KEY }} run: | - echo "MEDIATOR_URL=${MEDIATOR_URL}" >.env + echo "MEDIATOR_URL=${MEDIATOR_URL}" >.env | + echo "BUGSNAG_API_KEY=${BUGSNAG_API_KEY}" >>.env - name: Android debug build if: github.ref_name != 'main' || needs.check-android-secrets.outputs.isReleaseBuild != 'true' diff --git a/.gitignore b/.gitignore index 8411e0d55..f28ab734c 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ app/patches/react-native-gifted-chat*.patch # xcode xcuserdata/ .npmrc +app/ios/tmp.xcconfig diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index fcccbb4d7..76aaa59b3 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.android.application" +apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" import com.android.build.OutputFile @@ -93,6 +94,7 @@ project.ext.react = [ ] apply from: "../../node_modules/react-native/react.gradle" +apply plugin: "com.bugsnag.android.gradle" apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" /** @@ -155,6 +157,7 @@ android { missingDimensionStrategy 'react-native-camera', 'general' + manifestPlaceholders = [API_KEY: project.env.get("BUGSNAG_API_KEY")] } splits { abi { @@ -237,5 +240,8 @@ task copyDownloadableDepsToLibs(type: Copy) { into 'libs' } -apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) + +bugsnag { + uploadReactNativeMappings = true +} diff --git a/app/android/app/src/main/AndroidManifest.xml b/app/android/app/src/main/AndroidManifest.xml index 289b56d4d..65f817e38 100644 --- a/app/android/app/src/main/AndroidManifest.xml +++ b/app/android/app/src/main/AndroidManifest.xml @@ -42,5 +42,6 @@ + \ No newline at end of file diff --git a/app/android/app/src/main/java/ca/qc/gouv/QCWallet/MainApplication.java b/app/android/app/src/main/java/ca/qc/gouv/QCWallet/MainApplication.java index 235e7e0f2..dc77d519e 100644 --- a/app/android/app/src/main/java/ca/qc/gouv/QCWallet/MainApplication.java +++ b/app/android/app/src/main/java/ca/qc/gouv/QCWallet/MainApplication.java @@ -1,5 +1,6 @@ package ca.qc.gouv.portefeuilleqc; +import com.bugsnag.android.Bugsnag; import android.app.Application; import android.content.Context; import com.facebook.react.PackageList; @@ -44,6 +45,7 @@ public ReactNativeHost getReactNativeHost() { @Override public void onCreate() { super.onCreate(); + Bugsnag.start(this); SoLoader.init(this, /* native exopackage */ false); } } diff --git a/app/android/build.gradle b/app/android/build.gradle index 0e1bbc0f9..b2f43ad82 100644 --- a/app/android/build.gradle +++ b/app/android/build.gradle @@ -18,6 +18,7 @@ buildscript { } dependencies { classpath("com.android.tools.build:gradle:7.2.1") + classpath("com.bugsnag:bugsnag-android-gradle-plugin:7.+") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/app/index.js b/app/index.js index 862d9891e..b6603a478 100644 --- a/app/index.js +++ b/app/index.js @@ -20,6 +20,8 @@ import '@formatjs/intl-datetimeformat/polyfill' import '@formatjs/intl-datetimeformat/locale-data/en' // locale-data for en import '@formatjs/intl-datetimeformat/add-all-tz' // Add ALL tz data +import BugsnagPluginReactNavigation from '@bugsnag/plugin-react-navigation' +import Bugsnag from '@bugsnag/react-native' import { NavigationContainer } from '@react-navigation/native' import React from 'react' import { AppRegistry } from 'react-native' @@ -31,6 +33,16 @@ const { theme } = qcwallet const { ColorPallet } = theme +Bugsnag.start({ + plugins: [new BugsnagPluginReactNavigation()], +}) + +const ErrorBoundary = Bugsnag.getPlugin('react').createErrorBoundary(React) + +const { createNavigationContainer } = Bugsnag.getPlugin('reactNavigation') + +const BugsnagNavigationContainer = createNavigationContainer(NavigationContainer) + const navigationTheme = { dark: true, colors: { @@ -45,9 +57,11 @@ const navigationTheme = { const Base = () => { return ( - - - + + + + + ) } AppRegistry.registerComponent(appName, () => Base) diff --git a/app/ios/AriesBifold.xcodeproj/project.pbxproj b/app/ios/AriesBifold.xcodeproj/project.pbxproj index 30bf59726..272920846 100644 --- a/app/ios/AriesBifold.xcodeproj/project.pbxproj +++ b/app/ios/AriesBifold.xcodeproj/project.pbxproj @@ -72,6 +72,7 @@ 56A83D5C27D95E24002FE8FE /* BCSans-BoldItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BCSans-BoldItalic.ttf"; path = "../src/assets/fonts/BCSans-BoldItalic.ttf"; sourceTree = ""; }; 56A83D5D27D95E24002FE8FE /* BCSans-Italic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BCSans-Italic.ttf"; path = "../src/assets/fonts/BCSans-Italic.ttf"; sourceTree = ""; }; 62AD74D113A13E6D7ECD73DC /* Pods-AriesBifold.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AriesBifold.release.xcconfig"; path = "Target Support Files/Pods-AriesBifold/Pods-AriesBifold.release.xcconfig"; sourceTree = ""; }; + 6F99AD4C2A0572BB0073B4BF /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; 6FAA896629281E3E002D887C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 6FAA896B29281E60002D887C /* fr-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CA"; path = "fr-CA.lproj/InfoPlist.strings"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = AriesBifold/LaunchScreen.storyboard; sourceTree = ""; }; @@ -166,6 +167,7 @@ 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( + 6F99AD4C2A0572BB0073B4BF /* Config.xcconfig */, 566FB1F1273B158E003E9BEE /* Media.xcassets */, 13B07FAE1A68108700A75B9A /* AriesBifold */, 00E356EF1AD99517003FC87E /* AriesBifoldTests */, @@ -237,6 +239,7 @@ F5B7D67D9BBF4C5FE692BB29 /* [CP] Embed Pods Frameworks */, EB396EB204E0E4C9F6307F29 /* [CP] Copy Pods Resources */, 433E774026557E1B00F569EE /* Embed Frameworks */, + 9D840F3D7FAB4E2AA01DCE7C /* Upload source maps to Bugsnag */, ); buildRules = ( ); @@ -323,7 +326,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + shellScript = "export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\"\nset -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; 4EC0E8613979411464217753 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; @@ -381,6 +384,20 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AriesBifold-AriesBifoldTests/Pods-AriesBifold-AriesBifoldTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 9D840F3D7FAB4E2AA01DCE7C /* Upload source maps to Bugsnag */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Upload source maps to Bugsnag"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh"; + }; B9A54C90D3BE82CD93B12CE2 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -638,6 +655,7 @@ }; 83CBBA201A601CBA00E9B192 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 6F99AD4C2A0572BB0073B4BF /* Config.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; @@ -703,6 +721,7 @@ }; 83CBBA211A601CBA00E9B192 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 6F99AD4C2A0572BB0073B4BF /* Config.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; diff --git a/app/ios/AriesBifold.xcodeproj/xcshareddata/xcschemes/AriesBifold.xcscheme b/app/ios/AriesBifold.xcodeproj/xcshareddata/xcschemes/AriesBifold.xcscheme index bc517c677..bfa2bddfb 100644 --- a/app/ios/AriesBifold.xcodeproj/xcshareddata/xcschemes/AriesBifold.xcscheme +++ b/app/ios/AriesBifold.xcodeproj/xcshareddata/xcschemes/AriesBifold.xcscheme @@ -1,10 +1,28 @@ + version = "1.7"> + + + + + + + + + + #import "AppDelegate.h" #import @@ -10,7 +11,9 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; + [Bugsnag start]; + +RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"QCWallet" initialProperties:nil]; diff --git a/app/ios/AriesBifold/Info.plist b/app/ios/AriesBifold/Info.plist index f3b7f9e3e..d70e01d78 100644 --- a/app/ios/AriesBifold/Info.plist +++ b/app/ios/AriesBifold/Info.plist @@ -81,5 +81,10 @@ + bugsnag + + apiKey + $(BUGSNAG_API_KEY) + diff --git a/app/ios/Config.xcconfig b/app/ios/Config.xcconfig new file mode 100644 index 000000000..907ca1e5f --- /dev/null +++ b/app/ios/Config.xcconfig @@ -0,0 +1,10 @@ +// +// Config.xcconfig +// AriesBifold +// +// Created by jean-christophe.drouin@mcn.gouv.qc.ca on 2023-05-05. +// + +// Configuration settings file format documentation can be found at: +// https://help.apple.com/xcode/#/dev745c5c974 +#include? "tmp.xcconfig" diff --git a/app/ios/Podfile.lock b/app/ios/Podfile.lock index e995bdfca..7048a9021 100644 --- a/app/ios/Podfile.lock +++ b/app/ios/Podfile.lock @@ -1,5 +1,7 @@ PODS: - boost (1.76.0) + - BugsnagReactNative (7.20.2): + - React-Core - CatCrypto (0.3.2) - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) @@ -387,6 +389,7 @@ PODS: DEPENDENCIES: - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - "BugsnagReactNative (from `../node_modules/@bugsnag/react-native`)" - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) @@ -458,6 +461,8 @@ SPEC REPOS: EXTERNAL SOURCES: boost: :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + BugsnagReactNative: + :path: "../node_modules/@bugsnag/react-native" DoubleConversion: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" FBLazyVector: @@ -571,6 +576,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: a7c83b31436843459a1961bfd74b96033dc77234 + BugsnagReactNative: bf6f4ebababa8536726b3014c7d3e4af8c53d488 CatCrypto: a477899b6be4954e75be4897e732da098cc0a5a8 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 @@ -634,4 +640,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: ac6fb920404abfaf943a3b94ff54624a7f9c89e8 -COCOAPODS: 1.11.3 +COCOAPODS: 1.12.1 diff --git a/app/package-lock.json b/app/package-lock.json index 307f3514c..fba0f9d3d 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -13,6 +13,8 @@ "@aries-framework/core": "^0.3.3", "@aries-framework/react-hooks": "^0.4.0", "@aries-framework/react-native": "^0.3.2", + "@bugsnag/plugin-react-navigation": "^7.19.0", + "@bugsnag/react-native": "^7.20.2", "@formatjs/intl-datetimeformat": "4.2.4", "@formatjs/intl-displaynames": "5.2.4", "@formatjs/intl-getcanonicallocales": "1.7.3", @@ -77,6 +79,7 @@ "devDependencies": { "@babel/core": "7.15.5", "@babel/runtime": "7.15.4", + "@bugsnag/source-maps": "^2.3.1", "@commitlint/cli": "^11.0.0", "@react-native-community/eslint-config": "^2.0.0", "@storybook/addon-actions": "^5.3.21", @@ -392,7 +395,7 @@ }, "peerDependencies": { "@aries-framework/core": "^0.3.3", - "@aries-framework/react-hooks": "^0.4.0", + "@aries-framework/react-hooks": "^0.4.2", "@aries-framework/react-native": "^0.3.2", "@formatjs/intl-datetimeformat": "^4.2.3", "@formatjs/intl-displaynames": "^5.2.3", @@ -1246,6 +1249,8 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "license": "MIT", "dependencies": { @@ -1285,6 +1290,8 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1421,6 +1428,8 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "license": "MIT", "dependencies": { @@ -2149,6 +2158,8 @@ }, "node_modules/@babel/preset-modules": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "license": "MIT", "dependencies": { @@ -2280,6 +2291,179 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@bugsnag/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", + "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", + "dependencies": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" + } + }, + "node_modules/@bugsnag/cuid": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", + "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" + }, + "node_modules/@bugsnag/delivery-react-native": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/delivery-react-native/-/delivery-react-native-7.19.0.tgz", + "integrity": "sha512-Zzl3VOwLDU4KHmf3VweyfNeJcQgL0NzbWG+OCxjCYen093Q4sxNTpWAVBCrYPRjQ2Sq3+D3+YbQg5UUrHL7kig==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-console-breadcrumbs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-console-breadcrumbs/-/plugin-console-breadcrumbs-7.19.0.tgz", + "integrity": "sha512-ZHqPAK0WpbvWjj2wwSV8+C8+K9TOyQsfZnRJ7lIadbeUUJORmFRnG0vUHKBvwxMP7bqCj8fOe/S0kKF3dfMMKA==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-network-breadcrumbs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-network-breadcrumbs/-/plugin-network-breadcrumbs-7.19.0.tgz", + "integrity": "sha512-Farc0XuUoxv10kJE65zfgZlqujR7TDu8QjwxA4YDxEE41kFM8TAw0CAK15WkQK1UTsNACiiAETZGyU279eB65Q==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react/-/plugin-react-7.19.0.tgz", + "integrity": "sha512-owC4QXYJWGllMoOPcH5P7sbDIDuFLMCbjGAU6FwH5mBMObSQo+1ViSKImlTJQUFXATM8ySISTBVt7w3C6FFHng==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + }, + "peerDependenciesMeta": { + "@bugsnag/core": { + "optional": true + } + } + }, + "node_modules/@bugsnag/plugin-react-native-client-sync": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-client-sync/-/plugin-react-native-client-sync-7.19.0.tgz", + "integrity": "sha512-WyK5pZuIzqVrY0h0HimwuODCo9ty9AyDY3q1pmwjrz2y8JTT21nnwUtHybLsp5Rl2oJR4tG06QkWmazgHDkWdA==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react-native-event-sync": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-event-sync/-/plugin-react-native-event-sync-7.19.0.tgz", + "integrity": "sha512-OD73WFkDJAq8AheN2Jap+d17M1mPbEBc1Aulz9FCLs//QwlM2IOij8oarB1iF/wgK6FnIgLFEBPTZpGHuZUsyQ==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react-native-global-error-handler": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-global-error-handler/-/plugin-react-native-global-error-handler-7.19.0.tgz", + "integrity": "sha512-zf+KIHqGEAs2ekAzJCTS0rM1nKrmpIfznBhn72xZJwyfYrh0wbvjZjClDEwxDZ24uNVUUHrIymzdqxpHqVb0lg==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react-native-hermes": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-hermes/-/plugin-react-native-hermes-7.19.0.tgz", + "integrity": "sha512-6SGTSR6NMS2t8j02ZQ6FlA+K/nKkZqvGA+8A7WS/0M8HAShzyoMpZH10kGrU2dcCaiEtmD2T6OGBSbpF+385Dg==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react-native-session": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-session/-/plugin-react-native-session-7.19.0.tgz", + "integrity": "sha512-PVwsUstedp9wTqJU/IKdCaMFKP2YrqHXoeBtqRTQ7FFyr0K8wsiW7nZP2jM31VS388hZWSWBlHQPA/3LZ49tNQ==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react-native-unhandled-rejection": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-unhandled-rejection/-/plugin-react-native-unhandled-rejection-7.19.0.tgz", + "integrity": "sha512-+XDk0OoeM6MZhBh7kEalbRwFuhCZST6Y1jOostfz0fhrmT4FdgQYi1FWcPNsUTcjqv7M48pOFZNx8yWI0lGaYg==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0" + } + }, + "node_modules/@bugsnag/plugin-react-navigation": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-navigation/-/plugin-react-navigation-7.19.0.tgz", + "integrity": "sha512-cDuHwykruivUZFtaIt5/MhbfRyH20X0XFrW071V+5M+rXAnpJa2AwppXwEuP7DWeER38hd2O8VqaUU2Ijes2Lw==", + "peerDependencies": { + "@bugsnag/core": "^7.0.0", + "@react-navigation/native": "^5.0 || ^6.0" + }, + "peerDependenciesMeta": { + "@bugsnag/core": { + "optional": true + } + } + }, + "node_modules/@bugsnag/react-native": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@bugsnag/react-native/-/react-native-7.20.2.tgz", + "integrity": "sha512-pvzFZA/7PzChLgrSsynZFl/lBOcY+X76sLbniJz7S3Lcrdc5+NY5fP+AVoZH9mqNaob6OSiALubUVLpPeirivg==", + "dependencies": { + "@bugsnag/core": "^7.19.0", + "@bugsnag/delivery-react-native": "^7.19.0", + "@bugsnag/plugin-console-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-network-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-react": "^7.19.0", + "@bugsnag/plugin-react-native-client-sync": "^7.19.0", + "@bugsnag/plugin-react-native-event-sync": "^7.19.0", + "@bugsnag/plugin-react-native-global-error-handler": "^7.19.0", + "@bugsnag/plugin-react-native-hermes": "^7.19.0", + "@bugsnag/plugin-react-native-session": "^7.19.0", + "@bugsnag/plugin-react-native-unhandled-rejection": "^7.19.0", + "iserror": "^0.0.2" + } + }, + "node_modules/@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" + }, + "node_modules/@bugsnag/source-maps": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.1.tgz", + "integrity": "sha512-9xJTcf5+W7+y1fQBftSOste/3ORi+d5EeCCMdvaHSX69MKQP0lrDiSYpLwX/ErcXrTbvu7nimGGKJP2vBdF7zQ==", + "dev": true, + "dependencies": { + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "concat-stream": "^2.0.0", + "consola": "^2.15.0", + "form-data": "^3.0.0", + "glob": "^7.1.6", + "read-pkg-up": "^7.0.1" + }, + "bin": { + "bugsnag-source-maps": "bin/cli" + } + }, + "node_modules/@bugsnag/source-maps/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, "node_modules/@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", @@ -9138,6 +9322,15 @@ "node": ">=0.10.0" } }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -9195,6 +9388,8 @@ }, "node_modules/array-union": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "license": "MIT", "dependencies": { @@ -9206,6 +9401,8 @@ }, "node_modules/array-uniq": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, "license": "MIT", "engines": { @@ -11810,6 +12007,54 @@ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "license": "MIT" }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -11979,6 +12224,12 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -12832,6 +13083,15 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -15562,6 +15822,18 @@ "node": ">=6" } }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -17232,6 +17504,8 @@ }, "node_modules/ignore": { "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true, "license": "MIT" }, @@ -17633,6 +17907,8 @@ }, "node_modules/interpret": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, "license": "MIT", "engines": { @@ -17699,6 +17975,8 @@ }, "node_modules/is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -18256,6 +18534,11 @@ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, + "node_modules/iserror": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", + "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -23120,6 +23403,12 @@ "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", "license": "MIT" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -25108,6 +25397,8 @@ }, "node_modules/object-is": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -25670,6 +25961,8 @@ }, "node_modules/path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "license": "MIT", "dependencies": { @@ -25681,6 +25974,8 @@ }, "node_modules/path-type/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", "engines": { @@ -26174,6 +26469,8 @@ }, "node_modules/process": { "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "license": "MIT", "engines": { @@ -28577,6 +28874,8 @@ }, "node_modules/rechoir": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { "resolve": "^1.1.6" @@ -28622,6 +28921,15 @@ "node": ">=8" } }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -29687,6 +29995,8 @@ }, "node_modules/shelljs": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -30154,6 +30464,14 @@ "dev": true, "license": "MIT" }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -30176,8 +30494,9 @@ } }, "node_modules/stackframe": { - "version": "1.2.1", - "license": "MIT" + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" }, "node_modules/stacktrace-parser": { "version": "0.1.10", @@ -30914,6 +31233,39 @@ "node": ">=10.0.0" } }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/table/node_modules/ajv": { "version": "8.11.0", "dev": true, @@ -31819,6 +32171,15 @@ "node": ">=4.2.0" } }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/ua-parser-js": { "version": "0.7.31", "funding": [ @@ -33107,6 +33468,28 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -33917,6 +34300,8 @@ }, "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -33938,6 +34323,8 @@ }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -34025,6 +34412,8 @@ }, "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -34432,6 +34821,8 @@ }, "@babel/preset-modules": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -34530,6 +34921,131 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@bugsnag/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", + "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", + "requires": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" + } + }, + "@bugsnag/cuid": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", + "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" + }, + "@bugsnag/delivery-react-native": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/delivery-react-native/-/delivery-react-native-7.19.0.tgz", + "integrity": "sha512-Zzl3VOwLDU4KHmf3VweyfNeJcQgL0NzbWG+OCxjCYen093Q4sxNTpWAVBCrYPRjQ2Sq3+D3+YbQg5UUrHL7kig==" + }, + "@bugsnag/plugin-console-breadcrumbs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-console-breadcrumbs/-/plugin-console-breadcrumbs-7.19.0.tgz", + "integrity": "sha512-ZHqPAK0WpbvWjj2wwSV8+C8+K9TOyQsfZnRJ7lIadbeUUJORmFRnG0vUHKBvwxMP7bqCj8fOe/S0kKF3dfMMKA==" + }, + "@bugsnag/plugin-network-breadcrumbs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-network-breadcrumbs/-/plugin-network-breadcrumbs-7.19.0.tgz", + "integrity": "sha512-Farc0XuUoxv10kJE65zfgZlqujR7TDu8QjwxA4YDxEE41kFM8TAw0CAK15WkQK1UTsNACiiAETZGyU279eB65Q==" + }, + "@bugsnag/plugin-react": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react/-/plugin-react-7.19.0.tgz", + "integrity": "sha512-owC4QXYJWGllMoOPcH5P7sbDIDuFLMCbjGAU6FwH5mBMObSQo+1ViSKImlTJQUFXATM8ySISTBVt7w3C6FFHng==" + }, + "@bugsnag/plugin-react-native-client-sync": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-client-sync/-/plugin-react-native-client-sync-7.19.0.tgz", + "integrity": "sha512-WyK5pZuIzqVrY0h0HimwuODCo9ty9AyDY3q1pmwjrz2y8JTT21nnwUtHybLsp5Rl2oJR4tG06QkWmazgHDkWdA==" + }, + "@bugsnag/plugin-react-native-event-sync": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-event-sync/-/plugin-react-native-event-sync-7.19.0.tgz", + "integrity": "sha512-OD73WFkDJAq8AheN2Jap+d17M1mPbEBc1Aulz9FCLs//QwlM2IOij8oarB1iF/wgK6FnIgLFEBPTZpGHuZUsyQ==" + }, + "@bugsnag/plugin-react-native-global-error-handler": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-global-error-handler/-/plugin-react-native-global-error-handler-7.19.0.tgz", + "integrity": "sha512-zf+KIHqGEAs2ekAzJCTS0rM1nKrmpIfznBhn72xZJwyfYrh0wbvjZjClDEwxDZ24uNVUUHrIymzdqxpHqVb0lg==" + }, + "@bugsnag/plugin-react-native-hermes": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-hermes/-/plugin-react-native-hermes-7.19.0.tgz", + "integrity": "sha512-6SGTSR6NMS2t8j02ZQ6FlA+K/nKkZqvGA+8A7WS/0M8HAShzyoMpZH10kGrU2dcCaiEtmD2T6OGBSbpF+385Dg==" + }, + "@bugsnag/plugin-react-native-session": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-session/-/plugin-react-native-session-7.19.0.tgz", + "integrity": "sha512-PVwsUstedp9wTqJU/IKdCaMFKP2YrqHXoeBtqRTQ7FFyr0K8wsiW7nZP2jM31VS388hZWSWBlHQPA/3LZ49tNQ==" + }, + "@bugsnag/plugin-react-native-unhandled-rejection": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-unhandled-rejection/-/plugin-react-native-unhandled-rejection-7.19.0.tgz", + "integrity": "sha512-+XDk0OoeM6MZhBh7kEalbRwFuhCZST6Y1jOostfz0fhrmT4FdgQYi1FWcPNsUTcjqv7M48pOFZNx8yWI0lGaYg==" + }, + "@bugsnag/plugin-react-navigation": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-navigation/-/plugin-react-navigation-7.19.0.tgz", + "integrity": "sha512-cDuHwykruivUZFtaIt5/MhbfRyH20X0XFrW071V+5M+rXAnpJa2AwppXwEuP7DWeER38hd2O8VqaUU2Ijes2Lw==" + }, + "@bugsnag/react-native": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@bugsnag/react-native/-/react-native-7.20.2.tgz", + "integrity": "sha512-pvzFZA/7PzChLgrSsynZFl/lBOcY+X76sLbniJz7S3Lcrdc5+NY5fP+AVoZH9mqNaob6OSiALubUVLpPeirivg==", + "requires": { + "@bugsnag/core": "^7.19.0", + "@bugsnag/delivery-react-native": "^7.19.0", + "@bugsnag/plugin-console-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-network-breadcrumbs": "^7.19.0", + "@bugsnag/plugin-react": "^7.19.0", + "@bugsnag/plugin-react-native-client-sync": "^7.19.0", + "@bugsnag/plugin-react-native-event-sync": "^7.19.0", + "@bugsnag/plugin-react-native-global-error-handler": "^7.19.0", + "@bugsnag/plugin-react-native-hermes": "^7.19.0", + "@bugsnag/plugin-react-native-session": "^7.19.0", + "@bugsnag/plugin-react-native-unhandled-rejection": "^7.19.0", + "iserror": "^0.0.2" + } + }, + "@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" + }, + "@bugsnag/source-maps": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.1.tgz", + "integrity": "sha512-9xJTcf5+W7+y1fQBftSOste/3ORi+d5EeCCMdvaHSX69MKQP0lrDiSYpLwX/ErcXrTbvu7nimGGKJP2vBdF7zQ==", + "dev": true, + "requires": { + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "concat-stream": "^2.0.0", + "consola": "^2.15.0", + "form-data": "^3.0.0", + "glob": "^7.1.6", + "read-pkg-up": "^7.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + } + } + }, "@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", @@ -39836,6 +40352,12 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true + }, "array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -39880,6 +40402,8 @@ }, "array-union": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "requires": { "array-uniq": "^1.0.1" @@ -39887,6 +40411,8 @@ }, "array-uniq": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, "array-unique": { @@ -41910,6 +42436,44 @@ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -42056,6 +42620,12 @@ } } }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, "console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -42712,6 +43282,12 @@ } } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -44742,6 +45318,15 @@ "pkg-dir": "^3.0.0" } }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "requires": { + "array-back": "^3.0.1" + } + }, "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -46002,6 +46587,8 @@ }, "ignore": { "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, "image-size": { @@ -46294,6 +46881,8 @@ }, "interpret": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "invariant": { @@ -46339,6 +46928,8 @@ }, "is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -46695,6 +47286,11 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "iserror": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", + "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -50212,6 +50808,12 @@ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==" }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -51781,6 +52383,8 @@ }, "object-is": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -52184,6 +52788,8 @@ }, "path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" @@ -52191,6 +52797,8 @@ "dependencies": { "pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true } } @@ -52542,6 +53150,8 @@ }, "process": { "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true }, "process-nextick-args": { @@ -54335,6 +54945,8 @@ }, "rechoir": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "requires": { "resolve": "^1.1.6" @@ -54370,6 +54982,12 @@ "strip-indent": "^3.0.0" } }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -55167,6 +55785,8 @@ }, "shelljs": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "requires": { "glob": "^7.0.0", @@ -55539,6 +56159,14 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "requires": { + "stackframe": "^1.3.4" + } + }, "stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -55557,7 +56185,9 @@ } }, "stackframe": { - "version": "1.2.1" + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" }, "stacktrace-parser": { "version": "0.1.10", @@ -56183,6 +56813,32 @@ } } }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -56788,6 +57444,12 @@ "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", "dev": true }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true + }, "ua-parser-js": { "version": "0.7.31" }, @@ -57779,6 +58441,24 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -57992,4 +58672,4 @@ "devOptional": true } } -} \ No newline at end of file +} diff --git a/app/package.json b/app/package.json index d2ee40b05..4b9eadd95 100644 --- a/app/package.json +++ b/app/package.json @@ -43,6 +43,8 @@ "@aries-framework/core": "^0.3.3", "@aries-framework/react-hooks": "^0.4.0", "@aries-framework/react-native": "^0.3.2", + "@bugsnag/plugin-react-navigation": "^7.19.0", + "@bugsnag/react-native": "^7.20.2", "@formatjs/intl-datetimeformat": "4.2.4", "@formatjs/intl-displaynames": "5.2.4", "@formatjs/intl-getcanonicallocales": "1.7.3", @@ -107,6 +109,7 @@ "devDependencies": { "@babel/core": "7.15.5", "@babel/runtime": "7.15.4", + "@bugsnag/source-maps": "^2.3.1", "@commitlint/cli": "^11.0.0", "@react-native-community/eslint-config": "^2.0.0", "@storybook/addon-actions": "^5.3.21", diff --git a/app/src/screens/Splash.tsx b/app/src/screens/Splash.tsx index e59d3f701..8dc32734f 100644 --- a/app/src/screens/Splash.tsx +++ b/app/src/screens/Splash.tsx @@ -9,6 +9,7 @@ import { } from '@aries-framework/core' import { useAgent } from '@aries-framework/react-hooks' import { agentDependencies } from '@aries-framework/react-native' +import Bugsnag from '@bugsnag/react-native' import AsyncStorage from '@react-native-async-storage/async-storage' import { useNavigation } from '@react-navigation/core' import { CommonActions } from '@react-navigation/native' @@ -149,7 +150,8 @@ const Splash: React.FC = () => { if (data) { return JSON.parse(data) } - } catch { + } catch (e: unknown) { + Bugsnag.notify(e as Error) return } } @@ -272,6 +274,7 @@ const Splash: React.FC = () => { }) ) } catch (e: unknown) { + Bugsnag.notify(e as Error) setInitErrorType(InitErrorTypes.Onboarding) setInitError(e as Error) } @@ -335,6 +338,7 @@ const Splash: React.FC = () => { }) ) } catch (e: unknown) { + Bugsnag.notify(e as Error) setInitErrorType(InitErrorTypes.Agent) setInitError(e as Error) } diff --git a/patch/Qc/bugsnag/bugsnag.patch b/patch/Qc/bugsnag/bugsnag.patch new file mode 100644 index 000000000..4f88cf7a6 --- /dev/null +++ b/patch/Qc/bugsnag/bugsnag.patch @@ -0,0 +1,1558 @@ +diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml +index 28345fd..4e5bcd7 100644 +--- a/.github/workflows/main.yaml ++++ b/.github/workflows/main.yaml +@@ -142,12 +142,14 @@ jobs: + # Actual environment variables are not being picked up + # by the build so they're put into an .env file. + - name: Create environment settings +- if: env.MEDIATOR_URL != null ++ if: env.MEDIATOR_URL != null || env.BUGSNAG_API_KEY != null + working-directory: app + env: + MEDIATOR_URL: ${{ secrets.MEDIATOR_URL }} ++ BUGSNAG_API_KEY: ${{ secrets.BUGSNAG_API_KEY }} + run: | +- echo "MEDIATOR_URL=${MEDIATOR_URL}" >.env ++ echo "MEDIATOR_URL=${MEDIATOR_URL}" >.env | ++ echo "BUGSNAG_API_KEY=${BUGSNAG_API_KEY}" >>.env + # https://docs.github.com/en/actions/deployment/deploying-xcode-applications/installing-an-apple-certificate-on-macos-runners-for-xcode-development + - name: Create Provisioning Profile + if: github.ref_name == 'main' && needs.check-ios-secrets.outputs.isReleaseBuild == 'true' +@@ -301,12 +303,14 @@ jobs: + # Actual environment variables are not being picked up + # by the build so they're put into an .env file. + - name: Create environment settings +- if: env.MEDIATOR_URL != null ++ if: env.MEDIATOR_URL != null || env.BUGSNAG_API_KEY != null + working-directory: app + env: + MEDIATOR_URL: ${{ secrets.MEDIATOR_URL }} ++ BUGSNAG_API_KEY: ${{ secrets.BUGSNAG_API_KEY }} + run: | +- echo "MEDIATOR_URL=${MEDIATOR_URL}" >.env ++ echo "MEDIATOR_URL=${MEDIATOR_URL}" >.env | ++ echo "BUGSNAG_API_KEY=${BUGSNAG_API_KEY}" >>.env + + - name: Android debug build + if: github.ref_name != 'main' || needs.check-android-secrets.outputs.isReleaseBuild != 'true' +diff --git a/.gitignore b/.gitignore +index 8411e0d..f28ab73 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -41,3 +41,4 @@ app/patches/react-native-gifted-chat*.patch + # xcode + xcuserdata/ + .npmrc ++app/ios/tmp.xcconfig +diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle +index fcccbb4..76aaa59 100644 +--- a/app/android/app/build.gradle ++++ b/app/android/app/build.gradle +@@ -1,4 +1,5 @@ + apply plugin: "com.android.application" ++apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" + + import com.android.build.OutputFile + +@@ -93,6 +94,7 @@ project.ext.react = [ + ] + + apply from: "../../node_modules/react-native/react.gradle" ++apply plugin: "com.bugsnag.android.gradle" + apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" + + /** +@@ -155,6 +157,7 @@ android { + + + missingDimensionStrategy 'react-native-camera', 'general' ++ manifestPlaceholders = [API_KEY: project.env.get("BUGSNAG_API_KEY")] + } + splits { + abi { +@@ -237,5 +240,8 @@ task copyDownloadableDepsToLibs(type: Copy) { + into 'libs' + } + +-apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" + apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) ++ ++bugsnag { ++ uploadReactNativeMappings = true ++} +diff --git a/app/android/app/src/main/AndroidManifest.xml b/app/android/app/src/main/AndroidManifest.xml +index 289b56d..65f817e 100644 +--- a/app/android/app/src/main/AndroidManifest.xml ++++ b/app/android/app/src/main/AndroidManifest.xml +@@ -42,5 +42,6 @@ + + + ++ + + +\ No newline at end of file +diff --git a/app/android/app/src/main/java/ca/qc/gouv/QCWallet/MainApplication.java b/app/android/app/src/main/java/ca/qc/gouv/QCWallet/MainApplication.java +index 235e7e0..dc77d51 100644 +--- a/app/android/app/src/main/java/ca/qc/gouv/QCWallet/MainApplication.java ++++ b/app/android/app/src/main/java/ca/qc/gouv/QCWallet/MainApplication.java +@@ -1,5 +1,6 @@ + package ca.qc.gouv.portefeuilleqc; + ++import com.bugsnag.android.Bugsnag; + import android.app.Application; + import android.content.Context; + import com.facebook.react.PackageList; +@@ -44,6 +45,7 @@ public class MainApplication extends Application implements ReactApplication { + @Override + public void onCreate() { + super.onCreate(); ++ Bugsnag.start(this); + SoLoader.init(this, /* native exopackage */ false); + } + } +diff --git a/app/android/build.gradle b/app/android/build.gradle +index 0e1bbc0..b2f43ad 100644 +--- a/app/android/build.gradle ++++ b/app/android/build.gradle +@@ -18,6 +18,7 @@ buildscript { + } + dependencies { + classpath("com.android.tools.build:gradle:7.2.1") ++ classpath("com.bugsnag:bugsnag-android-gradle-plugin:7.+") + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +diff --git a/app/index.js b/app/index.js +index 862d989..b6603a4 100644 +--- a/app/index.js ++++ b/app/index.js +@@ -20,6 +20,8 @@ import '@formatjs/intl-datetimeformat/polyfill' + import '@formatjs/intl-datetimeformat/locale-data/en' // locale-data for en + import '@formatjs/intl-datetimeformat/add-all-tz' // Add ALL tz data + ++import BugsnagPluginReactNavigation from '@bugsnag/plugin-react-navigation' ++import Bugsnag from '@bugsnag/react-native' + import { NavigationContainer } from '@react-navigation/native' + import React from 'react' + import { AppRegistry } from 'react-native' +@@ -31,6 +33,16 @@ const { theme } = qcwallet + + const { ColorPallet } = theme + ++Bugsnag.start({ ++ plugins: [new BugsnagPluginReactNavigation()], ++}) ++ ++const ErrorBoundary = Bugsnag.getPlugin('react').createErrorBoundary(React) ++ ++const { createNavigationContainer } = Bugsnag.getPlugin('reactNavigation') ++ ++const BugsnagNavigationContainer = createNavigationContainer(NavigationContainer) ++ + const navigationTheme = { + dark: true, + colors: { +@@ -45,9 +57,11 @@ const navigationTheme = { + + const Base = () => { + return ( +- +- +- ++ ++ ++ ++ ++ + ) + } + AppRegistry.registerComponent(appName, () => Base) +diff --git a/app/ios/AriesBifold.xcodeproj/project.pbxproj b/app/ios/AriesBifold.xcodeproj/project.pbxproj +index 30bf597..2729208 100644 +--- a/app/ios/AriesBifold.xcodeproj/project.pbxproj ++++ b/app/ios/AriesBifold.xcodeproj/project.pbxproj +@@ -72,6 +72,7 @@ + 56A83D5C27D95E24002FE8FE /* BCSans-BoldItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BCSans-BoldItalic.ttf"; path = "../src/assets/fonts/BCSans-BoldItalic.ttf"; sourceTree = ""; }; + 56A83D5D27D95E24002FE8FE /* BCSans-Italic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BCSans-Italic.ttf"; path = "../src/assets/fonts/BCSans-Italic.ttf"; sourceTree = ""; }; + 62AD74D113A13E6D7ECD73DC /* Pods-AriesBifold.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AriesBifold.release.xcconfig"; path = "Target Support Files/Pods-AriesBifold/Pods-AriesBifold.release.xcconfig"; sourceTree = ""; }; ++ 6F99AD4C2A0572BB0073B4BF /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; + 6FAA896629281E3E002D887C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 6FAA896B29281E60002D887C /* fr-CA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fr-CA"; path = "fr-CA.lproj/InfoPlist.strings"; sourceTree = ""; }; + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = AriesBifold/LaunchScreen.storyboard; sourceTree = ""; }; +@@ -166,6 +167,7 @@ + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( ++ 6F99AD4C2A0572BB0073B4BF /* Config.xcconfig */, + 566FB1F1273B158E003E9BEE /* Media.xcassets */, + 13B07FAE1A68108700A75B9A /* AriesBifold */, + 00E356EF1AD99517003FC87E /* AriesBifoldTests */, +@@ -237,6 +239,7 @@ + F5B7D67D9BBF4C5FE692BB29 /* [CP] Embed Pods Frameworks */, + EB396EB204E0E4C9F6307F29 /* [CP] Copy Pods Resources */, + 433E774026557E1B00F569EE /* Embed Frameworks */, ++ 9D840F3D7FAB4E2AA01DCE7C /* Upload source maps to Bugsnag */, + ); + buildRules = ( + ); +@@ -323,7 +326,7 @@ + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; +- shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; ++ shellScript = "export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\"\nset -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + }; + 4EC0E8613979411464217753 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; +@@ -381,6 +384,20 @@ + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AriesBifold-AriesBifoldTests/Pods-AriesBifold-AriesBifoldTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; ++ 9D840F3D7FAB4E2AA01DCE7C /* Upload source maps to Bugsnag */ = { ++ isa = PBXShellScriptBuildPhase; ++ buildActionMask = 2147483647; ++ files = ( ++ ); ++ inputPaths = ( ++ ); ++ name = "Upload source maps to Bugsnag"; ++ outputPaths = ( ++ ); ++ runOnlyForDeploymentPostprocessing = 0; ++ shellPath = /bin/sh; ++ shellScript = "SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh"; ++ }; + B9A54C90D3BE82CD93B12CE2 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; +@@ -638,6 +655,7 @@ + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; ++ baseConfigurationReference = 6F99AD4C2A0572BB0073B4BF /* Config.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; +@@ -703,6 +721,7 @@ + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; ++ baseConfigurationReference = 6F99AD4C2A0572BB0073B4BF /* Config.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; +diff --git a/app/ios/AriesBifold.xcodeproj/xcshareddata/xcschemes/AriesBifold.xcscheme b/app/ios/AriesBifold.xcodeproj/xcshareddata/xcschemes/AriesBifold.xcscheme +index bc517c6..bfa2bdd 100644 +--- a/app/ios/AriesBifold.xcodeproj/xcshareddata/xcschemes/AriesBifold.xcscheme ++++ b/app/ios/AriesBifold.xcodeproj/xcshareddata/xcschemes/AriesBifold.xcscheme +@@ -1,10 +1,28 @@ + + ++ version = "1.7"> + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + #import "AppDelegate.h" + + #import +@@ -10,7 +11,9 @@ @implementation AppDelegate + - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions + { + +- RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; ++ [Bugsnag start]; ++ ++RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; + RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge + moduleName:@"QCWallet" + initialProperties:nil]; +diff --git a/app/ios/AriesBifold/Info.plist b/app/ios/AriesBifold/Info.plist +index f3b7f9e..d70e01d 100644 +--- a/app/ios/AriesBifold/Info.plist ++++ b/app/ios/AriesBifold/Info.plist +@@ -81,5 +81,10 @@ + + + ++ bugsnag ++ ++ apiKey ++ $(BUGSNAG_API_KEY) ++ + + +diff --git a/app/ios/Config.xcconfig b/app/ios/Config.xcconfig +new file mode 100644 +index 0000000..907ca1e +--- /dev/null ++++ b/app/ios/Config.xcconfig +@@ -0,0 +1,10 @@ ++// ++// Config.xcconfig ++// AriesBifold ++// ++// Created by jean-christophe.drouin@mcn.gouv.qc.ca on 2023-05-05. ++// ++ ++// Configuration settings file format documentation can be found at: ++// https://help.apple.com/xcode/#/dev745c5c974 ++#include? "tmp.xcconfig" +diff --git a/app/ios/Podfile.lock b/app/ios/Podfile.lock +index e995bdf..7048a90 100644 +--- a/app/ios/Podfile.lock ++++ b/app/ios/Podfile.lock +@@ -1,5 +1,7 @@ + PODS: + - boost (1.76.0) ++ - BugsnagReactNative (7.20.2): ++ - React-Core + - CatCrypto (0.3.2) + - CocoaAsyncSocket (7.6.5) + - DoubleConversion (1.1.6) +@@ -387,6 +389,7 @@ PODS: + + DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) ++ - "BugsnagReactNative (from `../node_modules/@bugsnag/react-native`)" + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) +@@ -458,6 +461,8 @@ SPEC REPOS: + EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" ++ BugsnagReactNative: ++ :path: "../node_modules/@bugsnag/react-native" + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + FBLazyVector: +@@ -571,6 +576,7 @@ EXTERNAL SOURCES: + + SPEC CHECKSUMS: + boost: a7c83b31436843459a1961bfd74b96033dc77234 ++ BugsnagReactNative: bf6f4ebababa8536726b3014c7d3e4af8c53d488 + CatCrypto: a477899b6be4954e75be4897e732da098cc0a5a8 + CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 + DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 +@@ -634,4 +640,4 @@ SPEC CHECKSUMS: + + PODFILE CHECKSUM: ac6fb920404abfaf943a3b94ff54624a7f9c89e8 + +-COCOAPODS: 1.11.3 ++COCOAPODS: 1.12.1 +diff --git a/app/package-lock.json b/app/package-lock.json +index 307f351..fba0f9d 100644 +--- a/app/package-lock.json ++++ b/app/package-lock.json +@@ -13,6 +13,8 @@ + "@aries-framework/core": "^0.3.3", + "@aries-framework/react-hooks": "^0.4.0", + "@aries-framework/react-native": "^0.3.2", ++ "@bugsnag/plugin-react-navigation": "^7.19.0", ++ "@bugsnag/react-native": "^7.20.2", + "@formatjs/intl-datetimeformat": "4.2.4", + "@formatjs/intl-displaynames": "5.2.4", + "@formatjs/intl-getcanonicallocales": "1.7.3", +@@ -77,6 +79,7 @@ + "devDependencies": { + "@babel/core": "7.15.5", + "@babel/runtime": "7.15.4", ++ "@bugsnag/source-maps": "^2.3.1", + "@commitlint/cli": "^11.0.0", + "@react-native-community/eslint-config": "^2.0.0", + "@storybook/addon-actions": "^5.3.21", +@@ -392,7 +395,7 @@ + }, + "peerDependencies": { + "@aries-framework/core": "^0.3.3", +- "@aries-framework/react-hooks": "^0.4.0", ++ "@aries-framework/react-hooks": "^0.4.2", + "@aries-framework/react-native": "^0.3.2", + "@formatjs/intl-datetimeformat": "^4.2.3", + "@formatjs/intl-displaynames": "^5.2.3", +@@ -1246,6 +1249,8 @@ + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", ++ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { +@@ -1285,6 +1290,8 @@ + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", ++ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "license": "MIT", + "dependencies": { +@@ -1421,6 +1428,8 @@ + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", ++ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { +@@ -2149,6 +2158,8 @@ + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", ++ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", ++ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "license": "MIT", + "dependencies": { +@@ -2280,6 +2291,179 @@ + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, ++ "node_modules/@bugsnag/core": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", ++ "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", ++ "dependencies": { ++ "@bugsnag/cuid": "^3.0.0", ++ "@bugsnag/safe-json-stringify": "^6.0.0", ++ "error-stack-parser": "^2.0.3", ++ "iserror": "0.0.2", ++ "stack-generator": "^2.0.3" ++ } ++ }, ++ "node_modules/@bugsnag/cuid": { ++ "version": "3.0.2", ++ "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", ++ "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" ++ }, ++ "node_modules/@bugsnag/delivery-react-native": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/delivery-react-native/-/delivery-react-native-7.19.0.tgz", ++ "integrity": "sha512-Zzl3VOwLDU4KHmf3VweyfNeJcQgL0NzbWG+OCxjCYen093Q4sxNTpWAVBCrYPRjQ2Sq3+D3+YbQg5UUrHL7kig==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ } ++ }, ++ "node_modules/@bugsnag/plugin-console-breadcrumbs": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-console-breadcrumbs/-/plugin-console-breadcrumbs-7.19.0.tgz", ++ "integrity": "sha512-ZHqPAK0WpbvWjj2wwSV8+C8+K9TOyQsfZnRJ7lIadbeUUJORmFRnG0vUHKBvwxMP7bqCj8fOe/S0kKF3dfMMKA==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ } ++ }, ++ "node_modules/@bugsnag/plugin-network-breadcrumbs": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-network-breadcrumbs/-/plugin-network-breadcrumbs-7.19.0.tgz", ++ "integrity": "sha512-Farc0XuUoxv10kJE65zfgZlqujR7TDu8QjwxA4YDxEE41kFM8TAw0CAK15WkQK1UTsNACiiAETZGyU279eB65Q==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ } ++ }, ++ "node_modules/@bugsnag/plugin-react": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react/-/plugin-react-7.19.0.tgz", ++ "integrity": "sha512-owC4QXYJWGllMoOPcH5P7sbDIDuFLMCbjGAU6FwH5mBMObSQo+1ViSKImlTJQUFXATM8ySISTBVt7w3C6FFHng==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ }, ++ "peerDependenciesMeta": { ++ "@bugsnag/core": { ++ "optional": true ++ } ++ } ++ }, ++ "node_modules/@bugsnag/plugin-react-native-client-sync": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-client-sync/-/plugin-react-native-client-sync-7.19.0.tgz", ++ "integrity": "sha512-WyK5pZuIzqVrY0h0HimwuODCo9ty9AyDY3q1pmwjrz2y8JTT21nnwUtHybLsp5Rl2oJR4tG06QkWmazgHDkWdA==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ } ++ }, ++ "node_modules/@bugsnag/plugin-react-native-event-sync": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-event-sync/-/plugin-react-native-event-sync-7.19.0.tgz", ++ "integrity": "sha512-OD73WFkDJAq8AheN2Jap+d17M1mPbEBc1Aulz9FCLs//QwlM2IOij8oarB1iF/wgK6FnIgLFEBPTZpGHuZUsyQ==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ } ++ }, ++ "node_modules/@bugsnag/plugin-react-native-global-error-handler": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-global-error-handler/-/plugin-react-native-global-error-handler-7.19.0.tgz", ++ "integrity": "sha512-zf+KIHqGEAs2ekAzJCTS0rM1nKrmpIfznBhn72xZJwyfYrh0wbvjZjClDEwxDZ24uNVUUHrIymzdqxpHqVb0lg==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ } ++ }, ++ "node_modules/@bugsnag/plugin-react-native-hermes": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-hermes/-/plugin-react-native-hermes-7.19.0.tgz", ++ "integrity": "sha512-6SGTSR6NMS2t8j02ZQ6FlA+K/nKkZqvGA+8A7WS/0M8HAShzyoMpZH10kGrU2dcCaiEtmD2T6OGBSbpF+385Dg==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ } ++ }, ++ "node_modules/@bugsnag/plugin-react-native-session": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-session/-/plugin-react-native-session-7.19.0.tgz", ++ "integrity": "sha512-PVwsUstedp9wTqJU/IKdCaMFKP2YrqHXoeBtqRTQ7FFyr0K8wsiW7nZP2jM31VS388hZWSWBlHQPA/3LZ49tNQ==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ } ++ }, ++ "node_modules/@bugsnag/plugin-react-native-unhandled-rejection": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-unhandled-rejection/-/plugin-react-native-unhandled-rejection-7.19.0.tgz", ++ "integrity": "sha512-+XDk0OoeM6MZhBh7kEalbRwFuhCZST6Y1jOostfz0fhrmT4FdgQYi1FWcPNsUTcjqv7M48pOFZNx8yWI0lGaYg==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0" ++ } ++ }, ++ "node_modules/@bugsnag/plugin-react-navigation": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-navigation/-/plugin-react-navigation-7.19.0.tgz", ++ "integrity": "sha512-cDuHwykruivUZFtaIt5/MhbfRyH20X0XFrW071V+5M+rXAnpJa2AwppXwEuP7DWeER38hd2O8VqaUU2Ijes2Lw==", ++ "peerDependencies": { ++ "@bugsnag/core": "^7.0.0", ++ "@react-navigation/native": "^5.0 || ^6.0" ++ }, ++ "peerDependenciesMeta": { ++ "@bugsnag/core": { ++ "optional": true ++ } ++ } ++ }, ++ "node_modules/@bugsnag/react-native": { ++ "version": "7.20.2", ++ "resolved": "https://registry.npmjs.org/@bugsnag/react-native/-/react-native-7.20.2.tgz", ++ "integrity": "sha512-pvzFZA/7PzChLgrSsynZFl/lBOcY+X76sLbniJz7S3Lcrdc5+NY5fP+AVoZH9mqNaob6OSiALubUVLpPeirivg==", ++ "dependencies": { ++ "@bugsnag/core": "^7.19.0", ++ "@bugsnag/delivery-react-native": "^7.19.0", ++ "@bugsnag/plugin-console-breadcrumbs": "^7.19.0", ++ "@bugsnag/plugin-network-breadcrumbs": "^7.19.0", ++ "@bugsnag/plugin-react": "^7.19.0", ++ "@bugsnag/plugin-react-native-client-sync": "^7.19.0", ++ "@bugsnag/plugin-react-native-event-sync": "^7.19.0", ++ "@bugsnag/plugin-react-native-global-error-handler": "^7.19.0", ++ "@bugsnag/plugin-react-native-hermes": "^7.19.0", ++ "@bugsnag/plugin-react-native-session": "^7.19.0", ++ "@bugsnag/plugin-react-native-unhandled-rejection": "^7.19.0", ++ "iserror": "^0.0.2" ++ } ++ }, ++ "node_modules/@bugsnag/safe-json-stringify": { ++ "version": "6.0.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", ++ "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" ++ }, ++ "node_modules/@bugsnag/source-maps": { ++ "version": "2.3.1", ++ "resolved": "https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.1.tgz", ++ "integrity": "sha512-9xJTcf5+W7+y1fQBftSOste/3ORi+d5EeCCMdvaHSX69MKQP0lrDiSYpLwX/ErcXrTbvu7nimGGKJP2vBdF7zQ==", ++ "dev": true, ++ "dependencies": { ++ "command-line-args": "^5.1.1", ++ "command-line-usage": "^6.1.0", ++ "concat-stream": "^2.0.0", ++ "consola": "^2.15.0", ++ "form-data": "^3.0.0", ++ "glob": "^7.1.6", ++ "read-pkg-up": "^7.0.1" ++ }, ++ "bin": { ++ "bugsnag-source-maps": "bin/cli" ++ } ++ }, ++ "node_modules/@bugsnag/source-maps/node_modules/concat-stream": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", ++ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", ++ "dev": true, ++ "engines": [ ++ "node >= 6.0" ++ ], ++ "dependencies": { ++ "buffer-from": "^1.0.0", ++ "inherits": "^2.0.3", ++ "readable-stream": "^3.0.2", ++ "typedarray": "^0.0.6" ++ } ++ }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", +@@ -9138,6 +9322,15 @@ + "node": ">=0.10.0" + } + }, ++ "node_modules/array-back": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", ++ "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", ++ "dev": true, ++ "engines": { ++ "node": ">=6" ++ } ++ }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", +@@ -9195,6 +9388,8 @@ + }, + "node_modules/array-union": { + "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", ++ "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "license": "MIT", + "dependencies": { +@@ -9206,6 +9401,8 @@ + }, + "node_modules/array-uniq": { + "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", ++ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "license": "MIT", + "engines": { +@@ -11810,6 +12007,54 @@ + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "license": "MIT" + }, ++ "node_modules/command-line-args": { ++ "version": "5.2.1", ++ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", ++ "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", ++ "dev": true, ++ "dependencies": { ++ "array-back": "^3.1.0", ++ "find-replace": "^3.0.0", ++ "lodash.camelcase": "^4.3.0", ++ "typical": "^4.0.0" ++ }, ++ "engines": { ++ "node": ">=4.0.0" ++ } ++ }, ++ "node_modules/command-line-usage": { ++ "version": "6.1.3", ++ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", ++ "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", ++ "dev": true, ++ "dependencies": { ++ "array-back": "^4.0.2", ++ "chalk": "^2.4.2", ++ "table-layout": "^1.0.2", ++ "typical": "^5.2.0" ++ }, ++ "engines": { ++ "node": ">=8.0.0" ++ } ++ }, ++ "node_modules/command-line-usage/node_modules/array-back": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", ++ "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/command-line-usage/node_modules/typical": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", ++ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", +@@ -11979,6 +12224,12 @@ + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, ++ "node_modules/consola": { ++ "version": "2.15.3", ++ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", ++ "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", ++ "dev": true ++ }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", +@@ -12832,6 +13083,15 @@ + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, ++ "node_modules/deep-extend": { ++ "version": "0.6.0", ++ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", ++ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", ++ "dev": true, ++ "engines": { ++ "node": ">=4.0.0" ++ } ++ }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", +@@ -15562,6 +15822,18 @@ + "node": ">=6" + } + }, ++ "node_modules/find-replace": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", ++ "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", ++ "dev": true, ++ "dependencies": { ++ "array-back": "^3.0.1" ++ }, ++ "engines": { ++ "node": ">=4.0.0" ++ } ++ }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", +@@ -17232,6 +17504,8 @@ + }, + "node_modules/ignore": { + "version": "3.3.10", ++ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", ++ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true, + "license": "MIT" + }, +@@ -17633,6 +17907,8 @@ + }, + "node_modules/interpret": { + "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", ++ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "engines": { +@@ -17699,6 +17975,8 @@ + }, + "node_modules/is-arguments": { + "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", ++ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", +@@ -18256,6 +18534,11 @@ + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, ++ "node_modules/iserror": { ++ "version": "0.0.2", ++ "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", ++ "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==" ++ }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", +@@ -23120,6 +23403,12 @@ + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", + "license": "MIT" + }, ++ "node_modules/lodash.camelcase": { ++ "version": "4.3.0", ++ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", ++ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", ++ "dev": true ++ }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", +@@ -25108,6 +25397,8 @@ + }, + "node_modules/object-is": { + "version": "1.1.5", ++ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", ++ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", +@@ -25670,6 +25961,8 @@ + }, + "node_modules/path-type": { + "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", ++ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { +@@ -25681,6 +25974,8 @@ + }, + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", ++ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { +@@ -26174,6 +26469,8 @@ + }, + "node_modules/process": { + "version": "0.11.10", ++ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", ++ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { +@@ -28577,6 +28874,8 @@ + }, + "node_modules/rechoir": { + "version": "0.6.2", ++ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", ++ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" +@@ -28622,6 +28921,15 @@ + "node": ">=8" + } + }, ++ "node_modules/reduce-flatten": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", ++ "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", ++ "dev": true, ++ "engines": { ++ "node": ">=6" ++ } ++ }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", +@@ -29687,6 +29995,8 @@ + }, + "node_modules/shelljs": { + "version": "0.8.5", ++ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", ++ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { +@@ -30154,6 +30464,14 @@ + "dev": true, + "license": "MIT" + }, ++ "node_modules/stack-generator": { ++ "version": "2.0.10", ++ "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", ++ "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", ++ "dependencies": { ++ "stackframe": "^1.3.4" ++ } ++ }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", +@@ -30176,8 +30494,9 @@ + } + }, + "node_modules/stackframe": { +- "version": "1.2.1", +- "license": "MIT" ++ "version": "1.3.4", ++ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", ++ "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", +@@ -30914,6 +31233,39 @@ + "node": ">=10.0.0" + } + }, ++ "node_modules/table-layout": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", ++ "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", ++ "dev": true, ++ "dependencies": { ++ "array-back": "^4.0.1", ++ "deep-extend": "~0.6.0", ++ "typical": "^5.2.0", ++ "wordwrapjs": "^4.0.0" ++ }, ++ "engines": { ++ "node": ">=8.0.0" ++ } ++ }, ++ "node_modules/table-layout/node_modules/array-back": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", ++ "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/table-layout/node_modules/typical": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", ++ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "dev": true, +@@ -31819,6 +32171,15 @@ + "node": ">=4.2.0" + } + }, ++ "node_modules/typical": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", ++ "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/ua-parser-js": { + "version": "0.7.31", + "funding": [ +@@ -33107,6 +33468,28 @@ + "node": ">=0.10.0" + } + }, ++ "node_modules/wordwrapjs": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", ++ "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", ++ "dev": true, ++ "dependencies": { ++ "reduce-flatten": "^2.0.0", ++ "typical": "^5.2.0" ++ }, ++ "engines": { ++ "node": ">=8.0.0" ++ } ++ }, ++ "node_modules/wordwrapjs/node_modules/typical": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", ++ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", +@@ -33917,6 +34300,8 @@ + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", ++ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" +@@ -33938,6 +34323,8 @@ + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", ++ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" +@@ -34025,6 +34412,8 @@ + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", ++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", ++ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" +@@ -34432,6 +34821,8 @@ + }, + "@babel/preset-modules": { + "version": "0.1.5", ++ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", ++ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", +@@ -34530,6 +34921,131 @@ + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, ++ "@bugsnag/core": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", ++ "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", ++ "requires": { ++ "@bugsnag/cuid": "^3.0.0", ++ "@bugsnag/safe-json-stringify": "^6.0.0", ++ "error-stack-parser": "^2.0.3", ++ "iserror": "0.0.2", ++ "stack-generator": "^2.0.3" ++ } ++ }, ++ "@bugsnag/cuid": { ++ "version": "3.0.2", ++ "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", ++ "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" ++ }, ++ "@bugsnag/delivery-react-native": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/delivery-react-native/-/delivery-react-native-7.19.0.tgz", ++ "integrity": "sha512-Zzl3VOwLDU4KHmf3VweyfNeJcQgL0NzbWG+OCxjCYen093Q4sxNTpWAVBCrYPRjQ2Sq3+D3+YbQg5UUrHL7kig==" ++ }, ++ "@bugsnag/plugin-console-breadcrumbs": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-console-breadcrumbs/-/plugin-console-breadcrumbs-7.19.0.tgz", ++ "integrity": "sha512-ZHqPAK0WpbvWjj2wwSV8+C8+K9TOyQsfZnRJ7lIadbeUUJORmFRnG0vUHKBvwxMP7bqCj8fOe/S0kKF3dfMMKA==" ++ }, ++ "@bugsnag/plugin-network-breadcrumbs": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-network-breadcrumbs/-/plugin-network-breadcrumbs-7.19.0.tgz", ++ "integrity": "sha512-Farc0XuUoxv10kJE65zfgZlqujR7TDu8QjwxA4YDxEE41kFM8TAw0CAK15WkQK1UTsNACiiAETZGyU279eB65Q==" ++ }, ++ "@bugsnag/plugin-react": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react/-/plugin-react-7.19.0.tgz", ++ "integrity": "sha512-owC4QXYJWGllMoOPcH5P7sbDIDuFLMCbjGAU6FwH5mBMObSQo+1ViSKImlTJQUFXATM8ySISTBVt7w3C6FFHng==" ++ }, ++ "@bugsnag/plugin-react-native-client-sync": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-client-sync/-/plugin-react-native-client-sync-7.19.0.tgz", ++ "integrity": "sha512-WyK5pZuIzqVrY0h0HimwuODCo9ty9AyDY3q1pmwjrz2y8JTT21nnwUtHybLsp5Rl2oJR4tG06QkWmazgHDkWdA==" ++ }, ++ "@bugsnag/plugin-react-native-event-sync": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-event-sync/-/plugin-react-native-event-sync-7.19.0.tgz", ++ "integrity": "sha512-OD73WFkDJAq8AheN2Jap+d17M1mPbEBc1Aulz9FCLs//QwlM2IOij8oarB1iF/wgK6FnIgLFEBPTZpGHuZUsyQ==" ++ }, ++ "@bugsnag/plugin-react-native-global-error-handler": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-global-error-handler/-/plugin-react-native-global-error-handler-7.19.0.tgz", ++ "integrity": "sha512-zf+KIHqGEAs2ekAzJCTS0rM1nKrmpIfznBhn72xZJwyfYrh0wbvjZjClDEwxDZ24uNVUUHrIymzdqxpHqVb0lg==" ++ }, ++ "@bugsnag/plugin-react-native-hermes": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-hermes/-/plugin-react-native-hermes-7.19.0.tgz", ++ "integrity": "sha512-6SGTSR6NMS2t8j02ZQ6FlA+K/nKkZqvGA+8A7WS/0M8HAShzyoMpZH10kGrU2dcCaiEtmD2T6OGBSbpF+385Dg==" ++ }, ++ "@bugsnag/plugin-react-native-session": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-session/-/plugin-react-native-session-7.19.0.tgz", ++ "integrity": "sha512-PVwsUstedp9wTqJU/IKdCaMFKP2YrqHXoeBtqRTQ7FFyr0K8wsiW7nZP2jM31VS388hZWSWBlHQPA/3LZ49tNQ==" ++ }, ++ "@bugsnag/plugin-react-native-unhandled-rejection": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-native-unhandled-rejection/-/plugin-react-native-unhandled-rejection-7.19.0.tgz", ++ "integrity": "sha512-+XDk0OoeM6MZhBh7kEalbRwFuhCZST6Y1jOostfz0fhrmT4FdgQYi1FWcPNsUTcjqv7M48pOFZNx8yWI0lGaYg==" ++ }, ++ "@bugsnag/plugin-react-navigation": { ++ "version": "7.19.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/plugin-react-navigation/-/plugin-react-navigation-7.19.0.tgz", ++ "integrity": "sha512-cDuHwykruivUZFtaIt5/MhbfRyH20X0XFrW071V+5M+rXAnpJa2AwppXwEuP7DWeER38hd2O8VqaUU2Ijes2Lw==" ++ }, ++ "@bugsnag/react-native": { ++ "version": "7.20.2", ++ "resolved": "https://registry.npmjs.org/@bugsnag/react-native/-/react-native-7.20.2.tgz", ++ "integrity": "sha512-pvzFZA/7PzChLgrSsynZFl/lBOcY+X76sLbniJz7S3Lcrdc5+NY5fP+AVoZH9mqNaob6OSiALubUVLpPeirivg==", ++ "requires": { ++ "@bugsnag/core": "^7.19.0", ++ "@bugsnag/delivery-react-native": "^7.19.0", ++ "@bugsnag/plugin-console-breadcrumbs": "^7.19.0", ++ "@bugsnag/plugin-network-breadcrumbs": "^7.19.0", ++ "@bugsnag/plugin-react": "^7.19.0", ++ "@bugsnag/plugin-react-native-client-sync": "^7.19.0", ++ "@bugsnag/plugin-react-native-event-sync": "^7.19.0", ++ "@bugsnag/plugin-react-native-global-error-handler": "^7.19.0", ++ "@bugsnag/plugin-react-native-hermes": "^7.19.0", ++ "@bugsnag/plugin-react-native-session": "^7.19.0", ++ "@bugsnag/plugin-react-native-unhandled-rejection": "^7.19.0", ++ "iserror": "^0.0.2" ++ } ++ }, ++ "@bugsnag/safe-json-stringify": { ++ "version": "6.0.0", ++ "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", ++ "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" ++ }, ++ "@bugsnag/source-maps": { ++ "version": "2.3.1", ++ "resolved": "https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.1.tgz", ++ "integrity": "sha512-9xJTcf5+W7+y1fQBftSOste/3ORi+d5EeCCMdvaHSX69MKQP0lrDiSYpLwX/ErcXrTbvu7nimGGKJP2vBdF7zQ==", ++ "dev": true, ++ "requires": { ++ "command-line-args": "^5.1.1", ++ "command-line-usage": "^6.1.0", ++ "concat-stream": "^2.0.0", ++ "consola": "^2.15.0", ++ "form-data": "^3.0.0", ++ "glob": "^7.1.6", ++ "read-pkg-up": "^7.0.1" ++ }, ++ "dependencies": { ++ "concat-stream": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", ++ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", ++ "dev": true, ++ "requires": { ++ "buffer-from": "^1.0.0", ++ "inherits": "^2.0.3", ++ "readable-stream": "^3.0.2", ++ "typedarray": "^0.0.6" ++ } ++ } ++ } ++ }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", +@@ -39836,6 +40352,12 @@ + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" + }, ++ "array-back": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", ++ "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", ++ "dev": true ++ }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", +@@ -39880,6 +40402,8 @@ + }, + "array-union": { + "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", ++ "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" +@@ -39887,6 +40411,8 @@ + }, + "array-uniq": { + "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", ++ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "array-unique": { +@@ -41910,6 +42436,44 @@ + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, ++ "command-line-args": { ++ "version": "5.2.1", ++ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", ++ "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", ++ "dev": true, ++ "requires": { ++ "array-back": "^3.1.0", ++ "find-replace": "^3.0.0", ++ "lodash.camelcase": "^4.3.0", ++ "typical": "^4.0.0" ++ } ++ }, ++ "command-line-usage": { ++ "version": "6.1.3", ++ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", ++ "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", ++ "dev": true, ++ "requires": { ++ "array-back": "^4.0.2", ++ "chalk": "^2.4.2", ++ "table-layout": "^1.0.2", ++ "typical": "^5.2.0" ++ }, ++ "dependencies": { ++ "array-back": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", ++ "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", ++ "dev": true ++ }, ++ "typical": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", ++ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", ++ "dev": true ++ } ++ } ++ }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", +@@ -42056,6 +42620,12 @@ + } + } + }, ++ "consola": { ++ "version": "2.15.3", ++ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", ++ "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", ++ "dev": true ++ }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", +@@ -42712,6 +43282,12 @@ + } + } + }, ++ "deep-extend": { ++ "version": "0.6.0", ++ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", ++ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", ++ "dev": true ++ }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", +@@ -44742,6 +45318,15 @@ + "pkg-dir": "^3.0.0" + } + }, ++ "find-replace": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", ++ "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", ++ "dev": true, ++ "requires": { ++ "array-back": "^3.0.1" ++ } ++ }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", +@@ -46002,6 +46587,8 @@ + }, + "ignore": { + "version": "3.3.10", ++ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", ++ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "image-size": { +@@ -46294,6 +46881,8 @@ + }, + "interpret": { + "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", ++ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "invariant": { +@@ -46339,6 +46928,8 @@ + }, + "is-arguments": { + "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", ++ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" +@@ -46695,6 +47286,11 @@ + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, ++ "iserror": { ++ "version": "0.0.2", ++ "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", ++ "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==" ++ }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", +@@ -50212,6 +50808,12 @@ + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==" + }, ++ "lodash.camelcase": { ++ "version": "4.3.0", ++ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", ++ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", ++ "dev": true ++ }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", +@@ -51781,6 +52383,8 @@ + }, + "object-is": { + "version": "1.1.5", ++ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", ++ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" +@@ -52184,6 +52788,8 @@ + }, + "path-type": { + "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", ++ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" +@@ -52191,6 +52797,8 @@ + "dependencies": { + "pify": { + "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", ++ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } +@@ -52542,6 +53150,8 @@ + }, + "process": { + "version": "0.11.10", ++ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", ++ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { +@@ -54335,6 +54945,8 @@ + }, + "rechoir": { + "version": "0.6.2", ++ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", ++ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "requires": { + "resolve": "^1.1.6" +@@ -54370,6 +54982,12 @@ + "strip-indent": "^3.0.0" + } + }, ++ "reduce-flatten": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", ++ "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", ++ "dev": true ++ }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", +@@ -55167,6 +55785,8 @@ + }, + "shelljs": { + "version": "0.8.5", ++ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", ++ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "requires": { + "glob": "^7.0.0", +@@ -55539,6 +56159,14 @@ + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, ++ "stack-generator": { ++ "version": "2.0.10", ++ "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", ++ "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", ++ "requires": { ++ "stackframe": "^1.3.4" ++ } ++ }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", +@@ -55557,7 +56185,9 @@ + } + }, + "stackframe": { +- "version": "1.2.1" ++ "version": "1.3.4", ++ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", ++ "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "stacktrace-parser": { + "version": "0.1.10", +@@ -56183,6 +56813,32 @@ + } + } + }, ++ "table-layout": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", ++ "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", ++ "dev": true, ++ "requires": { ++ "array-back": "^4.0.1", ++ "deep-extend": "~0.6.0", ++ "typical": "^5.2.0", ++ "wordwrapjs": "^4.0.0" ++ }, ++ "dependencies": { ++ "array-back": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", ++ "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", ++ "dev": true ++ }, ++ "typical": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", ++ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", ++ "dev": true ++ } ++ } ++ }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", +@@ -56788,6 +57444,12 @@ + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "dev": true + }, ++ "typical": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", ++ "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", ++ "dev": true ++ }, + "ua-parser-js": { + "version": "0.7.31" + }, +@@ -57779,6 +58441,24 @@ + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, ++ "wordwrapjs": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", ++ "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", ++ "dev": true, ++ "requires": { ++ "reduce-flatten": "^2.0.0", ++ "typical": "^5.2.0" ++ }, ++ "dependencies": { ++ "typical": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", ++ "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", ++ "dev": true ++ } ++ } ++ }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", +@@ -57992,4 +58672,4 @@ + "devOptional": true + } + } +-} +\ No newline at end of file ++} +diff --git a/app/package.json b/app/package.json +index d2ee40b..4b9eadd 100644 +--- a/app/package.json ++++ b/app/package.json +@@ -43,6 +43,8 @@ + "@aries-framework/core": "^0.3.3", + "@aries-framework/react-hooks": "^0.4.0", + "@aries-framework/react-native": "^0.3.2", ++ "@bugsnag/plugin-react-navigation": "^7.19.0", ++ "@bugsnag/react-native": "^7.20.2", + "@formatjs/intl-datetimeformat": "4.2.4", + "@formatjs/intl-displaynames": "5.2.4", + "@formatjs/intl-getcanonicallocales": "1.7.3", +@@ -107,6 +109,7 @@ + "devDependencies": { + "@babel/core": "7.15.5", + "@babel/runtime": "7.15.4", ++ "@bugsnag/source-maps": "^2.3.1", + "@commitlint/cli": "^11.0.0", + "@react-native-community/eslint-config": "^2.0.0", + "@storybook/addon-actions": "^5.3.21", +diff --git a/app/src/screens/Splash.tsx b/app/src/screens/Splash.tsx +index e59d3f7..8dc3273 100644 +--- a/app/src/screens/Splash.tsx ++++ b/app/src/screens/Splash.tsx +@@ -9,6 +9,7 @@ import { + } from '@aries-framework/core' + import { useAgent } from '@aries-framework/react-hooks' + import { agentDependencies } from '@aries-framework/react-native' ++import Bugsnag from '@bugsnag/react-native' + import AsyncStorage from '@react-native-async-storage/async-storage' + import { useNavigation } from '@react-navigation/core' + import { CommonActions } from '@react-navigation/native' +@@ -149,7 +150,8 @@ const Splash: React.FC = () => { + if (data) { + return JSON.parse(data) + } +- } catch { ++ } catch (e: unknown) { ++ Bugsnag.notify(e as Error) + return + } + } +@@ -272,6 +274,7 @@ const Splash: React.FC = () => { + }) + ) + } catch (e: unknown) { ++ Bugsnag.notify(e as Error) + setInitErrorType(InitErrorTypes.Onboarding) + setInitError(e as Error) + } +@@ -335,6 +338,7 @@ const Splash: React.FC = () => { + }) + ) + } catch (e: unknown) { ++ Bugsnag.notify(e as Error) + setInitErrorType(InitErrorTypes.Agent) + setInitError(e as Error) + }