xiongzhu 3 anos atrás
pai
commit
ce2cfdd63c

+ 2 - 0
android/app/build.gradle

@@ -39,6 +39,8 @@ dependencies {
     androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
     androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
     implementation project(':capacitor-cordova-android-plugins')
+    implementation 'com.google.android.gms:play-services-base:15.0.1'
+    implementation 'com.google.android.gms:play-services-ads:15.0.1'
 }
 
 apply from: 'capacitor.build.gradle'

+ 0 - 1
android/app/capacitor.build.gradle

@@ -25,7 +25,6 @@ dependencies {
     implementation project(':capacitor-splash-screen')
     implementation project(':capacitor-status-bar')
     implementation project(':appsflyer-capacitor-plugin')
-    implementation project(':capacitor-openinstall')
 
 }
 

+ 15 - 1
android/app/src/main/AndroidManifest.xml

@@ -17,7 +17,7 @@
             android:name="com.bigauction.mobile.MainActivity"
             android:label="@string/title_activity_main"
             android:theme="@style/AppTheme.NoActionBarLaunch"
-            android:launchMode="singleTask"
+            android:launchMode="singleInstance"
             android:exported="true">
 
             <intent-filter>
@@ -30,6 +30,20 @@
                 <category android:name="android.intent.category.BROWSABLE"/>
                 <data android:scheme="crgkm2"/>
             </intent-filter>
+            <intent-filter  android:autoVerify="true">
+                <action android:name="android.intent.action.VIEW" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.BROWSABLE" />
+                <data android:scheme="https"
+                    android:host="ifirstcash.onelink.me"
+                    android:pathPrefix="/cQAJ" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.BROWSABLE" />
+                <data android:scheme="firstcash" />
+            </intent-filter>
         </activity>
 
         <provider

+ 0 - 3
android/capacitor.settings.gradle

@@ -49,6 +49,3 @@ project(':capacitor-status-bar').projectDir = new File('../node_modules/@capacit
 
 include ':appsflyer-capacitor-plugin'
 project(':appsflyer-capacitor-plugin').projectDir = new File('../node_modules/appsflyer-capacitor-plugin/android')
-
-include ':capacitor-openinstall'
-project(':capacitor-openinstall').projectDir = new File('../../../capacitor/capacitor-openinstall/android')

+ 12 - 0
ios/App/App.xcodeproj/project.pbxproj

@@ -19,6 +19,7 @@
 
 /* Begin PBXFileReference section */
 		2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = "<group>"; };
+		3ADCC9692973F95500429B0F /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = "<group>"; };
 		50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = "<group>"; };
 		504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
