Browse Source

提交订单

main
Mac 1 month ago
parent
commit
b29469e53a
  1. 11
      App.tsx
  2. 28
      app.json
  3. 65
      app/screens/LoginScreen.tsx
  4. 30
      app/screens/ProfileScreen.tsx
  5. 1239
      app/screens/Recipient/Recipient.tsx
  6. 89
      app/screens/login/Google.tsx
  7. 7
      app/screens/login/PhoneLoginScreen.tsx
  8. 8
      app/services/api/login.tsx
  9. BIN
      assets/img/google.png
  10. 84
      package-lock.json
  11. 6
      package.json
  12. 50
      yarn.lock

11
App.tsx

@ -7,6 +7,7 @@ import { CountrySelect } from "./app/screens/CountrySelect";
import { MainApp } from "./app/screens/MainApp"; import { MainApp } from "./app/screens/MainApp";
import { LoginScreen } from "./app/screens/LoginScreen"; import { LoginScreen } from "./app/screens/LoginScreen";
import { EmailLoginScreen } from "./app/screens/EmailLoginScreen"; import { EmailLoginScreen } from "./app/screens/EmailLoginScreen";
import { GoogleScreen } from "./app/screens/login/Google";
import "./app/i18n"; import "./app/i18n";
import { TabNavigator } from "./app/navigation/TabNavigator"; import { TabNavigator } from "./app/navigation/TabNavigator";
import { AuthProvider } from "./app/contexts/AuthContext"; import { AuthProvider } from "./app/contexts/AuthContext";
@ -46,6 +47,7 @@ export type RootStackParamList = {
CartScreen:undefined; CartScreen:undefined;
PaymentSuccessScreen:undefined; PaymentSuccessScreen:undefined;
MyAccount:undefined; MyAccount:undefined;
Google: undefined;
}; };
const Stack = createNativeStackNavigator<RootStackParamList>(); const Stack = createNativeStackNavigator<RootStackParamList>();
@ -218,6 +220,15 @@ export default function App() {
gestureDirection: "horizontal", gestureDirection: "horizontal",
}} }}
/> />
<Stack.Screen
name="Google"
component={GoogleScreen}
options={{
animation: "slide_from_right",
gestureEnabled: true,
gestureDirection: "horizontal",
}}
/>
</Stack.Navigator> </Stack.Navigator>
</NavigationContainer> </NavigationContainer>
</AuthProvider> </AuthProvider>

28
app.json

