diff --git a/AwesomeProject/App.js b/AwesomeProject/App.js index 042cc38ac57bd9b6329742f1217f8cfa8678b91f..488fce17964462950efc55a5b3155ab2bd415118 100644 --- a/AwesomeProject/App.js +++ b/AwesomeProject/App.js @@ -1,19 +1,72 @@ -/** - * Sample React Native App - * https://github.com/facebook/react-native - * - * @format - * @flow strict-local - */ +import React, {useState} from 'react'; -import React from 'react'; - -import {Text, View} from 'react-native'; +import {Text, TextInput, TouchableOpacity, View} from 'react-native'; +import {signIn, signUp} from './lib/auth'; +import {Alert} from 'react-native'; const App = () => { + const [email, setEmail] = useState(); + const [password, setPass] = useState(); + + const onSignUp = async () => { + console.log(email, password); + try { + const {user} = await signUp({email, password}); + console.log(user); + Alert.alert('회원가입 성공!'); + } catch (e) { + console.log(e); + Alert.alert('회원가입 실패ㅠㅠ'); + } + }; + const onSignIn = async () => { + console.log(email, password); + try { + const {user} = await signIn({email, password}); + console.log(user); + Alert.alert('로그인 성공!.'); + } catch (e) { + Alert.alert('로그인에 실패ㅠㅠ'); + } + }; return ( <View> - <Text>Hello</Text> + <Text style={{fontSize: 20, fontWeight: 'bold'}}>회원가입 예시</Text> + <View style={{borderWidth: 3}}> + <TextInput + onChangeText={setEmail} + placeholder="email" + placeholderTextColor={'black'} + style={{borderColor: 'red', borderBottomWidth: 1}} + /> + <TextInput + onChangeText={setPass} + placeholder="password" + placeholderTextColor={'black'} + style={{borderColor: 'red', borderBottomWidth: 1}} + /> + <TouchableOpacity onPress={onSignUp}> + <Text>SignUp</Text> + </TouchableOpacity> + </View> + <Text style={{fontSize: 20, fontWeight: 'bold'}}>로그인 예시</Text> + <View style={{borderWidth: 3}}> + <TextInput + onChangeText={setEmail} + placeholder="email" + placeholderTextColor={'black'} + style={{borderColor: 'red', borderBottomWidth: 1}} + /> + <TextInput + onChangeText={setPass} + placeholder="password" + placeholderTextColor={'black'} + style={{borderColor: 'red', borderBottomWidth: 1}} + /> + <TouchableOpacity onPress={onSignIn}> + <Text>Login</Text> + </TouchableOpacity> + </View> </View> ); }; diff --git a/AwesomeProject/android/app/build.gradle b/AwesomeProject/android/app/build.gradle index bcf287964d4698af96fcf711f24b7be83939ac11..599c7235d401f8590ab00bda53eb24f7acb83d7c 100644 --- a/AwesomeProject/android/app/build.gradle +++ b/AwesomeProject/android/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.android.application" +apply plugin: "com.google.gms.google-services" import com.android.build.OutputFile import org.apache.tools.ant.taskdefs.condition.Os @@ -141,7 +142,7 @@ android { versionCode 1 versionName "1.0" buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() - + multiDexEnabled true if (isNewArchitectureEnabled()) { // We configure the NDK build only if you decide to opt-in for the New Architecture. externalNativeBuild { @@ -279,7 +280,7 @@ dependencies { debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { exclude group:'com.facebook.flipper' } - + implementation platform('com.google.firebase:firebase-bom:29.1.0') if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") diff --git a/AwesomeProject/android/app/google-services.json b/AwesomeProject/android/app/google-services.json new file mode 100644 index 0000000000000000000000000000000000000000..75688a70fb5ecd5990ffce2993a036998f8697b6 --- /dev/null +++ b/AwesomeProject/android/app/google-services.json @@ -0,0 +1,39 @@ +{ + "project_info": { + "project_number": "1007669651619", + "project_id": "foss2023-1-by-201821197-woo", + "storage_bucket": "foss2023-1-by-201821197-woo.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:1007669651619:android:5eb3c5de6657a601197716", + "android_client_info": { + "package_name": "com.awesomeproject" + } + }, + "oauth_client": [ + { + "client_id": "1007669651619-gnljjv57opi7lsuikrfbqapnjhpm2mjn.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyBMI9lTqKT4oh4YAP1yXfGX9T50WdcXgc0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "1007669651619-gnljjv57opi7lsuikrfbqapnjhpm2mjn.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/AwesomeProject/android/build.gradle b/AwesomeProject/android/build.gradle index 5dfc68a632ee6a2e4cb234fee6425e127dacdf14..910898f074ddb2ddc0620f48a5eea2b4a3b80bdc 100644 --- a/AwesomeProject/android/build.gradle +++ b/AwesomeProject/android/build.gradle @@ -25,6 +25,7 @@ buildscript { classpath("com.android.tools.build:gradle:7.0.4") classpath("com.facebook.react:react-native-gradle-plugin") classpath("de.undercouch:gradle-download-task:4.1.2") + classpath 'com.google.gms:google-services:4.3.10' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/AwesomeProject/lib/auth.js b/AwesomeProject/lib/auth.js new file mode 100644 index 0000000000000000000000000000000000000000..3bfe5c6ff184c56936ca09a1125a70ad1ebe61d9 --- /dev/null +++ b/AwesomeProject/lib/auth.js @@ -0,0 +1,17 @@ +import auth from '@react-native-firebase/auth'; + +export function signIn({email, password}) { + return auth().signInWithEmailAndPassword(email, password); +} + +export function signUp({email, password}) { + return auth().createUserWithEmailAndPassword(email, password); +} + +export function subscribeAuth(callback) { + return auth().onAuthStateChanged(callback); +} + +export function signOut() { + return auth().signOut(); +} diff --git a/AwesomeProject/lib/user.js b/AwesomeProject/lib/user.js new file mode 100644 index 0000000000000000000000000000000000000000..18d3fd0cc762c7e7e120b091720b9f9a46b9bf29 --- /dev/null +++ b/AwesomeProject/lib/user.js @@ -0,0 +1,16 @@ +import firestore from '@react-native-firebase/firestore'; + +export const userCollection = firestore().collection('users'); + +export function createUser({id, displayName, photoURL}) { + return userCollection.doc(id).set({ + id, + displayName, + photoURL, + }); +} + +export async function getUser(id) { + const doc = await userCollection.doc(id).get(); + return doc.data(); +} diff --git a/AwesomeProject/package-lock.json b/AwesomeProject/package-lock.json index a403ac8d3267ea7f99f570e51eb2594e88378855..08ec37827092f7b49b54270827b74c9e2e222fbf 100644 --- a/AwesomeProject/package-lock.json +++ b/AwesomeProject/package-lock.json @@ -8,6 +8,10 @@ "name": "awesomeproject", "version": "0.0.1", "dependencies": { + "@react-native-firebase/app": "^18.0.0", + "@react-native-firebase/auth": "^18.0.0", + "@react-native-firebase/firestore": "^18.0.0", + "@react-native-firebase/storage": "^18.0.0", "react": "17.0.2", "react-native": "0.68.2" }, @@ -4041,6 +4045,58 @@ "integrity": "sha512-+zDZ20NUnSWghj7Ku5aFphMzuM9JulqCW+aPXT6IfIXFbb8tzYTTOSeRFOtuekJ99ibW2fUCSsjuKNlwDIbHFg==", "dev": true }, + "node_modules/@react-native-firebase/app": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/app/-/app-18.0.0.tgz", + "integrity": "sha512-jvxitPNkcxE6IyGHiOGaURA42ZHBesTeSLbOfqQL6ZtTkQ0sPkFk6VPM2OR5s5S2NfOCfd9dddOhFLIX5VE3ig==", + "dependencies": { + "opencollective-postinstall": "^2.0.1", + "superstruct": "^0.6.2" + }, + "peerDependencies": { + "expo": ">=47.0.0", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + } + } + }, + "node_modules/@react-native-firebase/auth": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/auth/-/auth-18.0.0.tgz", + "integrity": "sha512-9FOsvNH/w5+Cr48nxuJ3Lb85vxFe2A45w37OMxzfZCnLYXJJBvlF1espy3SCMKzwA31RN9+D0jH7OavacKbpzw==", + "dependencies": { + "plist": "^3.0.5" + }, + "peerDependencies": { + "@react-native-firebase/app": "18.0.0", + "expo": ">=47.0.0" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + } + } + }, + "node_modules/@react-native-firebase/firestore": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/firestore/-/firestore-18.0.0.tgz", + "integrity": "sha512-jGalEquLZGvn2iM1pGQsC0tFnUlA1mRt7hqYbrSSo8eVdcr05NhlNwNvBu2ShcVi1MCQvtsPmEQ8ppu3pt0srw==", + "peerDependencies": { + "@react-native-firebase/app": "18.0.0" + } + }, + "node_modules/@react-native-firebase/storage": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/storage/-/storage-18.0.0.tgz", + "integrity": "sha512-aJchEV1nHzECq5bNE9bA6sczJs0ox59IQoox9vnuzdfh+Aep3ezjQBVJckriQ7/W/pV28fs32XyRx3GLVSRq6w==", + "peerDependencies": { + "@react-native-firebase/app": "18.0.0" + } + }, "node_modules/@react-native/assets": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", @@ -7307,6 +7363,17 @@ "node": ">=0.10.0" } }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -11488,6 +11555,34 @@ "node": ">=0.10.0" } }, + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", + "dependencies": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -12001,6 +12096,14 @@ "node": ">=4" } }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "bin": { + "opencollective-postinstall": "index.js" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -14088,6 +14191,58 @@ "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" }, + "node_modules/superstruct": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.6.2.tgz", + "integrity": "sha512-lvA97MFAJng3rfjcafT/zGTSWm6Tbpk++DP6It4Qg7oNaeM+2tdJMuVgGje21/bIpBEs6iQql1PJH6dKTjl4Ig==", + "dependencies": { + "clone-deep": "^2.0.1", + "kind-of": "^6.0.1" + } + }, + "node_modules/superstruct/node_modules/clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "dependencies": { + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/superstruct/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/superstruct/node_modules/shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "dependencies": { + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/superstruct/node_modules/shallow-clone/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -18047,6 +18202,35 @@ "integrity": "sha512-+zDZ20NUnSWghj7Ku5aFphMzuM9JulqCW+aPXT6IfIXFbb8tzYTTOSeRFOtuekJ99ibW2fUCSsjuKNlwDIbHFg==", "dev": true }, + "@react-native-firebase/app": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/app/-/app-18.0.0.tgz", + "integrity": "sha512-jvxitPNkcxE6IyGHiOGaURA42ZHBesTeSLbOfqQL6ZtTkQ0sPkFk6VPM2OR5s5S2NfOCfd9dddOhFLIX5VE3ig==", + "requires": { + "opencollective-postinstall": "^2.0.1", + "superstruct": "^0.6.2" + } + }, + "@react-native-firebase/auth": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/auth/-/auth-18.0.0.tgz", + "integrity": "sha512-9FOsvNH/w5+Cr48nxuJ3Lb85vxFe2A45w37OMxzfZCnLYXJJBvlF1espy3SCMKzwA31RN9+D0jH7OavacKbpzw==", + "requires": { + "plist": "^3.0.5" + } + }, + "@react-native-firebase/firestore": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/firestore/-/firestore-18.0.0.tgz", + "integrity": "sha512-jGalEquLZGvn2iM1pGQsC0tFnUlA1mRt7hqYbrSSo8eVdcr05NhlNwNvBu2ShcVi1MCQvtsPmEQ8ppu3pt0srw==", + "requires": {} + }, + "@react-native-firebase/storage": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/storage/-/storage-18.0.0.tgz", + "integrity": "sha512-aJchEV1nHzECq5bNE9bA6sczJs0ox59IQoox9vnuzdfh+Aep3ezjQBVJckriQ7/W/pV28fs32XyRx3GLVSRq6w==", + "requires": {} + }, "@react-native/assets": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", @@ -20534,6 +20718,14 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "requires": { + "for-in": "^1.0.1" + } + }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -23695,6 +23887,27 @@ "is-extendable": "^1.0.1" } }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + } + } + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -24091,6 +24304,11 @@ } } }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -25731,6 +25949,50 @@ "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" }, + "superstruct": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.6.2.tgz", + "integrity": "sha512-lvA97MFAJng3rfjcafT/zGTSWm6Tbpk++DP6It4Qg7oNaeM+2tdJMuVgGje21/bIpBEs6iQql1PJH6dKTjl4Ig==", + "requires": { + "clone-deep": "^2.0.1", + "kind-of": "^6.0.1" + }, + "dependencies": { + "clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "requires": { + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + } + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", diff --git a/AwesomeProject/package.json b/AwesomeProject/package.json index d648035004da243380bb674736a8ba980bfddf06..a791cb89aacfaac124014d9fcce6122bf8cb262a 100644 --- a/AwesomeProject/package.json +++ b/AwesomeProject/package.json @@ -10,6 +10,10 @@ "lint": "eslint ." }, "dependencies": { + "@react-native-firebase/app": "^18.0.0", + "@react-native-firebase/auth": "^18.0.0", + "@react-native-firebase/firestore": "^18.0.0", + "@react-native-firebase/storage": "^18.0.0", "react": "17.0.2", "react-native": "0.68.2" },