@@ -73,6 +74,7 @@
 		504EC3061FED79650016851F /* App */ = {
 			isa = PBXGroup;
 			children = (
+				3ADCC9692973F95500429B0F /* App.entitlements */,
 				50379B222058CBB4000EE86E /* capacitor.config.json */,
 				504EC3071FED79650016851F /* AppDelegate.swift */,
 				504EC30B1FED79650016851F /* Main.storyboard */,
@@ -237,6 +239,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
 				CLANG_ANALYZER_NONNULL = YES;
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
@@ -294,6 +297,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
 				CLANG_ANALYZER_NONNULL = YES;
 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
@@ -345,8 +349,11 @@
 			baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
+				CODE_SIGN_ENTITLEMENTS = App/App.entitlements;
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
+				DEFINES_MODULE = NO;
 				DEVELOPMENT_TEAM = 72P5Y6N578;
 				INFOPLIST_FILE = App/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
@@ -356,6 +363,7 @@
 				PRODUCT_BUNDLE_IDENTIFIER = com.bigauction.mobile;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_OBJC_BRIDGING_HEADER = "";
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
@@ -366,8 +374,11 @@
 			baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
+				CODE_SIGN_ENTITLEMENTS = App/App.entitlements;
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
+				DEFINES_MODULE = NO;
 				DEVELOPMENT_TEAM = 72P5Y6N578;
 				INFOPLIST_FILE = App/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
@@ -376,6 +387,7 @@
 				PRODUCT_BUNDLE_IDENTIFIER = com.bigauction.mobile;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
+				SWIFT_OBJC_BRIDGING_HEADER = "";
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};

+ 3 - 1
ios/App/App/App.entitlements

@@ -3,6 +3,8 @@
 <plist version="1.0">
 <dict>
 	<key>com.apple.developer.associated-domains</key>
-	<array/>
+	<array>
+		<string>applinks:ifirstcash.onelink.me</string>
+	</array>
 </dict>
 </plist>

+ 0 - 1
ios/App/App/AppDelegate.swift

@@ -1,6 +1,5 @@
 import UIKit
 import Capacitor
-
 @UIApplicationMain
 class AppDelegate: UIResponder, UIApplicationDelegate {
 

+ 16 - 3
ios/App/App/Info.plist

@@ -5,7 +5,7 @@
 	<key>CFBundleDevelopmentRegion</key>
 	<string>en</string>
 	<key>CFBundleDisplayName</key>
-        <string>FirstCash</string>
+	<string>FirstCash</string>
 	<key>CFBundleExecutable</key>
 	<string>$(EXECUTABLE_NAME)</string>
 	<key>CFBundleIdentifier</key>
@@ -18,6 +18,19 @@
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
 	<string>$(MARKETING_VERSION)</string>
+	<key>CFBundleURLTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLName</key>
+			<string>com.bigauction.mobile</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>firstcash</string>
+			</array>
+		</dict>
+	</array>
 	<key>CFBundleVersion</key>
 	<string>$(CURRENT_PROJECT_VERSION)</string>
 	<key>LSRequiresIPhoneOS</key>
@@ -45,7 +58,7 @@
 	</array>
 	<key>UIViewControllerBasedStatusBarAppearance</key>
 	<true/>
-    <key>com.openinstall.APP_KEY</key>
-    <string>crgkm2</string>
+	<key>com.openinstall.APP_KEY</key>
+	<string>crgkm2</string>
 </dict>
 </plist>

+ 0 - 1
ios/App/Podfile

@@ -27,7 +27,6 @@ def capacitor_pods
   pod 'CapacitorSplashScreen', :path => '../../node_modules/@capacitor/splash-screen'
   pod 'CapacitorStatusBar', :path => '../../node_modules/@capacitor/status-bar'
   pod 'AppsflyerCapacitorPlugin', :path => '../../node_modules/appsflyer-capacitor-plugin'
-  pod 'CapacitorOpeninstall', :path => '../../../../capacitor/capacitor-openinstall'
 end
 
 target 'App' do

+ 9 - 1
package.json

@@ -36,10 +36,18 @@
     "@vueuse/core": "^9.6.0",
     "appsflyer-capacitor-plugin": "^6.9.2",
     "axios": "^1.2.0",
-    "capacitor-openinstall": "link:/Users/drew/Projects/capacitor/capacitor-openinstall",
     "cordova-plugin-android-notch": "^1.0.3",
     "date-fns": "^2.29.3",
     "eruda": "^2.6.1",
+    "eruda-benchmark": "^2.0.0",
+    "eruda-code": "^2.1.0",
+    "eruda-features": "^2.0.0",
+    "eruda-fps": "^2.0.0",
+    "eruda-geolocation": "^2.0.0",
+    "eruda-memory": "^2.0.0",
+    "eruda-orientation": "^2.0.0",
+    "eruda-timing": "^2.0.1",
+    "eruda-touches": "^2.0.0",
     "ionicons": "^6.0.4",
     "less": "^4.1.3",
     "mathjs": "^11.5.0",

+ 43 - 21
src/main.js

@@ -15,10 +15,12 @@ import { StatusBar, Style } from '@capacitor/status-bar'
 import { Capacitor } from '@capacitor/core'
 import { useBackButton } from '@ionic/vue'
 import { SplashScreen } from '@capacitor/splash-screen'
-import { Openinstall } from 'capacitor-openinstall'
-import { AppsFlyer } from 'appsflyer-capacitor-plugin'
+// import { Openinstall } from 'capacitor-openinstall'
+import { AppsFlyer, AFConstants } from 'appsflyer-capacitor-plugin'
 import { Locale } from 'vant'
 import vantEnUS from 'vant/es/locale/lang/en-US'
+import { useStorage } from '@vueuse/core'
+import { init as initEruda } from '@/utils/eruda'
 
 import 'normalize.css/normalize.css'
 
@@ -88,25 +90,25 @@ document.addEventListener('deviceready', () => {
                 err => console.error('Failed to get insets top:', err)
             )
         }
-        Openinstall.init()
-        const handleData = data => {
-            if (data && data.data) {
-                let params = JSON.parse(data.data)
-                if (params.invitor) {
-                    localStorage.setItem('invitor', params.invitor)
-                }
-            }
-        }
-        Openinstall.addListener('wakeUp', data => {
-            console.log('wakeUp data:', data)
-        })
-        Openinstall.getInstallCanRetry(data => {
-            console.log('install data:', data)
-            handleData(data)
-        })
+        // Openinstall.init()
+        // const handleData = data => {
+        //     if (data && data.data) {
+        //         let params = JSON.parse(data.data)
+        //         if (params.invitor) {
+        //             localStorage.setItem('invitor', params.invitor)
+        //         }
+        //     }
+        // }
+        // Openinstall.addListener('wakeUp', data => {
+        //     console.log('wakeUp data:', data)
+        // })
+        // Openinstall.getInstallCanRetry(data => {
+        //     console.log('install data:', data)
+        //     handleData(data)
+        // })
         const afConfig = {
-            appID: 'com.bigauction.mobile', // replace with your app ID.
-            devKey: 'xiQnptYGJ44kMBgmR3esZC', // replace with your dev key.
+            appID: 'id1665426567', // replace with your app ID.
+            devKey: Capacitor.getPlatform() === 'android' ? 'xiQnptYGJ44kMBgmR3esZC' : 'QFfmCXsWbhqgRiXsWx7b2o', // replace with your dev key.
             isDebug: true,
             waitForATTUserAuthorization: 10, // for iOS 14 and higher
             minTimeBetweenSessions: 6, // default 5 sec
@@ -118,9 +120,29 @@ document.addEventListener('deviceready', () => {
             useUninstallSandbox: true // iOS only
         }
 
-        AppsFlyer.initSDK(afConfig).then(res => alert(JSON.stringify(res)))
+        AppsFlyer.initSDK(afConfig)
+            .then(res => {
+                console.log('initSDK: ', res)
+            })
+            .catch(e => {
+                console.log('initSDK error: ', e)
+            })
+        AppsFlyer.addListener(AFConstants.CONVERSION_CALLBACK, res => {
+            console.log('CONVERSION_CALLBACK:', res)
+        })
+        AppsFlyer.addListener(AFConstants.OAOA_CALLBACK, res => {
+            console.log('OAOA_CALLBACK: ', res)
+        })
+        AppsFlyer.addListener(AFConstants.UDL_CALLBACK, res => {
+            console.log('UDL_CALLBACK: ', res)
+        })
+
         setTimeout(() => {
             SplashScreen.hide()
         }, 1000)
     }
 })
+
+if (useStorage('showConsole', 0).value > new Date().getTime()) {
+    initEruda()
+}

+ 0 - 1
src/router/index.js

@@ -225,7 +225,6 @@ router.beforeEach(async (to, from, next) => {
             await getUser()
             next()
         } catch (error) {
-            console.log(this)
             next(false)
             emitter.emit('promptLogin')
         }

+ 10 - 0
src/styles/main.less

@@ -116,3 +116,13 @@ input:-webkit-autofill:active {
 input:-webkit-autofill {
     -webkit-text-fill-color: var(--ion-text-color) !important;
 }
+.eruda-console-container {
+    padding-bottom: 54px !important;
+    .eruda-js-input {
+        height: 54px !important;
+        padding-bottom: 30px !important;
+        &.eruda-active{
+            height: 100% !important;
+        }
+    }
+}

+ 26 - 0
src/utils/eruda.js

@@ -0,0 +1,26 @@
+function init() {
+    import('eruda').then(eruda => {
+        eruda.init({
+            useShadowDom: false,
+            defaults: {
+                theme: 'Material Oceanic'
+            }
+        })
+        import('eruda-code').then(res => {
+            eruda.add(res.default)
+        })
+        import('eruda-features').then(res => {
+            eruda.add(res.default)
+        })
+        import('eruda-fps').then(res => {
+            eruda.add(res.default)
+        })
+        import('eruda-timing').then(res => {
+            eruda.add(res.default)
+        })
+        import('eruda-memory').then(res => {
+            eruda.add(res.default)
+        })
+    })
+}
+export { init }

+ 25 - 7
src/views/HomePage.vue

@@ -57,7 +57,7 @@
             <div class="notice-box" v-if="news.length > 0">
                 <van-notice-bar ref="noticeBarRef" left-icon="volume-o">
                     <template #left-icon>
-                        <img class="bar-icon" src="../assets/home_icon_redian.png" alt="" />
+                        <img class="bar-icon" src="../assets/home_icon_redian.png" alt="" @click="showConsoleEve" />
                         <div class="driver"></div>
                     </template>
                     <van-swipe
@@ -172,23 +172,23 @@
 
 <script setup>
 import '@/styles/animate.css'
-import { Swiper, SwiperSlide } from 'swiper/vue'
 import 'swiper/swiper.min.css'
 import 'swiper/swiper-bundle.min.css'
+import intoIcon from '@/assets/svgs/icon_inter.svg'
+
+import { Swiper, SwiperSlide } from 'swiper/vue'
 import SwiperCore, { Pagination, Autoplay, Parallax, Controller } from 'swiper'
 import { useRouter, useRoute } from 'vue-router'
 import { ref, watch } from 'vue'
 import { onIonViewWillEnter } from '@ionic/vue'
-
-import intoIcon from '@/assets/svgs/icon_inter.svg'
-
-import productInfo from '../components/ProductInfo.vue'
 import { isAfter, isBefore, parse, getYear, getMonth, getDate, addDays, getTime } from 'date-fns'
 import { http } from '@/plugins/http'
 import toast from '@/utils/toast'
 import { usePageVisibility } from '@vant/use'
 import { Browser } from '@capacitor/browser'
 import { useI18n } from 'vue-i18n'
+import { useStorage } from '@vueuse/core'
+import { init as initEruda } from '@/utils/eruda'
 
 const router = useRouter()
 function navigate() {
@@ -215,7 +215,6 @@ function getBanner() {
 }
 
 const saleBatches = ref([])
-const hotInfo = ref({})
 function getSaleBatch() {
     return http.post('saleBatch/all', {}, { body: 'json' }).then(res => {
         saleBatches.value = res.content.map(item => {
@@ -344,6 +343,25 @@ function tutorial() {
     router.push('/turtorial')
     // Browser.open({ url: `${location.origin}/static/PrivacyPolicy.html` })
 }
+
+let clickNum = 0
+let timeout = null
+function showConsoleEve() {
+    clickNum++
+    if (clickNum >= 10) {
+        initEruda()
+        useStorage('showConsole').value = new Date().getTime() + 60 * 60 * 1000
+        clickNum = 0
+        return
+    } else {
+        if (timeout) {
+            clearTimeout(timeout)
+        }
+        timeout = setTimeout(() => {
+            clickNum = 0
+        }, 1000)
+    }
+}
 </script>
 
 <style lang="less" scoped>

+ 1 - 23
src/views/SettingPage.vue

@@ -72,8 +72,6 @@
                         :value="(user || {}).id"
                         @click="showConsoleEve"
                     />
-                    <van-cell class="not" v-if="showConsole" title="审核版本" is-link @click="goReview" />
-                    <van-cell class="not" v-if="showConsole" title="测试app" is-link @click="goTest" />
                 </van-cell-group>
 
                 <!-- <van-cell-group :border="false">
@@ -103,7 +101,6 @@
 <script>
 import { mapState } from 'pinia'
 import { ref, computed, getCurrentInstance } from 'vue'
-import eruda from 'eruda'
 import defaultAvatar from '../assets/png_moren.png'
 import { useUserStore } from '@/stores/user'
 import { useSettingsStore } from '@/stores/settings'
@@ -126,7 +123,6 @@ export default {
         } = getCurrentInstance()
         //性别
         const show = ref(false)
-        const showConsole = ref(false)
         const actions = [{ name: gobal.$t('mine.male') }, { name: gobal.$t('mine.female') }]
         const userStore = useUserStore()
 
@@ -136,12 +132,10 @@ export default {
         return {
             show,
             actions,
-            clickNum: 0,
             timeout: null,
             defaultAvatar,
             userStore,
-            cityName,
-            showConsole
+            cityName
         }
     },
     methods: {
@@ -172,22 +166,6 @@ export default {
                 })
             })
         },
-        showConsoleEve() {
-            this.clickNum++
-            if (this.clickNum >= 10) {
-                localStorage.setItem('showConsole', new Date().getTime() + 60 * 60 * 1000)
-                eruda.init()
-                this.clickNum = 0
-                return
-            } else {
-                if (this.timeout) {
-                    clearTimeout(this.timeout)
-                }
-                this.timeout = setTimeout(() => {
-                    this.clickNum = 0
-                }, 1000)
-            }
-        },
         updateUser(info, sucess = true) {
             console.log(info)
             if (info) {

+ 45 - 4
yarn.lock

@@ -2037,10 +2037,6 @@ caniuse-lite@^1.0.30001400:
   resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz#40337f1cf3be7c637b061e2f78582dc1daec0614"
   integrity sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==
 
-"capacitor-openinstall@link:../../capacitor/capacitor-openinstall":
-  version "0.0.0"
-  uid ""
-
 caw@^2.0.0, caw@^2.0.1:
   version "2.0.1"
   resolved "https://registry.npmmirror.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95"
@@ -2579,6 +2575,51 @@ error-ex@^1.2.0:
   dependencies:
     is-arrayish "^0.2.1"
 
+eruda-benchmark@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/eruda-benchmark/-/eruda-benchmark-2.0.0.tgz#e94af0e06bcea74ed23f58838506e12a21bbce6e"
+  integrity sha512-gZiPYve2Qpwl26oZ7guwz8nG0SSxQYg8yFYVpU/ZGmCawTwI/ABnfIrh2t4Gl0dDUPClT8p5MVOlTHv3B7j1EQ==
+
+eruda-code@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/eruda-code/-/eruda-code-2.1.0.tgz#c5bdfab1f3ba2455e4188279c2887209631f96b3"
+  integrity sha512-4RR6ct314ufDUG0b7nBYjCqaXThgcbiqnxblGJoN98SaWCSuSnMk3DEMUPXV522z0/BzkEcqfcRlayjO1EaQng==
+
+eruda-features@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/eruda-features/-/eruda-features-2.0.0.tgz#0fd7d60c7d57e32748de69d3748dac618a30f7e3"
+  integrity sha512-giwAIV2tgc1+vuuid06juc+3+SrLFxXE1It7RGkfhctC9fEH/UhSiTcvyiKcAbZ6IRSEPyP+cQe/RTipoEcetQ==
+
+eruda-fps@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/eruda-fps/-/eruda-fps-2.0.0.tgz#75e946f79a5102227343e59843ce199fde2e3bc8"
+  integrity sha512-7IkkU3VUs5+cSNpP9U6avrt9LThN/HsK79n9BE6lPvdxnEGqE9doJkcCZNE2AjIp0ZSgrNNXhPP8tTk7B5mdFw==
+
+eruda-geolocation@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/eruda-geolocation/-/eruda-geolocation-2.0.0.tgz#8823c2ac15b77fc3ed63f38c06f87a6048f54857"
+  integrity sha512-V8bF3rt4W4re9KnJLmVBdi2xNhF65S1rPiiyKmGv7IxXNvW70byuAbSqzmvrqv4gHpcU4vpjh2yiAKYfbbmwog==
+
+eruda-memory@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/eruda-memory/-/eruda-memory-2.0.0.tgz#19a98e5d007144e74dc1699cb8fc80f471688d58"
+  integrity sha512-8k4NgirY5eLmz6fNdyrQ2dSn1Mq+Rg7d799+ha/J7OnDoz7F3WtnElSu2dhgxBCpjv4BzmYGTIyc85sWmdmy9A==
+
+eruda-orientation@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/eruda-orientation/-/eruda-orientation-2.0.0.tgz#b5765128d33e0735dc1667e2f1ff614e58592678"
+  integrity sha512-4WO2YJzLxQV4fzMQiEYtRUWF2ewwm5DjPMJfv1MzujZRwbohWdJmIxklBF9BGp6kgY2l6Dxto5NHwW64syR7XQ==
+
+eruda-timing@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/eruda-timing/-/eruda-timing-2.0.1.tgz#d58ca4c095d986b5aca18c7559f6887c4c5da409"
+  integrity sha512-68Cir2pjgw4kkamabhZMrn00uuGt9uTltAflzGQhr6yeG2nB+dRXFEn2whJGvwinBA9GKMpselsH529LNWKJIw==
+
+eruda-touches@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/eruda-touches/-/eruda-touches-2.0.0.tgz#f6ff5febb70abd16376c97aaab308425201a7df9"
+  integrity sha512-Qq5fXk6d1BbCBBa7FCjNhJ1iizSoyXL2ivsoVhrn8Zw9uj02iQTwfl+wiXaBsAI187JnY0Oqc4RGRejgH8jNLg==
+
 eruda@^2.6.1:
   version "2.10.0"
   resolved "https://registry.npmmirror.com/eruda/-/eruda-2.10.0.tgz#3fb4add7bb807f7c144e90f3c8bc443595d33876"