@ -7,19 +7,43 @@
"icon": "./assets/icon.png", "icon": "./assets/icon.png",
"userInterfaceStyle": "light", "userInterfaceStyle": "light",
"newArchEnabled": true, "newArchEnabled": true,
"scheme": "auth0sample",
"splash": { "splash": {
"image": "./assets/splash-icon.png", "image": "./assets/splash-icon.png",
"resizeMode": "contain", "resizeMode": "contain",
"backgroundColor": "#ffffff" "backgroundColor": "#ffffff"
}, },
"ios": { "ios": {
"supportsTablet": true "supportsTablet": true,
"bundleIdentifier": "com.brainnel.app",
"infoPlist": {
"CFBundleURLTypes": [
{
"CFBundleURLSchemes": ["auth0sample"]
}
]
}
}, },
"android": { "android": {
"adaptiveIcon": { "adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png", "foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff" "backgroundColor": "#ffffff"
} },
"package": "com.brainnel.app",
"intentFilters": [
{
"action": "VIEW",
"data": [
{
"scheme": "auth0sample"
}
],
"category": [
"BROWSABLE",
"DEFAULT"
]
}
]
}, },
"web": { "web": {
"favicon": "./assets/favicon.png" "favicon": "./assets/favicon.png"

65
app/screens/LoginScreen.tsx

@ -14,13 +14,25 @@ import {
Keyboard, Keyboard,
Modal, Modal,
InteractionManager, InteractionManager,
Image,
} from 'react-native'; } from 'react-native';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useNavigation } from '@react-navigation/native'; import { useNavigation } from '@react-navigation/native';
import type { NativeStackNavigationProp } from '@react-navigation/native-stack'; import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { RootStackParamList } from '../navigation/types';
import { Country, countries } from '../constants/countries'; import { Country, countries } from '../constants/countries';
import { useAuth } from '../contexts/AuthContext'; import { useAuth } from '../contexts/AuthContext';
import { settingApi } from "../services/api/setting";
import { userApi } from "../services/api/userApi";
import AsyncStorage from "@react-native-async-storage/async-storage";
type RootStackParamList = {
Login: undefined;
EmailLogin: undefined;
MainTabs: undefined;
Google: undefined;
Home: undefined;
};
// 常见邮箱后缀列表 // 常见邮箱后缀列表
const EMAIL_DOMAINS = [ const EMAIL_DOMAINS = [
@ -74,6 +86,16 @@ export const LoginScreen = ({ onClose, isModal }: LoginScreenProps) => {
const [emailLoginMounted, setEmailLoginMounted] = useState(false); const [emailLoginMounted, setEmailLoginMounted] = useState(false);
const [phoneLoginMounted, setPhoneLoginMounted] = useState(false); const [phoneLoginMounted, setPhoneLoginMounted] = useState(false);
// 处理邮箱输入变化,生成邮箱建议 // 处理邮箱输入变化,生成邮箱建议
const handleEmailChange = (text: string) => { const handleEmailChange = (text: string) => {
setEmail(text); setEmail(text);
@ -285,8 +307,9 @@ export const LoginScreen = ({ onClose, isModal }: LoginScreenProps) => {
} }
}; };
const handleGoogleLogin = () => { // 处理谷歌登录
// 处理Google登录 const handleGoogleLogin = async () => {
navigation.navigate('Google');
}; };
const handleFacebookLogin = () => { const handleFacebookLogin = () => {
@ -306,15 +329,33 @@ export const LoginScreen = ({ onClose, isModal }: LoginScreenProps) => {
openEmailLogin(); openEmailLogin();
}; };
//
const handleEmailContinue = async () => { const handleEmailContinue = async () => {
if (emailPassword === '123') { // if (emailPassword === '123') {
setEmailPasswordError(false); // setEmailPasswordError(false);
await login(); // await login();
closeEmailLogin(); // closeEmailLogin();
navigation.replace('MainTabs'); // navigation.replace('MainTabs');
} else { // } else {
setEmailPasswordError(true); // setEmailPasswordError(true);
} // }
const params = {
grant_type: "password",
username: "test",
password: "string",
client_id: "2",
client_secret: "",
scope: "",
};
const res = await userApi.login(params);
const token = res.token_type + " " + res.access_token;
await AsyncStorage.setItem("token", token);
navigation.navigate("Home");
const data = await settingApi.postFirstLogin(221);
console.log(data);
}; };
const handlePhoneLogin = () => { const handlePhoneLogin = () => {
@ -387,7 +428,7 @@ export const LoginScreen = ({ onClose, isModal }: LoginScreenProps) => {
onPress={handleGoogleLogin} onPress={handleGoogleLogin}
> >
<View style={styles.loginButtonIcon}> <View style={styles.loginButtonIcon}>
<Text>G</Text> <Image source={require('../../assets/img/google.png')} style={{width: 20, height: 20}} />
</View> </View>
<Text style={styles.loginButtonText}>{t('continueWithGoogle')}</Text> <Text style={styles.loginButtonText}>{t('continueWithGoogle')}</Text>
</TouchableOpacity> </TouchableOpacity>

30
app/screens/ProfileScreen.tsx

@ -26,25 +26,27 @@ type RootStackParamList = {
SettingList: undefined; SettingList: undefined;
Home: undefined; Home: undefined;
MyAccount:undefined; MyAccount:undefined;
Login:undefined;
}; };
export const ProfileScreen = () => { export const ProfileScreen = () => {
const handleLogin = async () => { const handleLogin = async () => {
const data = settingApi.postFirstLogin(221); navigation.navigate("Login");
console.log(data); // const data = settingApi.postFirstLogin(221);
// console.log(data);
const params = { // const params = {
grant_type: "password", // grant_type: "password",
username: "test", // username: "test",
password: "string", // password: "string",
client_id: "2", // client_id: "2",
client_secret: "", // client_secret: "",
scope: "", // scope: "",
}; // };
const res = await userApi.login(params); // const res = await userApi.login(params);
const token = res.token_type + " " + res.access_token; // const token = res.token_type + " " + res.access_token;
await AsyncStorage.setItem("token", token); // await AsyncStorage.setItem("token", token);
navigation.navigate("Home"); // navigation.navigate("Home");
}; };
const navigation = const navigation =

1239
app/screens/Recipient/Recipient.tsx

File diff suppressed because it is too large Load Diff

89
app/screens/login/Google.tsx

@ -0,0 +1,89 @@
import React, { useState, useEffect } from "react";
import { View, StyleSheet, ActivityIndicator } from "react-native";
import { WebView } from "react-native-webview";
import { useNavigation } from "@react-navigation/native";
import { loginApi } from "../../services/api/login";
import { useAuth } from "../../contexts/AuthContext";
export const GoogleScreen = () => {
const navigation = useNavigation();
const { login } = useAuth();
const [loading, setLoading] = useState(true);
const [loginUrl, setLoginUrl] = useState<string | null>(null);
useEffect(() => {
const fetchLoginUrl = async () => {
try {
const response = await loginApi.google();
if (response.data.url) {
setLoginUrl(response.data.url);
}
} catch (error) {
console.error('Failed to fetch login URL:', error);
}
};
fetchLoginUrl();
}, []);
const handleNavigationStateChange = async (navState: any) => {
console.log(navState.url);
// 检查URL是否包含重定向URI
if (navState.url.includes('localhost:8000')) {
try {
await login();
navigation.navigate('MainTabs' as never);
} catch (error) {
console.error('Login failed:', error);
}
}
};
if (!loginUrl) {
return (
<View style={styles.loadingContainer}>
<ActivityIndicator size="large" color="#4285F4" />
</View>
);
}
return (
<View style={styles.container}>
<WebView
source={{ uri: loginUrl }}
style={styles.webview}
onNavigationStateChange={handleNavigationStateChange}
onLoadStart={() => setLoading(true)}
onLoadEnd={() => setLoading(false)}
javaScriptEnabled={true}
domStorageEnabled={true}
startInLoadingState={true}
scalesPageToFit={true}
originWhitelist={['*']}
userAgent="Mozilla/5.0 (Linux; Android 10; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Mobile Safari/537.36"
onShouldStartLoadWithRequest={(request) => {
console.log(request);
// 允许所有请求
return true;
}}
/>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
},
loadingContainer: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'white',
},
webview: {
flex: 1,
},
});

7
app/screens/PhoneLoginScreen.tsx → app/screens/login/PhoneLoginScreen.tsx

@ -9,13 +9,12 @@ import {
Platform, Platform,
Modal, Modal,
FlatList, FlatList,
SafeAreaView,
} from 'react-native'; } from 'react-native';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useNavigation } from '@react-navigation/native'; import { useNavigation } from '@react-navigation/native';
import type { NativeStackNavigationProp } from '@react-navigation/native-stack'; import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { RootStackParamList } from '../navigation/types'; import { RootStackParamList } from '../../navigation/types';
import { Country, countries } from '../constants/countries'; import { Country, countries } from '../../constants/countries';
export const PhoneLoginScreen = () => { export const PhoneLoginScreen = () => {
const { t } = useTranslation(); const { t } = useTranslation();
@ -35,6 +34,8 @@ export const PhoneLoginScreen = () => {
}; };
const handleContinue = () => { const handleContinue = () => {
console.log(123);
// 处理继续操作,发送验证码 // 处理继续操作,发送验证码
if (phoneNumber.trim()) { if (phoneNumber.trim()) {
// 这里可以添加发送验证码的逻辑 // 这里可以添加发送验证码的逻辑

8
app/services/api/login.tsx

@ -0,0 +1,8 @@
import axios from "axios";
export const loginApi = {
google:() => {
return axios.get<{url:string}>('http://124.70.102.7:8000/api/auth/google')
}
};

BIN
assets/img/google.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

84
package-lock.json generated

@ -19,9 +19,12 @@
"axios": "^1.8.4", "axios": "^1.8.4",
"events": "^3.3.0", "events": "^3.3.0",
"expo": "~52.0.41", "expo": "~52.0.41",
"expo-auth-session": "~6.0.3",
"expo-linear-gradient": "~14.0.2", "expo-linear-gradient": "~14.0.2",
"expo-localization": "^16.0.1", "expo-localization": "^16.0.1",
"expo-random": "^14.0.1",
"expo-status-bar": "~2.0.1", "expo-status-bar": "~2.0.1",
"expo-web-browser": "~14.0.2",
"i18next": "^24.2.3", "i18next": "^24.2.3",
"install": "^0.13.0", "install": "^0.13.0",
"npm": "^10.9.2", "npm": "^10.9.2",
@ -46,7 +49,8 @@
"react-native-swiper": "^1.6.0", "react-native-swiper": "^1.6.0",
"react-native-toast-message": "^2.3.0", "react-native-toast-message": "^2.3.0",
"react-native-vector-icons": "^10.2.0", "react-native-vector-icons": "^10.2.0",
"react-native-web": "~0.19.13" "react-native-web": "~0.19.13",
"react-native-webview": "^13.13.5"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.25.2", "@babel/core": "^7.25.2",
@ -6522,6 +6526,15 @@
} }
} }
}, },
"node_modules/expo-application": {
"version": "6.0.2",
"resolved": "https://registry.npmmirror.com/expo-application/-/expo-application-6.0.2.tgz",
"integrity": "sha512-qcj6kGq3mc7x5yIb5KxESurFTJCoEKwNEL34RdPEvTB/xhl7SeVZlu05sZBqxB1V4Ryzq/LsCb7NHNfBbb3L7A==",
"license": "MIT",
"peerDependencies": {
"expo": "*"
}
},
"node_modules/expo-asset": { "node_modules/expo-asset": {
"version": "11.0.5", "version": "11.0.5",
"resolved": "https://registry.npmmirror.com/expo-asset/-/expo-asset-11.0.5.tgz", "resolved": "https://registry.npmmirror.com/expo-asset/-/expo-asset-11.0.5.tgz",
@ -6539,6 +6552,24 @@
"react-native": "*" "react-native": "*"
} }
}, },
"node_modules/expo-auth-session": {
"version": "6.0.3",
"resolved": "https://registry.npmmirror.com/expo-auth-session/-/expo-auth-session-6.0.3.tgz",
"integrity": "sha512-s7LmmMPiiY1NXrlcXkc4+09Hlfw9X1CpaQOCDkwfQEodG1uCYGQi/WImTnDzw5YDkWI79uC8F1mB8EIerilkDA==",
"license": "MIT",
"dependencies": {
"expo-application": "~6.0.2",
"expo-constants": "~17.0.5",
"expo-crypto": "~14.0.2",
"expo-linking": "~7.0.5",
"expo-web-browser": "~14.0.2",
"invariant": "^2.2.4"
},
"peerDependencies": {
"react": "*",
"react-native": "*"
}
},
"node_modules/expo-constants": { "node_modules/expo-constants": {
"version": "17.0.8", "version": "17.0.8",
"resolved": "https://registry.npmmirror.com/expo-constants/-/expo-constants-17.0.8.tgz", "resolved": "https://registry.npmmirror.com/expo-constants/-/expo-constants-17.0.8.tgz",
@ -6553,6 +6584,18 @@
"react-native": "*" "react-native": "*"
} }
}, },
"node_modules/expo-crypto": {
"version": "14.0.2",
"resolved": "https://registry.npmmirror.com/expo-crypto/-/expo-crypto-14.0.2.tgz",
"integrity": "sha512-WRc9PBpJraJN29VD5Ef7nCecxJmZNyRKcGkNiDQC1nhY5agppzwhqh7zEzNFarE/GqDgSiaDHS8yd5EgFhP9AQ==",
"license": "MIT",
"dependencies": {
"base64-js": "^1.3.0"
},
"peerDependencies": {
"expo": "*"
}
},
"node_modules/expo-file-system": { "node_modules/expo-file-system": {
"version": "18.0.12", "version": "18.0.12",
"resolved": "https://registry.npmmirror.com/expo-file-system/-/expo-file-system-18.0.12.tgz", "resolved": "https://registry.npmmirror.com/expo-file-system/-/expo-file-system-18.0.12.tgz",
@ -6600,6 +6643,20 @@
"react-native": "*" "react-native": "*"
} }
}, },
"node_modules/expo-linking": {
"version": "7.0.5",
"resolved": "https://registry.npmmirror.com/expo-linking/-/expo-linking-7.0.5.tgz",
"integrity": "sha512-3KptlJtcYDPWohk0MfJU75MJFh2ybavbtcSd84zEPfw9s1q3hjimw3sXnH03ZxP54kiEWldvKmmnGcVffBDB1g==",
"license": "MIT",
"dependencies": {
"expo-constants": "~17.0.5",
"invariant": "^2.2.4"
},
"peerDependencies": {
"react": "*",
"react-native": "*"
}
},
"node_modules/expo-localization": { "node_modules/expo-localization": {
"version": "16.0.1", "version": "16.0.1",
"resolved": "https://registry.npmmirror.com/expo-localization/-/expo-localization-16.0.1.tgz", "resolved": "https://registry.npmmirror.com/expo-localization/-/expo-localization-16.0.1.tgz",
@ -6650,6 +6707,19 @@
"invariant": "^2.2.4" "invariant": "^2.2.4"
} }
}, },
"node_modules/expo-random": {
"version": "14.0.1",
"resolved": "https://registry.npmmirror.com/expo-random/-/expo-random-14.0.1.tgz",
"integrity": "sha512-gX2mtR9o+WelX21YizXUCD/y+a4ZL+RDthDmFkHxaYbdzjSYTn8u/igoje/l3WEO+/RYspmqUFa8w/ckNbt6Vg==",
"deprecated": "This package is now deprecated in favor of expo-crypto, which provides the same functionality. To migrate, replace all imports from expo-random with imports from expo-crypto.",
"license": "MIT",
"dependencies": {
"base64-js": "^1.3.0"
},
"peerDependencies": {
"expo": "*"
}
},
"node_modules/expo-status-bar": { "node_modules/expo-status-bar": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmmirror.com/expo-status-bar/-/expo-status-bar-2.0.1.tgz", "resolved": "https://registry.npmmirror.com/expo-status-bar/-/expo-status-bar-2.0.1.tgz",
@ -6660,6 +6730,16 @@
"react-native": "*" "react-native": "*"
} }
}, },
"node_modules/expo-web-browser": {
"version": "14.0.2",
"resolved": "https://registry.npmmirror.com/expo-web-browser/-/expo-web-browser-14.0.2.tgz",
"integrity": "sha512-Hncv2yojhTpHbP6SGWARBFdl7P6wBHc1O8IKaNsH0a/IEakq887o1eRhLxZ5IwztPQyRDhpqHdgJ+BjWolOnwA==",
"license": "MIT",
"peerDependencies": {
"expo": "*",
"react-native": "*"
}
},
"node_modules/exponential-backoff": { "node_modules/exponential-backoff": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmmirror.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz", "resolved": "https://registry.npmmirror.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz",
@ -13482,8 +13562,6 @@
"resolved": "https://registry.npmmirror.com/react-native-webview/-/react-native-webview-13.13.5.tgz", "resolved": "https://registry.npmmirror.com/react-native-webview/-/react-native-webview-13.13.5.tgz",
"integrity": "sha512-MfC2B+woL4Hlj2WCzcb1USySKk+SteXnUKmKktOk/H/AQy5+LuVdkPKm8SknJ0/RxaxhZ48WBoTRGaqgR137hw==", "integrity": "sha512-MfC2B+woL4Hlj2WCzcb1USySKk+SteXnUKmKktOk/H/AQy5+LuVdkPKm8SknJ0/RxaxhZ48WBoTRGaqgR137hw==",
"license": "MIT", "license": "MIT",
"optional": true,
"peer": true,
"dependencies": { "dependencies": {
"escape-string-regexp": "^4.0.0", "escape-string-regexp": "^4.0.0",
"invariant": "2.2.4" "invariant": "2.2.4"

6
package.json

@ -20,9 +20,12 @@
"axios": "^1.8.4", "axios": "^1.8.4",
"events": "^3.3.0", "events": "^3.3.0",
"expo": "~52.0.41", "expo": "~52.0.41",
"expo-auth-session": "~6.0.3",
"expo-linear-gradient": "~14.0.2", "expo-linear-gradient": "~14.0.2",
"expo-localization": "^16.0.1", "expo-localization": "^16.0.1",
"expo-random": "^14.0.1",
"expo-status-bar": "~2.0.1", "expo-status-bar": "~2.0.1",
"expo-web-browser": "~14.0.2",
"i18next": "^24.2.3", "i18next": "^24.2.3",
"install": "^0.13.0", "install": "^0.13.0",
"npm": "^10.9.2", "npm": "^10.9.2",
@ -47,7 +50,8 @@
"react-native-swiper": "^1.6.0", "react-native-swiper": "^1.6.0",
"react-native-toast-message": "^2.3.0", "react-native-toast-message": "^2.3.0",
"react-native-vector-icons": "^10.2.0", "react-native-vector-icons": "^10.2.0",
"react-native-web": "~0.19.13" "react-native-web": "~0.19.13",
"react-native-webview": "^13.13.5"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.25.2", "@babel/core": "^7.25.2",

50
yarn.lock

@ -2740,7 +2740,7 @@ balanced-match@^1.0.0:
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz" resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
base64-js@^1.2.3, base64-js@^1.3.1, base64-js@^1.5.1: base64-js@^1.2.3, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1:
version "1.5.1" version "1.5.1"
resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz" resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@ -3843,6 +3843,11 @@ execa@^5.1.1:
signal-exit "^3.0.3" signal-exit "^3.0.3"
strip-final-newline "^2.0.0" strip-final-newline "^2.0.0"
expo-application@~6.0.2:
version "6.0.2"
resolved "https://registry.npmmirror.com/expo-application/-/expo-application-6.0.2.tgz"
integrity sha512-qcj6kGq3mc7x5yIb5KxESurFTJCoEKwNEL34RdPEvTB/xhl7SeVZlu05sZBqxB1V4Ryzq/LsCb7NHNfBbb3L7A==
expo-asset@~11.0.5: expo-asset@~11.0.5:
version "11.0.5" version "11.0.5"
resolved "https://registry.npmmirror.com/expo-asset/-/expo-asset-11.0.5.tgz" resolved "https://registry.npmmirror.com/expo-asset/-/expo-asset-11.0.5.tgz"
@ -3853,7 +3858,19 @@ expo-asset@~11.0.5:
invariant "^2.2.4" invariant "^2.2.4"
md5-file "^3.2.3" md5-file "^3.2.3"
expo-constants@~17.0.8: expo-auth-session@~6.0.3:
version "6.0.3"
resolved "https://registry.npmmirror.com/expo-auth-session/-/expo-auth-session-6.0.3.tgz"
integrity sha512-s7LmmMPiiY1NXrlcXkc4+09Hlfw9X1CpaQOCDkwfQEodG1uCYGQi/WImTnDzw5YDkWI79uC8F1mB8EIerilkDA==
dependencies:
expo-application "~6.0.2"
expo-constants "~17.0.5"
expo-crypto "~14.0.2"
expo-linking "~7.0.5"
expo-web-browser "~14.0.2"
invariant "^2.2.4"
expo-constants@~17.0.5, expo-constants@~17.0.8:
version "17.0.8" version "17.0.8"
resolved "https://registry.npmmirror.com/expo-constants/-/expo-constants-17.0.8.tgz" resolved "https://registry.npmmirror.com/expo-constants/-/expo-constants-17.0.8.tgz"
integrity sha512-XfWRyQAf1yUNgWZ1TnE8pFBMqGmFP5Gb+SFSgszxDdOoheB/NI5D4p7q86kI2fvGyfTrxAe+D+74nZkfsGvUlg== integrity sha512-XfWRyQAf1yUNgWZ1TnE8pFBMqGmFP5Gb+SFSgszxDdOoheB/NI5D4p7q86kI2fvGyfTrxAe+D+74nZkfsGvUlg==
@ -3861,6 +3878,13 @@ expo-constants@~17.0.8:
"@expo/config" "~10.0.11" "@expo/config" "~10.0.11"
"@expo/env" "~0.4.2" "@expo/env" "~0.4.2"
expo-crypto@~14.0.2:
version "14.0.2"
resolved "https://registry.npmmirror.com/expo-crypto/-/expo-crypto-14.0.2.tgz"
integrity sha512-WRc9PBpJraJN29VD5Ef7nCecxJmZNyRKcGkNiDQC1nhY5agppzwhqh7zEzNFarE/GqDgSiaDHS8yd5EgFhP9AQ==
dependencies:
base64-js "^1.3.0"
expo-file-system@~18.0.12: expo-file-system@~18.0.12:
version "18.0.12" version "18.0.12"
resolved "https://registry.npmmirror.com/expo-file-system/-/expo-file-system-18.0.12.tgz" resolved "https://registry.npmmirror.com/expo-file-system/-/expo-file-system-18.0.12.tgz"
@ -3885,6 +3909,14 @@ expo-linear-gradient@~14.0.2:
resolved "https://registry.npmmirror.com/expo-linear-gradient/-/expo-linear-gradient-14.0.2.tgz" resolved "https://registry.npmmirror.com/expo-linear-gradient/-/expo-linear-gradient-14.0.2.tgz"
integrity sha512-nvac1sPUfFFJ4mY25UkvubpUV/olrBH+uQw5k+beqSvQaVQiUfFtYzfRr+6HhYBNb4AEsOtpsCRkpDww3M2iGQ== integrity sha512-nvac1sPUfFFJ4mY25UkvubpUV/olrBH+uQw5k+beqSvQaVQiUfFtYzfRr+6HhYBNb4AEsOtpsCRkpDww3M2iGQ==
expo-linking@~7.0.5:
version "7.0.5"
resolved "https://registry.npmmirror.com/expo-linking/-/expo-linking-7.0.5.tgz"
integrity sha512-3KptlJtcYDPWohk0MfJU75MJFh2ybavbtcSd84zEPfw9s1q3hjimw3sXnH03ZxP54kiEWldvKmmnGcVffBDB1g==
dependencies:
expo-constants "~17.0.5"
invariant "^2.2.4"
expo-localization@^16.0.1: expo-localization@^16.0.1:
version "16.0.1" version "16.0.1"
resolved "https://registry.npmmirror.com/expo-localization/-/expo-localization-16.0.1.tgz" resolved "https://registry.npmmirror.com/expo-localization/-/expo-localization-16.0.1.tgz"
@ -3913,11 +3945,23 @@ expo-modules-core@2.2.3:
dependencies: dependencies:
invariant "^2.2.4" invariant "^2.2.4"
expo-random@^14.0.1:
version "14.0.1"
resolved "https://registry.npmmirror.com/expo-random/-/expo-random-14.0.1.tgz"
integrity sha512-gX2mtR9o+WelX21YizXUCD/y+a4ZL+RDthDmFkHxaYbdzjSYTn8u/igoje/l3WEO+/RYspmqUFa8w/ckNbt6Vg==
dependencies:
base64-js "^1.3.0"
expo-status-bar@~2.0.1: expo-status-bar@~2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.npmmirror.com/expo-status-bar/-/expo-status-bar-2.0.1.tgz" resolved "https://registry.npmmirror.com/expo-status-bar/-/expo-status-bar-2.0.1.tgz"
integrity sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg== integrity sha512-AkIPX7jWHRPp83UBZ1iXtVvyr0g+DgBVvIXTtlmPtmUsm8Vq9Bb5IGj86PW8osuFlgoTVAg7HI/+Ok7yEYwiRg==
expo-web-browser@~14.0.2:
version "14.0.2"
resolved "https://registry.npmmirror.com/expo-web-browser/-/expo-web-browser-14.0.2.tgz"
integrity sha512-Hncv2yojhTpHbP6SGWARBFdl7P6wBHc1O8IKaNsH0a/IEakq887o1eRhLxZ5IwztPQyRDhpqHdgJ+BjWolOnwA==
expo@*, expo@~52.0.41: expo@*, expo@~52.0.41:
version "52.0.41" version "52.0.41"
resolved "https://registry.npmmirror.com/expo/-/expo-52.0.41.tgz" resolved "https://registry.npmmirror.com/expo/-/expo-52.0.41.tgz"
@ -6726,7 +6770,7 @@ react-native-web@~0.19.13:
postcss-value-parser "^4.2.0" postcss-value-parser "^4.2.0"
styleq "^0.1.3" styleq "^0.1.3"
react-native-webview@*: react-native-webview@*, react-native-webview@^13.13.5:
version "13.13.5" version "13.13.5"
resolved "https://registry.npmmirror.com/react-native-webview/-/react-native-webview-13.13.5.tgz" resolved "https://registry.npmmirror.com/react-native-webview/-/react-native-webview-13.13.5.tgz"
integrity sha512-MfC2B+woL4Hlj2WCzcb1USySKk+SteXnUKmKktOk/H/AQy5+LuVdkPKm8SknJ0/RxaxhZ48WBoTRGaqgR137hw== integrity sha512-MfC2B+woL4Hlj2WCzcb1USySKk+SteXnUKmKktOk/H/AQy5+LuVdkPKm8SknJ0/RxaxhZ48WBoTRGaqgR137hw==

Loading…
Cancel
Save