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": {