diff --git a/app/(app)/ActionMenu/Booking/_layout.tsx b/app/(app)/ActionMenu/Booking/_layout.tsx index a4acc27b..6015b3ad 100644 --- a/app/(app)/ActionMenu/Booking/_layout.tsx +++ b/app/(app)/ActionMenu/Booking/_layout.tsx @@ -1,3 +1,5 @@ + +import React from "react"; import Header from "@/components/UI/Header"; import Modal from "@/components/UI/Modal"; import { Stack } from "expo-router"; diff --git a/app/(app)/History/CardComponent.tsx b/app/(app)/History/CardComponent.tsx new file mode 100644 index 00000000..898f54ca --- /dev/null +++ b/app/(app)/History/CardComponent.tsx @@ -0,0 +1,67 @@ +import { Colors } from "@/constants/Colors"; +import Typography from "@/constants/Typography"; +import React, { ReactElement } from "react"; +import { Image, Text, TouchableOpacity } from "react-native"; +import { ImageURISource, View } from "react-native"; + +interface DoctorComponentProps { + imageSource: ImageURISource | number; + name: string; + iconComponent: ReactElement; + method: string; + day: string; + time: string; + handle?: () => void; +} +function DoctorComponent({ + imageSource, + name, + iconComponent, + method, + day, + time, + handle +}: DoctorComponentProps) { + return ( + + + + + + + {name} + {method} + + {day} | + {time} + + + + {iconComponent} + + ); +} + +export default DoctorComponent; diff --git a/app/(app)/History/HistoryMenu.tsx b/app/(app)/History/HistoryMenu.tsx new file mode 100644 index 00000000..29a414db --- /dev/null +++ b/app/(app)/History/HistoryMenu.tsx @@ -0,0 +1,42 @@ +import React from "react" +import { BlackDeleteIcon } from "@/components/UI/icons/deleteIcon" +import { BlackDownloadIcon } from "@/components/UI/icons/downloadIcon" +import { StyleSheet, Text, TouchableOpacity, View } from "react-native" +import { SvgXml } from "react-native-svg" +import {Colors} from "@/constants/Colors" + +interface MenuComponentProps { + closeMenu: () => void; + method: string +} + +const HistoryMenu: React.FC = ({closeMenu, method})=>{ + + return( + + + + Download {method} + + + + + Delete {method} + + + ) + } + + const styles = StyleSheet.create({ + iconText:{ + flexDirection: "row", + alignItems: "center", + gap: 20 + } + }) + + export default HistoryMenu \ No newline at end of file diff --git a/app/(app)/History/MessageHistory/Chats.tsx b/app/(app)/History/MessageHistory/Chats.tsx new file mode 100644 index 00000000..306ae9b1 --- /dev/null +++ b/app/(app)/History/MessageHistory/Chats.tsx @@ -0,0 +1,395 @@ +import React, { useContext, useState } from "react"; +import { circleWithDots } from "@/components/UI/icons/circleWithDots"; +import { WhiteDoubleTick } from "@/components/UI/icons/doubleTickIcon"; +import { BlackFilterIcon } from "@/components/UI/icons/filterIcon"; + +import { Colors } from "@/constants/Colors"; +import Typography from "@/constants/Typography"; +import { ThemeContext } from "@/ctx/ThemeContext"; +import { MaterialIcons } from "@expo/vector-icons"; +import { router } from "expo-router"; +import { StatusBar } from "expo-status-bar"; +import { + Pressable, + ScrollView, + StyleSheet, + Text, +} from "react-native"; +import { Platform, SafeAreaView, View } from "react-native"; +import { SvgXml } from "react-native-svg"; +import { TouchableOpacity } from "react-native"; +import { Image } from "react-native"; +import MenuComponent from "./Menu"; + +function ChatMessaging() { + const date = new Date(); + + const { theme, changeTheme } = useContext(ThemeContext); + const [menu, setMenu] = useState(false); + const [attachContainer, setAttachContainer] = useState(false); + + const [messages, setMessages] = useState([ + { + user: "user1", + chat: "Can you tell me the problem you are having? So that I can identify it.", + time: `${date.getHours()}:${date.getMinutes()}`, + }, + { + user: "user", + chat: " I'm Andrew, I have a problem with my immune system 😢", + time: `${date.getHours()}:${date.getMinutes()}`, + }, + {}, + ]); + function handleChatMenu() { + setMenu(!menu); + } + + function handleAttachMenu() { + setAttachContainer(!attachContainer); + } + const [chats, setChats] = useState(""); + + const handleChat = (text: string, user = "user") => { + // setInputFocused(true); + const newMessage = { + user, + chat: text, + time: `${date.getHours()}:${date.getMinutes()}`, + }; + setMessages((prevMessages) => [...prevMessages, newMessage]); + }; + + const handleTextChange = (text: string) => { + setChats(text); + handleChat(text); + }; + + const ios = Platform.OS === "ios"; + changeTheme("light"); + + return ( + + + + router.back()} + style={{ + flexDirection: "row", + alignItems: "center", + justifyContent: "space-between", + gap: 20, + backgroundColor: + theme === "light" ? Colors.others.white : Colors.others.black, + }} + > + + + Dr. Drake Boeson + + + {menu && ( + + + + )} + + + + + + + + + + + + Session Start + + + {messages.map((message: any, index: any) => ( + + + {message.chat} + + + + {message.time} + + + + ))} + + + Hi, good afternoon Dr. Drake... 😁😁 + + + 16:00 + + + + + + + Hi, good afternoon Dr. Drake... 😁😁 + + + 16:00 + + + + + + Hi, good afternoon Dr. Drake... 😁😁 + + + 16:00 + + + + + Hi, good afternoon Dr. Drake... 😁😁 + + + 16:00 + + + + + + + + + + + + + + sound player + + + + Session End + + + + + ); +} + +const styles = StyleSheet.create({ + shadowProp: { + shadowColor: "#171717", + shadowOffset: { width: -2, height: 4 }, + shadowOpacity: 0.2, + shadowRadius: 3, + elevation: 10, + }, +}); +export default ChatMessaging; diff --git a/app/(app)/History/MessageHistory/Menu.tsx b/app/(app)/History/MessageHistory/Menu.tsx new file mode 100644 index 00000000..0c19ef16 --- /dev/null +++ b/app/(app)/History/MessageHistory/Menu.tsx @@ -0,0 +1,48 @@ +import React from "react"; +import { BlackDeleteIcon, RedDeleteIcon } from "@/components/UI/icons/deleteIcon" +import { BlackDownloadIcon } from "@/components/UI/icons/downloadIcon" +import { Colors } from "@/constants/Colors"; +import Typography from "@/constants/Typography"; +import { StyleSheet, Text, TouchableOpacity, View } from "react-native" +import { SvgXml } from "react-native-svg" + +interface MenuComponentProps { + closeMenu: () => void; +} + +const MenuComponent: React.FC = ({closeMenu})=>{ + + return( + + + + Clear Chat + + + + + Export Chat + + closeMenu()}> + + Export Chat + + + ) + } + + const styles = StyleSheet.create({ + iconText:{ + flexDirection: "row", + alignItems: "center", + gap: 20 + } + }) + + export default MenuComponent \ No newline at end of file diff --git a/app/(app)/History/VideoCallHistory/[id].tsx b/app/(app)/History/VideoCallHistory/[id].tsx new file mode 100644 index 00000000..d41796c6 --- /dev/null +++ b/app/(app)/History/VideoCallHistory/[id].tsx @@ -0,0 +1,121 @@ +import { MoreIcon } from "@/assets/icons/MoreCircleSvg"; +import { + backArrowBlack, +} from "@/components/UI/icons/backArrow"; +import { Colors } from "@/constants/Colors"; +import Typography from "@/constants/Typography"; +import { router } from "expo-router"; +import { StatusBar } from "expo-status-bar"; +import React, { useState } from "react"; +import { Pressable, Text, TouchableWithoutFeedback } from "react-native"; +import { TouchableOpacity } from "react-native"; +import { View } from "react-native"; +import { SvgXml } from "react-native-svg"; +import DoctorComponent from "../CardComponent"; +import { BlueRightIconWithBg } from "@/components/UI/icons/rigthIcon"; +import HistoryMenu from "../HistoryMenu"; + + +const Ddata = { + id: "1", + image: require("@/assets/images/Dr maria.png"), + method: "video call", + name: "dr Drake", + message: "my pleasure all the best for your carrier life", + day: "Today", + time: "10:00 AM", + }; + +const IndividualCall = () => { +const [menu, setMenu] = useState(false) +const [playBtn, setPlayBtn] = useState(false) + +const handlePlayAudio = ()=> { + setPlayBtn(!playBtn) +} + +const handleMenu =()=> { + setMenu(!menu) +} + + +return ( + + + + + router.back()}> + + + + + + + {menu && ( + + + + )} + + } + method={Ddata.method} + day={Ddata.day} + time={Ddata.time} + /> + + 30 minutes of video calls have been recorded. + { + !playBtn ? ( + + + Play audio recording + ) : ( + + + + + Stop + + + Pause + + + ) + } + + + ); +}; + +export default IndividualCall; diff --git a/app/(app)/History/VideoCallHistory/index.tsx b/app/(app)/History/VideoCallHistory/index.tsx index 199bccb7..ff6a8d27 100644 --- a/app/(app)/History/VideoCallHistory/index.tsx +++ b/app/(app)/History/VideoCallHistory/index.tsx @@ -1,10 +1,151 @@ -import React from 'react' -import { View } from 'react-native' +import { MoreIcon } from "@/assets/icons/MoreCircleSvg"; +import { SearchIcon } from "@/assets/icons/SearchSvg"; +import { Colors } from "@/constants/Colors"; +import Typography from "@/constants/Typography"; +import { StatusBar } from "expo-status-bar"; +import React from "react"; +import { TouchableOpacity } from "react-native"; +import { Image, Text, View, FlatList } from "react-native"; +import { SvgXml } from "react-native-svg"; +import DoctorComponent from "../CardComponent"; +import { BlueRightIconWithBg } from "@/components/UI/icons/rigthIcon"; +import { router } from "expo-router"; + +const Ddata = [ + { + id: "1", + image: require("@/assets/images/Dr maria.png"), + method: "video call", + name: "dr Drake", + message: "my pleasure all the best for your carrier life", + day: "Today", + time: "10:00 AM", + }, + { + id: "2", + image: require("@/assets/images/Dr maria.png"), + method: "voice call", + name: "dr Drake", + message: "my pleasure all the best for your carrier life", + day: "Today", + time: "10:00 AM", + }, + { + id: "3", + image: require("@/assets/images/Dr maria.png"), + method: "voice call", + name: "dr Drake", + message: "my pleasure all the best for your carrier life", + day: "Today", + time: "10:00 AM", + }, +]; const index = () => { return ( - index - ) -} + + + + + + + + History + + + + + + + + + + + + + + + Message + + + + + Voice Call + + + + + Video call + + + + + + ( + } + method={item.method} + day={item.day} + time={item.time} + handle={() =>router.push("History/VideoCallHistory/[id]")} + />)} + keyExtractor={item => item.id} + ItemSeparatorComponent={() => } + contentContainerStyle={{ paddingVertical: 10 }} + /> + + ); +}; -export default index \ No newline at end of file +export default index; diff --git a/app/(app)/History/VoiceCallHistory/[id].tsx b/app/(app)/History/VoiceCallHistory/[id].tsx new file mode 100644 index 00000000..23d736ce --- /dev/null +++ b/app/(app)/History/VoiceCallHistory/[id].tsx @@ -0,0 +1,121 @@ +import { MoreIcon } from "@/assets/icons/MoreCircleSvg"; +import { + backArrowBlack, +} from "@/components/UI/icons/backArrow"; +import { Colors } from "@/constants/Colors"; +import Typography from "@/constants/Typography"; +import { router } from "expo-router"; +import { StatusBar } from "expo-status-bar"; +import React, { useState } from "react"; +import { Pressable, Text, TouchableWithoutFeedback } from "react-native"; +import { TouchableOpacity } from "react-native"; +import { View } from "react-native"; +import { SvgXml } from "react-native-svg"; +import DoctorComponent from "../CardComponent"; +import { BlueRightIconWithBg } from "@/components/UI/icons/rigthIcon"; +import HistoryMenu from "../HistoryMenu"; + + +const Ddata = { + id: "1", + image: require("@/assets/images/Dr maria.png"), + method: "voice call", + name: "dr Drake", + message: "my pleasure all the best for your carrier life", + day: "Today", + time: "10:00 AM", + }; + +const IndividualCall = () => { +const [menu, setMenu] = useState(false) +const [playBtn, setPlayBtn] = useState(false) + +const handlePlayAudio = ()=> { + setPlayBtn(!playBtn) +} + +const handleMenu =()=> { + setMenu(!menu) +} + + + return ( + + + + + router.back()}> + + + + + + + {menu && ( + + + + )} + + } + method={Ddata.method} + day={Ddata.day} + time={Ddata.time} + /> + + 30 minutes of voice calls have been recorded. + { + !playBtn ? ( + + + Play audio recording + ) : ( + + + + + Stop + + + Pause + + + ) + } + + + ); +}; + +export default IndividualCall; diff --git a/app/(app)/History/VoiceCallHistory/index.tsx b/app/(app)/History/VoiceCallHistory/index.tsx index a1b91a22..d18efc40 100644 --- a/app/(app)/History/VoiceCallHistory/index.tsx +++ b/app/(app)/History/VoiceCallHistory/index.tsx @@ -1,10 +1,154 @@ -import React from 'react' -import { View,Text } from 'react-native' +import React from "react"; +import { MoreIcon } from "@/assets/icons/MoreCircleSvg"; +import { SearchIcon } from "@/assets/icons/SearchSvg"; +import { Colors } from "@/constants/Colors"; +import Typography from "@/constants/Typography"; +import { StatusBar } from "expo-status-bar"; +import { TouchableOpacity } from "react-native"; +import { Image, Text, View, FlatList } from "react-native"; +import { SvgXml } from "react-native-svg"; +import DoctorComponent from "../CardComponent"; +import { BlueRightIconWithBg } from "@/components/UI/icons/rigthIcon"; +import { router } from "expo-router"; + +const Ddata = [ + { + id: "1", + image: require("@/assets/images/Dr maria.png"), + method: "voice call", + name: "dr Drake", + message: "my pleasure all the best for your carrier life", + day: "Today", + time: "10:00 AM", + }, + { + id: "2", + image: require("@/assets/images/Dr maria.png"), + method: "voice call", + name: "dr Drake", + message: "my pleasure all the best for your carrier life", + day: "Today", + time: "10:00 AM", + }, + { + id: "3", + image: require("@/assets/images/Dr maria.png"), + method: "voice call", + name: "dr Drake", + message: "my pleasure all the best for your carrier life", + day: "Today", + time: "10:00 AM", + }, +]; const index = () => { + function handleAction(index: number){ + router.push("History/VoiceCallHistory/[id]") + console.log(index) + } return ( - index - ) -} + + + + + + + + History + + + + + + + + + + + + + + + Message + + + + + Voice Call + + + + + Video call + + + + + + ( + } + method={item.method} + day={item.day} + time={item.time} + handle={()=> handleAction(index)} + />)} + keyExtractor={item => item.id} + ItemSeparatorComponent={() => } + contentContainerStyle={{ paddingVertical: 10 }} + /> + + ); +}; -export default index \ No newline at end of file +export default index; diff --git a/app/(app)/History/_layout.tsx b/app/(app)/History/_layout.tsx index f3d063c6..945811a7 100644 --- a/app/(app)/History/_layout.tsx +++ b/app/(app)/History/_layout.tsx @@ -1,9 +1,13 @@ import { Stack } from "expo-router"; +import React from "react"; export default function Layout() { return ( - + + + + ); } diff --git a/app/(app)/History/MessageHistory/index.tsx b/app/(app)/History/index.tsx similarity index 85% rename from app/(app)/History/MessageHistory/index.tsx rename to app/(app)/History/index.tsx index 26154521..98f63558 100644 --- a/app/(app)/History/MessageHistory/index.tsx +++ b/app/(app)/History/index.tsx @@ -8,7 +8,7 @@ import React, { ReactElement, useState } from "react"; import { Platform, TouchableOpacity } from "react-native"; import { Image, ImageBackground, Text, View, FlatList,ScrollView } from "react-native"; import { SvgXml } from "react-native-svg"; -import data from "../history.json" +import data from "@/app/(app)/History/history.json" import NofoundComponent from "@/components/NofoundComponent"; import SearchComponent from "@/components/SearchComponent"; import Historyheader from "@/components/Historyheader"; @@ -27,11 +27,11 @@ interface iconMappingProp{ } const imageMap:imageMapProp = { - 'doctor1.png': require("../../../../assets/images/Doctors/doctor1.png"), - 'doctor2.png': require("../../../../assets/images/Doctors/doctor2.png"), - 'doctor3.png': require("../../../../assets/images/Doctors/doctor3.png"), - 'doctor4.png': require("../../../../assets/images/Doctors/doctor4.png"), - 'doctor5.png':require("../../../../assets/images/Doctors/doctor5.png") + 'doctor1.png': require("@/assets/images/Doctors/doctor1.png"), + 'doctor2.png': require("@/assets/images/Doctors/doctor2.png"), + 'doctor3.png': require("@/assets/images/Doctors/doctor3.png"), + 'doctor4.png': require("@/assets/images/Doctors/doctor4.png"), + 'doctor5.png':require("@/assets/images/Doctors/doctor5.png") } export const iconMapping:iconMappingProp = { @@ -152,6 +152,8 @@ const index = () => { method="Voice Call" day={doctor.timeFrame} time={doctor.time} + onPress={()=> router.push("History/VoiceCallHistory/[id]")} + @@ -161,22 +163,17 @@ const index = () => { ( router.push("History/VideoCallHistory/[id]")} /> ):null - - - )) ): @@ -193,4 +190,5 @@ const index = () => { ); }; -export default index; \ No newline at end of file +export default index; + diff --git a/app/(app)/_layout.tsx b/app/(app)/_layout.tsx index b781c4a9..e0d410a5 100644 --- a/app/(app)/_layout.tsx +++ b/app/(app)/_layout.tsx @@ -1,3 +1,4 @@ +import React from "react"; import { AppointmentIcon } from "@/assets/icons/AppointmentSvg"; import { ArticleIcon } from "@/assets/icons/ArticleSvg"; import { HistoryIcon } from "@/assets/icons/HistorySvg"; diff --git a/components/CardComponent.tsx b/components/CardComponent.tsx index 0ff16917..4932a23c 100644 --- a/components/CardComponent.tsx +++ b/components/CardComponent.tsx @@ -10,7 +10,9 @@ interface DoctorComponentProps { iconComponent?: ReactElement; method: string; day: string; - time: string; + time: string; + onPress: ()=> void + } function DoctorComponentVoice({ imageSource, @@ -19,10 +21,11 @@ function DoctorComponentVoice({ method, day, time, + onPress }: DoctorComponentProps) { return ( router.push("History/VoiceCallHistory")} + onPress={onPress} style={{ borderRadius: 10, borderColor: "white", @@ -82,9 +85,12 @@ function DoctorComponentVideo({ method, day, time, + onPress + }: DoctorComponentProps) { return ( +` + +export const RedDeleteIcon = ` + + + + ` \ No newline at end of file diff --git a/components/UI/icons/rigthIcon.ts b/components/UI/icons/rigthIcon.ts new file mode 100644 index 00000000..6d05fd0a --- /dev/null +++ b/components/UI/icons/rigthIcon.ts @@ -0,0 +1,11 @@ +export const BlueRightIconWithBg = ` + + + + + + + + + +` \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index fc1b225a..2819a12a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "matadors-rn-medica", "version": "1.0.0", "dependencies": { + "@expo/ngrok": "^4.1.3", "@expo/vector-icons": "^14.0.0", "@oclif/screen": "^3.0.8", "@react-native-community/datetimepicker": "8.0.1", @@ -53,7 +54,9 @@ "react-native-svg": "15.2.0", "react-native-vector-icons": "^10.1.0", "react-native-web": "~0.19.6", + "run": "^1.5.0", "sdk": "^0.5.0", + "start": "^5.1.0", "vector-icons": "^0.1.0" }, "devDependencies": { @@ -3793,6 +3796,190 @@ "structured-headers": "^0.4.1" } }, + "node_modules/@expo/ngrok": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@expo/ngrok/-/ngrok-4.1.3.tgz", + "integrity": "sha512-AESYaROGIGKWwWmUyQoUXcbvaUZjmpecC5buArXxYou+RID813F8T0Y5jQ2HUY49mZpYfJiy9oh4VSN37GgrXA==", + "dependencies": { + "@expo/ngrok-bin": "2.3.42", + "got": "^11.5.1", + "uuid": "^3.3.2", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/@expo/ngrok-bin": { + "version": "2.3.42", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin/-/ngrok-bin-2.3.42.tgz", + "integrity": "sha512-kyhORGwv9XpbPeNIrX6QZ9wDVCDOScyTwxeS+ScNmUqYoZqD9LRmEqF7bpDh5VonTsrXgWrGl7wD2++oSHcaTQ==", + "bin": { + "ngrok": "bin/ngrok.js" + }, + "optionalDependencies": { + "@expo/ngrok-bin-darwin-arm64": "2.3.41", + "@expo/ngrok-bin-darwin-x64": "2.3.41", + "@expo/ngrok-bin-freebsd-ia32": "2.3.41", + "@expo/ngrok-bin-freebsd-x64": "2.3.41", + "@expo/ngrok-bin-linux-arm": "2.3.41", + "@expo/ngrok-bin-linux-arm64": "2.3.41", + "@expo/ngrok-bin-linux-ia32": "2.3.41", + "@expo/ngrok-bin-linux-x64": "2.3.41", + "@expo/ngrok-bin-sunos-x64": "2.3.41", + "@expo/ngrok-bin-win32-ia32": "2.3.41", + "@expo/ngrok-bin-win32-x64": "2.3.41" + } + }, + "node_modules/@expo/ngrok-bin-darwin-arm64": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-darwin-arm64/-/ngrok-bin-darwin-arm64-2.3.41.tgz", + "integrity": "sha512-TPf95xp6SkvbRONZjltTOFcCJbmzAH7lrQ36Dv+djrOckWGPVq4HCur48YAeiGDqspmFEmqZ7ykD5c/bDfRFOA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@expo/ngrok-bin-darwin-x64": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-darwin-x64/-/ngrok-bin-darwin-x64-2.3.41.tgz", + "integrity": "sha512-29QZHfX4Ec0p0pQF5UrqiP2/Qe7t2rI96o+5b8045VCEl9AEAKHceGuyo+jfUDR4FSQBGFLSDb06xy8ghL3ZYA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@expo/ngrok-bin-freebsd-ia32": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-freebsd-ia32/-/ngrok-bin-freebsd-ia32-2.3.41.tgz", + "integrity": "sha512-YYXgwNZ+p0aIrwgb+1/RxJbsWhGEzBDBhZulKg1VB7tKDAd2C8uGnbK1rOCuZy013iOUsJDXaj9U5QKc13iIXw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@expo/ngrok-bin-freebsd-x64": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-freebsd-x64/-/ngrok-bin-freebsd-x64-2.3.41.tgz", + "integrity": "sha512-1Ei6K8BB+3etmmBT0tXYC4dyVkJMigT4ELbRTF5jKfw1pblqeXM9Qpf3p8851PTlH142S3bockCeO39rSkOnkg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@expo/ngrok-bin-linux-arm": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-linux-arm/-/ngrok-bin-linux-arm-2.3.41.tgz", + "integrity": "sha512-B6+rW/+tEi7ZrKWQGkRzlwmKo7c1WJhNODFBSgkF/Sj9PmmNhBz67mer91S2+6nNt5pfcwLLd61CjtWfR1LUHQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@expo/ngrok-bin-linux-arm64": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-linux-arm64/-/ngrok-bin-linux-arm64-2.3.41.tgz", + "integrity": "sha512-eC8GA/xPcmQJy4h+g2FlkuQB3lf5DjITy8Y6GyydmPYMByjUYAGEXe0brOcP893aalAzRqbNOAjSuAw1lcCLSQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@expo/ngrok-bin-linux-ia32": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-linux-ia32/-/ngrok-bin-linux-ia32-2.3.41.tgz", + "integrity": "sha512-w5Cy31wSz4jYnygEHS7eRizR1yt8s9TX6kHlkjzayIiRTFRb2E1qD2l0/4T2w0LJpBjM5ZFPaaKqsNWgCUIEow==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@expo/ngrok-bin-linux-x64": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-linux-x64/-/ngrok-bin-linux-x64-2.3.41.tgz", + "integrity": "sha512-LcU3MbYHv7Sn2eFz8Yzo2rXduufOvX1/hILSirwCkH+9G8PYzpwp2TeGqVWuO+EmvtBe6NEYwgdQjJjN6I4L1A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@expo/ngrok-bin-sunos-x64": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-sunos-x64/-/ngrok-bin-sunos-x64-2.3.41.tgz", + "integrity": "sha512-bcOj45BLhiV2PayNmLmEVZlFMhEiiGpOr36BXC0XSL+cHUZHd6uNaS28AaZdz95lrRzGpeb0hAF8cuJjo6nq4g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/@expo/ngrok-bin-win32-ia32": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-win32-ia32/-/ngrok-bin-win32-ia32-2.3.41.tgz", + "integrity": "sha512-0+vPbKvUA+a9ERgiAknmZCiWA3AnM5c6beI+51LqmjKEM4iAAlDmfXNJ89aAbvZMUtBNwEPHzJHnaM4s2SeBhA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@expo/ngrok-bin-win32-x64": { + "version": "2.3.41", + "resolved": "https://registry.npmjs.org/@expo/ngrok-bin-win32-x64/-/ngrok-bin-win32-x64-2.3.41.tgz", + "integrity": "sha512-mncsPRaG462LiYrM8mQT8OYe3/i44m3N/NzUeieYpGi8+pCOo8TIC23kR9P93CVkbM9mmXsy3X6hq91a8FWBdA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@expo/ngrok/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@expo/ngrok/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/@expo/osascript": { "version": "2.0.33", "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz", @@ -7866,6 +8053,17 @@ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", @@ -7882,6 +8080,17 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -7960,6 +8169,17 @@ "@types/node": "*" } }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, "node_modules/@types/cli-progress": { "version": "3.11.5", "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.5.tgz", @@ -7982,6 +8202,11 @@ "@types/node": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -8019,6 +8244,14 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "20.12.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", @@ -8085,6 +8318,14 @@ "@types/react-native": "^0.70" } }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -9440,6 +9681,45 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -9700,6 +9980,17 @@ "node": ">=6" } }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -10373,6 +10664,31 @@ "node": ">=0.10" } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dedent": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", @@ -10440,6 +10756,14 @@ "node": ">=0.8" } }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -13834,6 +14158,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -14055,6 +14403,11 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, "node_modules/http-call": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", @@ -14131,6 +14484,18 @@ "node": ">=0.4.9" } }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -17447,8 +17812,7 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", @@ -17596,7 +17960,6 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "dependencies": { "json-buffer": "3.0.1" } @@ -18133,6 +18496,14 @@ "loose-envify": "cli.js" } }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -18742,6 +19113,14 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", @@ -19215,6 +19594,17 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm": { "version": "10.8.0", "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.0.tgz", @@ -22008,6 +22398,14 @@ "os-tmpdir": "^1.0.0" } }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" + } + }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -22589,6 +22987,17 @@ } ] }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -23612,6 +24021,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -23640,6 +24054,17 @@ "node": ">=10" } }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -23680,6 +24105,20 @@ "rimraf": "bin.js" } }, + "node_modules/run": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/run/-/run-1.5.0.tgz", + "integrity": "sha512-CBPzeX6JQZUdhZpSFyNt2vUk44ivKMWZYCNBYoZYEE46mL9nf6WyMP3320WnzIrJuo89+njiUvlo83jUEXjXLg==", + "dependencies": { + "minimatch": "*" + }, + "bin": { + "runjs": "cli.js" + }, + "engines": { + "node": ">=v0.9.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -24309,6 +24748,15 @@ "node": ">=8" } }, + "node_modules/start": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/start/-/start-5.1.0.tgz", + "integrity": "sha512-lirwWQmvBC65bnxU3HzKx5m7vfZJZTx/FrKyPWbtobcvujGbinQQRrNodtcgkp4mTZ00umzDeg7lraN351l0aA==", + "deprecated": "Deprecated in favor of https://github.com/deepsweet/start", + "engines": { + "node": ">=4" + } + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", diff --git a/package.json b/package.json index 4c57c268..556a3ff5 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "preset": "jest-expo" }, "dependencies": { + "@expo/ngrok": "^4.1.3", "@expo/vector-icons": "^14.0.0", "@oclif/screen": "^3.0.8", "@react-native-community/datetimepicker": "8.0.1", @@ -62,7 +63,9 @@ "react-native-svg": "15.2.0", "react-native-vector-icons": "^10.1.0", "react-native-web": "~0.19.6", + "run": "^1.5.0", "sdk": "^0.5.0", + "start": "^5.1.0", "vector-icons": "^0.1.0" }, "devDependencies": {