diff --git a/app.json b/app.json
index d33baaa..38eeec9 100644
--- a/app.json
+++ b/app.json
@@ -7,12 +7,6 @@
"orientation": "portrait",
"icon": "./icons/ios/AppIcon.appiconset/icon-1024.png",
"userInterfaceStyle": "light",
- "runtimeVersion": {
- "policy": "appVersion"
- },
- "updates": {
- "url": "https://u.expo.dev/acaedd05-5a2a-4843-a648-e025c08ce7b3"
- },
"splash": {
"image": "./assets/splash-icon.png",
"resizeMode": "contain",
@@ -47,6 +41,13 @@
"eas": {
"projectId": "acaedd05-5a2a-4843-a648-e025c08ce7b3"
}
- }
+ },
+ "runtimeVersion": {
+ "policy": "appVersion"
+ },
+ "updates": {
+ "url": "https://u.expo.dev/acaedd05-5a2a-4843-a648-e025c08ce7b3"
+ },
+ "scheme": "sub2apimobile"
}
}
diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx
index 19409d5..f3261b9 100644
--- a/app/(tabs)/_layout.tsx
+++ b/app/(tabs)/_layout.tsx
@@ -1,4 +1,4 @@
-import { Tabs } from 'expo-router';
+import { Redirect, Tabs } from 'expo-router';
import { ChartNoAxesCombined, Settings2, Users } from 'lucide-react-native';
import { adminConfigState } from '@/src/store/admin-config';
@@ -9,6 +9,10 @@ export default function TabsLayout() {
const config = useSnapshot(adminConfigState);
const hasAccount = Boolean(config.baseUrl.trim());
+ if (!hasAccount) {
+ return ;
+ }
+
return (
-
);
diff --git a/app/(tabs)/accounts.tsx b/app/(tabs)/accounts.tsx
index 29a7aee..daa6471 100644
--- a/app/(tabs)/accounts.tsx
+++ b/app/(tabs)/accounts.tsx
@@ -2,12 +2,13 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { KeyRound, Search, ShieldCheck, ShieldOff } from 'lucide-react-native';
import { router } from 'expo-router';
import { useCallback, useMemo, useState } from 'react';
-import { FlatList, Pressable, Text, TextInput, View } from 'react-native';
+import { FlatList, Pressable, RefreshControl, Text, TextInput, View } from 'react-native';
import { ListCard } from '@/src/components/list-card';
import { ScreenShell } from '@/src/components/screen-shell';
import { useDebouncedValue } from '@/src/hooks/use-debounced-value';
import { getAccount, getAccountTodayStats, getDashboardTrend, listAccounts, setAccountSchedulable, testAccount } from '@/src/services/admin';
+import type { AdminAccount } from '@/src/types/admin';
function getDateRange() {
const end = new Date();
@@ -22,8 +23,20 @@ function getDateRange() {
};
}
+function formatTime(value?: string | null) {
+ if (!value) return '--';
+ const date = new Date(value);
+ if (Number.isNaN(date.getTime())) return '--';
+ return `${date.getFullYear()}/${String(date.getMonth() + 1).padStart(2, '0')}/${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;
+}
+
+function getAccountError(account: AdminAccount) {
+ return Boolean(account.status === 'error' || account.error_message);
+}
+
export default function AccountsScreen() {
const [searchText, setSearchText] = useState('');
+ const [filter, setFilter] = useState<'all' | 'schedulable' | 'paused' | 'error'>('all');
const keyword = useDebouncedValue(searchText.trim(), 300);
const queryClient = useQueryClient();
const range = getDateRange();
@@ -40,95 +53,161 @@ export default function AccountsScreen() {
});
const items = accountsQuery.data?.items ?? [];
+ const filteredItems = useMemo(() => {
+ return items.filter((account) => {
+ if (filter === 'schedulable') return account.schedulable !== false && !getAccountError(account);
+ if (filter === 'paused') return account.schedulable === false && !getAccountError(account);
+ if (filter === 'error') return getAccountError(account);
+ return true;
+ });
+ }, [filter, items]);
const errorMessage = accountsQuery.error instanceof Error ? accountsQuery.error.message : '';
+
+ const summary = useMemo(() => {
+ const total = items.length;
+ const errors = items.filter(getAccountError).length;
+ const paused = items.filter((item) => item.schedulable === false && !getAccountError(item)).length;
+ const active = items.filter((item) => item.schedulable !== false && !getAccountError(item)).length;
+ return { total, active, paused, errors };
+ }, [items]);
+
const listHeader = useMemo(
() => (
-
-
-
+
+
+
+
+
+
+
+ {([
+ ['all', `全部 ${summary.total}`],
+ ['schedulable', `可调度 ${summary.active}`],
+ ['paused', `暂停 ${summary.paused}`],
+ ['error', `异常 ${summary.errors}`],
+ ] as const).map(([key, label]) => {
+ const active = filter === key;
+ return (
+ setFilter(key)}
+ className={active ? 'rounded-full bg-[#1d5f55] px-3 py-2' : 'rounded-full bg-[#e7dfcf] px-3 py-2'}
+ >
+ {label}
+
+ );
+ })}
+
),
- []
+ [filter, summary.active, summary.errors, summary.paused, summary.total]
);
+
const renderItem = useCallback(
- ({ item: account }: { item: (typeof items)[number] }) => (
- {
- void queryClient.prefetchQuery({ queryKey: ['account', account.id], queryFn: () => getAccount(account.id) });
- void queryClient.prefetchQuery({ queryKey: ['account-today-stats', account.id], queryFn: () => getAccountTodayStats(account.id) });
- void queryClient.prefetchQuery({
- queryKey: ['account-trend', account.id, range.start_date, range.end_date],
- queryFn: () => getDashboardTrend({ ...range, granularity: 'day', account_id: account.id }),
- });
- router.push(`/accounts/${account.id}`);
- }}
- >
- {
+ const isError = getAccountError(account);
+ const statusText = isError ? '异常' : account.schedulable ? '可调度' : '暂停调度';
+ const groupsText = account.groups?.map((group) => group.name).filter(Boolean).slice(0, 3).join(' · ');
+
+ return (
+ {
+ void queryClient.prefetchQuery({ queryKey: ['account', account.id], queryFn: () => getAccount(account.id) });
+ void queryClient.prefetchQuery({ queryKey: ['account-today-stats', account.id], queryFn: () => getAccountTodayStats(account.id) });
+ void queryClient.prefetchQuery({
+ queryKey: ['account-trend', account.id, range.start_date, range.end_date],
+ queryFn: () => getDashboardTrend({ ...range, granularity: 'day', account_id: account.id }),
+ });
+ router.push(`/accounts/${account.id}`);
+ }}
>
-
-
- {account.schedulable ? : }
- {account.schedulable ? '可调度' : '暂停调度'}
+
+
+
+
+ {account.schedulable && !isError ? : }
+ {statusText}
+
+ 最近使用 {formatTime(account.last_used_at || account.updated_at)}
+
+
+
+
+ 并发
+ {account.current_concurrency ?? 0} / {account.concurrency ?? 0}
+
+
+ 倍率
+ {(account.rate_multiplier ?? 1).toFixed(2)}x
+
+
+
+ {groupsText ? 分组 {groupsText} : null}
+ {account.error_message ? 异常信息:{account.error_message} : null}
+
+
+ {
+ event.stopPropagation();
+ testAccount(account.id).catch(() => undefined);
+ }}
+ >
+ 测试
+
+ {
+ event.stopPropagation();
+ toggleMutation.mutate({
+ accountId: account.id,
+ schedulable: !account.schedulable,
+ });
+ }}
+ >
+ {account.schedulable ? '暂停' : '恢复'}
+
+
-
- {
- event.stopPropagation();
- testAccount(account.id).catch(() => undefined);
- }}
- >
- 测试
-
- {
- event.stopPropagation();
- toggleMutation.mutate({
- accountId: account.id,
- schedulable: !account.schedulable,
- });
- }}
- >
- 切换
-
-
-
-
-
- ),
- [queryClient, range.end_date, range.start_date, toggleMutation]
+
+
+ );
+ },
+ [filteredItems, queryClient, range.end_date, range.start_date, toggleMutation]
);
+
const emptyState = useMemo(
- () => ,
+ () => ,
[errorMessage]
);
return (
查看密钥状态与调度能力。}
+ title="账号管理"
+ subtitle="看单账号状态、并发、最近使用和异常信息。"
+ titleAside={更接近网页后台的账号视图。}
variant="minimal"
scroll={false}
>
`${item.id}`}
showsVerticalScrollIndicator={false}
+ refreshControl={ void accountsQuery.refetch()} tintColor="#1d5f55" />}
ListHeaderComponent={listHeader}
ListEmptyComponent={emptyState}
ItemSeparatorComponent={() => }
diff --git a/app/(tabs)/groups.tsx b/app/(tabs)/groups.tsx
index 6fab174..3a97111 100644
--- a/app/(tabs)/groups.tsx
+++ b/app/(tabs)/groups.tsx
@@ -1,7 +1,7 @@
import { useQuery } from '@tanstack/react-query';
import { FolderKanban, Layers3, Search } from 'lucide-react-native';
import { useCallback, useMemo, useState } from 'react';
-import { FlatList, Text, TextInput, View } from 'react-native';
+import { FlatList, RefreshControl, Text, TextInput, View } from 'react-native';
import { ListCard } from '@/src/components/list-card';
import { ScreenShell } from '@/src/components/screen-shell';
@@ -72,6 +72,7 @@ export default function GroupsScreen() {
renderItem={renderItem}
keyExtractor={(item) => `${item.id}`}
showsVerticalScrollIndicator={false}
+ refreshControl={ void groupsQuery.refetch()} tintColor="#1d5f55" />}
ListHeaderComponent={listHeader}
ListEmptyComponent={emptyState}
ItemSeparatorComponent={() => }
diff --git a/app/(tabs)/index.tsx b/app/(tabs)/index.tsx
index 4a757e2..3016e68 100644
--- a/app/(tabs)/index.tsx
+++ b/app/(tabs)/index.tsx
@@ -1,5 +1,12 @@
import { Redirect } from 'expo-router';
+import { adminConfigState } from '@/src/store/admin-config';
+
+const { useSnapshot } = require('valtio/react');
+
export default function IndexScreen() {
- return ;
+ const config = useSnapshot(adminConfigState);
+ const hasAccount = Boolean(config.baseUrl.trim());
+
+ return ;
}
diff --git a/app/(tabs)/monitor.tsx b/app/(tabs)/monitor.tsx
index 85b646c..4c6fd08 100644
--- a/app/(tabs)/monitor.tsx
+++ b/app/(tabs)/monitor.tsx
@@ -1,15 +1,13 @@
import { useQuery } from '@tanstack/react-query';
-import { AlertTriangle, Coins, Gauge, RefreshCw, Rows3, Wrench, Zap } from 'lucide-react-native';
+import { router } from 'expo-router';
import { useMemo, useState } from 'react';
-import { Platform, Pressable, Text, View, useWindowDimensions } from 'react-native';
+import { Pressable, RefreshControl, ScrollView, Text, View } from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { BarChartCard } from '@/src/components/bar-chart-card';
+import { formatTokenValue } from '@/src/lib/formatters';
import { DonutChartCard } from '@/src/components/donut-chart-card';
import { LineTrendChart } from '@/src/components/line-trend-chart';
-import { ListCard } from '@/src/components/list-card';
-import { ScreenShell } from '@/src/components/screen-shell';
-import { useScreenInteractive } from '@/src/hooks/use-screen-interactive';
-import { formatTokenValue } from '@/src/lib/formatters';
import { getAdminSettings, getDashboardModels, getDashboardStats, getDashboardTrend, listAccounts } from '@/src/services/admin';
import { adminConfigState } from '@/src/store/admin-config';
@@ -17,6 +15,32 @@ const { useSnapshot } = require('valtio/react');
type RangeKey = '24h' | '7d' | '30d';
+const colors = {
+ page: '#f4efe4',
+ card: '#fbf8f2',
+ mutedCard: '#f1ece2',
+ primary: '#1d5f55',
+ text: '#16181a',
+ subtext: '#6f665c',
+ border: '#e7dfcf',
+ dangerBg: '#fbf1eb',
+ danger: '#c25d35',
+ successBg: '#e6f4ee',
+ success: '#1d5f55',
+};
+
+const RANGE_OPTIONS: Array<{ key: RangeKey; label: string }> = [
+ { key: '24h', label: '24H' },
+ { key: '7d', label: '7D' },
+ { key: '30d', label: '30D' },
+];
+
+const RANGE_TITLE_MAP: Record = {
+ '24h': '24H',
+ '7d': '7D',
+ '30d': '30D',
+};
+
function getDateRange(rangeKey: RangeKey) {
const end = new Date();
const start = new Date();
@@ -38,11 +62,27 @@ function getDateRange(rangeKey: RangeKey) {
};
}
-const RANGE_OPTIONS: Array<{ key: RangeKey; label: string }> = [
- { key: '24h', label: '24H' },
- { key: '7d', label: '7D' },
- { key: '30d', label: '30D' },
-];
+function formatNumber(value?: number) {
+ if (typeof value !== 'number' || Number.isNaN(value)) return '--';
+ return new Intl.NumberFormat('en-US').format(value);
+}
+
+function formatMoney(value?: number) {
+ if (typeof value !== 'number' || Number.isNaN(value)) return '--';
+ return `$${value.toFixed(2)}`;
+}
+
+function formatCompactNumber(value?: number) {
+ if (typeof value !== 'number' || Number.isNaN(value)) return '--';
+ if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`;
+ if (value >= 1_000) return `${(value / 1_000).toFixed(1)}K`;
+ return String(value);
+}
+
+function formatTokenDisplay(value?: number) {
+ if (typeof value !== 'number' || Number.isNaN(value)) return '--';
+ return formatTokenValue(value);
+}
function getPointLabel(value: string, rangeKey: RangeKey) {
if (rangeKey === '24h') {
@@ -52,49 +92,97 @@ function getPointLabel(value: string, rangeKey: RangeKey) {
return value.slice(5, 10);
}
+function getErrorMessage(error: unknown) {
+ if (error instanceof Error && error.message) {
+ switch (error.message) {
+ case 'BASE_URL_REQUIRED':
+ return '请先去服务器页填写服务地址。';
+ case 'ADMIN_API_KEY_REQUIRED':
+ return '请先去服务器页填写 Admin Token。';
+ case 'INVALID_SERVER_RESPONSE':
+ return '当前服务返回的数据格式不正确,请确认它是可用的 Sub2API 管理接口。';
+ default:
+ return error.message;
+ }
+ }
+
+ return '当前无法加载概览数据,请检查服务地址、Token 和网络。';
+}
+
+function Section({ title, subtitle, children, right }: { title: string; subtitle?: string; children: React.ReactNode; right?: React.ReactNode }) {
+ return (
+
+
+
+ {title}
+ {subtitle ? {subtitle} : null}
+
+ {right}
+
+ {children}
+
+ );
+}
+
+function StatCard({ title, value, detail }: { title: string; value: string; detail?: string }) {
+ return (
+
+ {title}
+ {value}
+ {detail ? {detail} : null}
+
+ );
+}
+
export default function MonitorScreen() {
- useScreenInteractive('monitor_interactive');
const config = useSnapshot(adminConfigState);
- const { width } = useWindowDimensions();
- const contentWidth = Math.max(width - 24, 280);
+ const hasAccount = Boolean(config.baseUrl.trim());
const [rangeKey, setRangeKey] = useState('7d');
const range = useMemo(() => getDateRange(rangeKey), [rangeKey]);
- const hasAccount = Boolean(config.baseUrl.trim());
-
- const statsQuery = useQuery({
- queryKey: ['monitor-stats'],
- queryFn: getDashboardStats,
- enabled: hasAccount,
- });
+ const statsQuery = useQuery({ queryKey: ['monitor-stats'], queryFn: getDashboardStats, enabled: hasAccount });
+ const settingsQuery = useQuery({ queryKey: ['admin-settings'], queryFn: getAdminSettings, enabled: hasAccount });
+ const accountsQuery = useQuery({ queryKey: ['monitor-accounts'], queryFn: () => listAccounts(''), enabled: hasAccount });
const trendQuery = useQuery({
queryKey: ['monitor-trend', rangeKey, range.start_date, range.end_date, range.granularity],
queryFn: () => getDashboardTrend(range),
enabled: hasAccount,
});
-
const modelsQuery = useQuery({
queryKey: ['monitor-models', rangeKey, range.start_date, range.end_date],
queryFn: () => getDashboardModels(range),
enabled: hasAccount,
});
- const settingsQuery = useQuery({
- queryKey: ['admin-settings'],
- queryFn: getAdminSettings,
- enabled: hasAccount,
- });
-
- const accountsQuery = useQuery({
- queryKey: ['monitor-accounts'],
- queryFn: () => listAccounts(''),
- enabled: hasAccount,
- });
+ function refetchAll() {
+ statsQuery.refetch();
+ settingsQuery.refetch();
+ accountsQuery.refetch();
+ trendQuery.refetch();
+ modelsQuery.refetch();
+ }
const stats = statsQuery.data;
- const trend = trendQuery.data?.trend ?? [];
- const accounts = accountsQuery.data?.items ?? [];
const siteName = settingsQuery.data?.site_name?.trim() || '管理控制台';
+ const accounts = accountsQuery.data?.items ?? [];
+ const trend = trendQuery.data?.trend ?? [];
+ const topModels = (modelsQuery.data?.models ?? []).slice(0, 5);
+ const errorMessage = getErrorMessage(statsQuery.error ?? settingsQuery.error ?? accountsQuery.error ?? trendQuery.error ?? modelsQuery.error);
+ const currentPageErrorAccounts = accounts.filter((item) => item.status === 'error' || item.error_message).length;
+ const currentPagePausedAccounts = accounts.filter((item) => item.schedulable === false && item.status !== 'error' && !item.error_message).length;
+ const currentPageBusyAccounts = accounts.filter((item) => (item.current_concurrency ?? 0) > 0 && item.status !== 'error' && !item.error_message).length;
+ const totalAccounts = stats?.total_accounts ?? accountsQuery.data?.total ?? accounts.length;
+ const aggregatedErrorAccounts = stats?.error_accounts ?? 0;
+ const errorAccounts = Math.max(aggregatedErrorAccounts, currentPageErrorAccounts);
+ const healthyAccounts = stats?.normal_accounts ?? Math.max(totalAccounts - errorAccounts, 0);
+ const latestTrendPoints = trend.slice(-6).reverse();
+ const selectedTokenTotal = trend.reduce((sum, item) => sum + item.total_tokens, 0);
+ const selectedCostTotal = trend.reduce((sum, item) => sum + item.cost, 0);
+ const selectedOutputTotal = trend.reduce((sum, item) => sum + item.output_tokens, 0);
+ const rangeTitle = RANGE_TITLE_MAP[rangeKey];
+ const isLoading = statsQuery.isLoading || settingsQuery.isLoading || accountsQuery.isLoading;
+ const hasError = Boolean(statsQuery.error || settingsQuery.error || accountsQuery.error || trendQuery.error || modelsQuery.error);
+
const throughputPoints = useMemo(
() => trend.map((item) => ({ label: getPointLabel(item.date, rangeKey), value: item.total_tokens })),
[rangeKey, trend]
@@ -107,281 +195,196 @@ export default function MonitorScreen() {
() => trend.map((item) => ({ label: getPointLabel(item.date, rangeKey), value: item.cost })),
[rangeKey, trend]
);
- const topModels = useMemo(() => (modelsQuery.data?.models ?? []).slice(0, 5), [modelsQuery.data?.models]);
- const incidentAccounts = useMemo(
- () => accounts.filter((item) => item.status === 'error' || item.error_message).slice(0, 5),
- [accounts]
- );
const totalInputTokens = useMemo(() => trend.reduce((sum, item) => sum + item.input_tokens, 0), [trend]);
const totalOutputTokens = useMemo(() => trend.reduce((sum, item) => sum + item.output_tokens, 0), [trend]);
const totalCacheReadTokens = useMemo(() => trend.reduce((sum, item) => sum + item.cache_read_tokens, 0), [trend]);
- const busyAccounts = useMemo(
- () => accounts.filter((item) => (item.current_concurrency ?? 0) > 0 && item.status !== 'error' && !item.error_message).length,
- [accounts]
- );
- const pausedAccounts = useMemo(
- () => accounts.filter((item) => item.schedulable === false && item.status !== 'error' && !item.error_message).length,
- [accounts]
- );
- const errorAccounts = useMemo(
- () => accounts.filter((item) => item.status === 'error' || item.error_message).length,
- [accounts]
- );
- const healthyAccounts = Math.max(accounts.length - busyAccounts - pausedAccounts - errorAccounts, 0);
- const summaryCards = [
- {
- label: 'Token',
- value: stats ? formatTokenValue(stats.today_tokens ?? 0) : '--',
- icon: Zap,
- tone: 'dark' as const,
- },
- {
- label: '成本',
- value: stats ? `$${Number(stats.today_cost ?? 0).toFixed(2)}` : '--',
- icon: Coins,
- },
- {
- label: '输出',
- value: stats ? formatTokenValue(stats.today_output_tokens ?? 0) : '--',
- icon: Rows3,
- },
- {
- label: '账号',
- value: String(accounts.length || stats?.total_accounts || 0),
- detail: `${errorAccounts} 异常 / ${pausedAccounts} 暂停`,
- icon: Rows3,
- },
- {
- label: 'TPM',
- value: String(stats?.tpm ?? '--'),
- icon: Gauge,
- },
- {
- label: '健康',
- value: String(healthyAccounts),
- detail: `${busyAccounts} 繁忙`,
- icon: AlertTriangle,
- },
- ];
- const summaryRows = [0, 3].map((index) => summaryCards.slice(index, index + 3));
- const useMasonry = Platform.OS === 'web' || width >= 640;
- const summaryCardWidth = Math.floor((contentWidth - 16) / 3);
-
- const cards = [
- {
- key: 'throughput',
- node: throughputPoints.length > 1 ? (
-
- ) : null,
- },
- {
- key: 'requests',
- node: requestPoints.length > 1 ? (
-
- ) : null,
- },
- {
- key: 'cost',
- node: costPoints.length > 1 ? (
- `$${value.toFixed(2)}`}
- compact={useMasonry}
- />
- ) : null,
- },
- {
- key: 'token-structure',
- node: (
-
- ),
- },
- {
- key: 'health',
- node: (
-
- ),
- },
- {
- key: 'models',
- node: (
- ({
- label: item.model,
- value: item.total_tokens,
- color: '#a34d2d',
- meta: `请求 ${item.requests} · 成本 $${Number(item.cost).toFixed(2)}`,
- }))}
- formatValue={formatTokenValue}
- />
- ),
- },
- {
- key: 'incidents',
- node: (
-
-
- {incidentAccounts.map((item) => (
-
- {item.name}
- {item.platform} · {item.status || 'unknown'} · {item.schedulable ? '可调度' : '暂停调度'}
- {item.error_message || '状态异常,建议从运维视角继续排查这个上游账号'}
-
- ))}
- {incidentAccounts.length === 0 ? 当前没有检测到异常账号。 : null}
-
-
- ),
- },
- ].filter((item) => item.node);
-
- const leftColumn = cards.filter((_, index) => index % 2 === 0);
- const rightColumn = cards.filter((_, index) => index % 2 === 1);
+ const isRefreshing = statsQuery.isRefetching || settingsQuery.isRefetching || accountsQuery.isRefetching || trendQuery.isRefetching || modelsQuery.isRefetching;
return (
- {siteName} 的关键运行指标。}
- variant="minimal"
- horizontalInsetClassName="px-3"
- contentGapClassName="mt-3 gap-2"
- right={
-
-
- {RANGE_OPTIONS.map((item) => {
- const active = item.key === rangeKey;
-
- return (
- setRangeKey(item.key)}
- >
-
- {item.label}
-
-
- );
- })}
+
+ void refetchAll()} tintColor="#1d5f55" />}
+ >
+
+
+ 概览
+ {siteName} 的当前运行状态。
+
+
+
+ {RANGE_OPTIONS.map((option) => {
+ const active = option.key === rangeKey;
+ return (
+ setRangeKey(option.key)}
+ >
+ {option.label}
+
+ );
+ })}
+
+ {range.start_date} 到 {range.end_date}
- {
- statsQuery.refetch();
- trendQuery.refetch();
- modelsQuery.refetch();
- accountsQuery.refetch();
- settingsQuery.refetch();
- }}
- >
-
-
- }
- >
-
- {summaryRows.map((row, rowIndex) => (
-
- {row.map((item) => {
- const Icon = item.icon;
- return (
-
-
-
- {item.label}
-
-
-
-
- {item.value}
-
- {'detail' in item && item.detail ? (
-
- {item.detail}
-
- ) : null}
+ {!hasAccount ? (
+
+ 请先前往“服务器”页填写服务地址和 Admin Token,再返回查看概览数据。
+ router.push('/settings')}>
+ 去配置服务器
+
+
+ ) : isLoading ? (
+
+ 已连接服务器,正在拉取概览、模型和账号状态数据。
+
+ ) : hasError ? (
+
+
+ {errorMessage}
+
+
+
+ 重试
+
+ router.push('/settings')}>
+ 检查服务器
+
+
+
+ ) : (
+
+
+
+
+
+
+
+
+ 总数
+ {formatNumber(totalAccounts)}
- );
- })}
-
- ))}
-
+
+ 健康
+ {formatNumber(healthyAccounts)}
+
+
+ 异常
+ {formatNumber(errorAccounts)}
+
+
+ 暂停
+ {formatNumber(currentPagePausedAccounts)}
+
+
+ 总数 / 健康 / 异常优先使用后端聚合字段;暂停与繁忙基于当前页账号列表。
+
+
+ {throughputPoints.length > 1 ? (
+
+ ) : null}
+
+ {requestPoints.length > 1 ? (
+
+ ) : null}
+
+ {costPoints.length > 1 ? (
+
+ ) : null}
+
+
+
+
+
+ ({
+ label: model.model,
+ value: model.total_tokens,
+ color: '#a34d2d',
+ meta: `请求 ${formatNumber(model.requests)} · 成本 ${formatMoney(model.cost)}`,
+ }))}
+ formatValue={formatCompactNumber}
+ />
+
+
+ {latestTrendPoints.length === 0 ? (
+ 当前时间范围没有趋势数据。
+ ) : (
+
+ {throughputPoints.length > 1 ? (
+
+ ) : null}
+
+
+ {latestTrendPoints.map((point) => (
+
+ {point.date}
+
+
+ 请求
+ {formatCompactNumber(point.requests)}
+
+
+ Token
+ {formatTokenDisplay(point.total_tokens)}
+
+
+ 成本
+ {formatMoney(point.cost)}
+
+
+
+ ))}
+
+
+ )}
+
- {useMasonry ? (
-
-
- {leftColumn.map((item) => (
- {item.node}
- ))}
-
- {rightColumn.map((item) => (
- {item.node}
- ))}
-
-
- ) : (
- cards.map((item) => {item.node})
- )}
-
+ )}
+
+
);
}
diff --git a/app/(tabs)/settings.tsx b/app/(tabs)/settings.tsx
index 36ff985..781b522 100644
--- a/app/(tabs)/settings.tsx
+++ b/app/(tabs)/settings.tsx
@@ -1,197 +1,299 @@
+import { router } from 'expo-router';
import { zodResolver } from '@hookform/resolvers/zod';
import { Controller, useForm } from 'react-hook-form';
-import { Pressable, Text, TextInput, View } from 'react-native';
+import { Pressable, RefreshControl, ScrollView, Text, TextInput, View } from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
+import { useState } from 'react';
import { z } from 'zod';
-import { ListCard } from '@/src/components/list-card';
-import { ScreenShell } from '@/src/components/screen-shell';
-import { isLocalProxyBaseUrl } from '@/src/lib/admin-fetch';
+import { getAdminSettings, getDashboardStats } from '@/src/services/admin';
import { queryClient } from '@/src/lib/query-client';
-import {
- adminConfigState,
- logoutAdminAccount,
- removeAdminAccount,
- saveAdminConfig,
- setAdminAccountEnabled,
- switchAdminAccount,
- type AdminAccountProfile,
-} from '@/src/store/admin-config';
+import { adminConfigState, removeAdminAccount, saveAdminConfig, switchAdminAccount, type AdminAccountProfile } from '@/src/store/admin-config';
const { useSnapshot } = require('valtio/react');
const schema = z
.object({
- baseUrl: z.string().min(1, '请输入 Host'),
+ baseUrl: z.string().min(1, '请输入服务器地址'),
adminApiKey: z.string(),
})
- .superRefine((values, ctx) => {
- if (!isLocalProxyBaseUrl(values.baseUrl.trim()) && !values.adminApiKey.trim()) {
- ctx.addIssue({
- code: 'custom',
- path: ['adminApiKey'],
- message: '请输入 Admin Token',
- });
- }
+ .refine((values) => values.adminApiKey.trim().length > 0, {
+ path: ['adminApiKey'],
+ message: '请输入 Admin Key',
});
type FormValues = z.infer;
+type ConnectionState = 'idle' | 'checking' | 'success' | 'error';
+
+const colors = {
+ page: '#f4efe4',
+ card: '#fbf8f2',
+ mutedCard: '#f1ece2',
+ primary: '#1d5f55',
+ text: '#16181a',
+ subtext: '#6f665c',
+ border: '#e7dfcf',
+ dangerBg: '#fbf1eb',
+ danger: '#c25d35',
+ successBg: '#e6f4ee',
+ success: '#1d5f55',
+};
+
+function getConnectionErrorMessage(error: unknown) {
+ if (error instanceof Error && error.message) {
+ switch (error.message) {
+ case 'BASE_URL_REQUIRED':
+ return '请先填写服务器地址。';
+ case 'ADMIN_API_KEY_REQUIRED':
+ return '请先填写 Admin Key。';
+ case 'INVALID_SERVER_RESPONSE':
+ return '当前地址返回的数据不正确,请确认它是可用的管理接口。';
+ default:
+ return error.message;
+ }
+ }
+
+ return '连接失败,请检查服务器地址、Admin Key 和网络连通性。';
+}
+
+function ServerCard({
+ account,
+ active,
+ onSelect,
+ onDelete,
+}: {
+ account: AdminAccountProfile;
+ active: boolean;
+ onSelect: () => Promise;
+ onDelete: () => Promise;
+}) {
+ return (
+
+
+
+ {account.label}
+ {account.baseUrl}
+ 更新时间 {new Date(account.updatedAt).toLocaleString()}
+
+ {active ? (
+
+ 当前使用
+
+ ) : null}
+
+
+
+
+ {active ? '已选中' : '切换到此服务器'}
+
+
+ 删除
+
+
+
+ );
+}
export default function SettingsScreen() {
const config = useSnapshot(adminConfigState);
+ const [showForm, setShowForm] = useState(config.accounts.length === 0);
+ const [connectionState, setConnectionState] = useState('idle');
+ const [connectionMessage, setConnectionMessage] = useState('');
+ const [isRefreshing, setIsRefreshing] = useState(false);
const { control, handleSubmit, formState, reset } = useForm({
resolver: zodResolver(schema),
- values: {
- baseUrl: config.baseUrl,
- adminApiKey: config.adminApiKey,
+ defaultValues: {
+ baseUrl: '',
+ adminApiKey: '',
},
});
- async function handleSwitch(account: AdminAccountProfile) {
+ async function verifyAndEnter(successMessage: string) {
+ setConnectionState('checking');
+ setConnectionMessage('正在检测当前服务是否可用...');
+
+ try {
+ queryClient.clear();
+ await queryClient.fetchQuery({ queryKey: ['admin-settings'], queryFn: getAdminSettings });
+ await queryClient.prefetchQuery({ queryKey: ['monitor-stats'], queryFn: getDashboardStats });
+ setConnectionState('success');
+ setConnectionMessage(successMessage);
+ router.replace('/monitor');
+ } catch (error) {
+ setConnectionState('error');
+ setConnectionMessage(getConnectionErrorMessage(error));
+ }
+ }
+
+ async function handleAdd(values: FormValues) {
+ await saveAdminConfig(values);
+ reset({ baseUrl: '', adminApiKey: '' });
+ setShowForm(false);
+ await verifyAndEnter('服务器已添加并切换成功。');
+ }
+
+ async function handleSelect(account: AdminAccountProfile) {
await switchAdminAccount(account.id);
- queryClient.clear();
- reset({ baseUrl: account.baseUrl, adminApiKey: account.adminApiKey });
+ await verifyAndEnter(`已切换到 ${account.label}。`);
}
async function handleDelete(account: AdminAccountProfile) {
await removeAdminAccount(account.id);
queryClient.clear();
- reset({ baseUrl: adminConfigState.baseUrl, adminApiKey: adminConfigState.adminApiKey });
}
- async function handleLogout() {
- await logoutAdminAccount();
- queryClient.clear();
- reset({ baseUrl: '', adminApiKey: '' });
- }
+ async function handleRefresh() {
+ if (!config.baseUrl.trim()) {
+ return;
+ }
- async function handleToggleEnabled(account: AdminAccountProfile) {
- await setAdminAccountEnabled(account.id, account.enabled === false);
- queryClient.clear();
- reset({ baseUrl: adminConfigState.baseUrl, adminApiKey: adminConfigState.adminApiKey });
+ setIsRefreshing(true);
+ setConnectionState('idle');
+ setConnectionMessage('');
+
+ try {
+ await Promise.all([
+ queryClient.fetchQuery({ queryKey: ['admin-settings'], queryFn: getAdminSettings }),
+ queryClient.prefetchQuery({ queryKey: ['monitor-stats'], queryFn: getDashboardStats }),
+ ]);
+ } catch (error) {
+ setConnectionState('error');
+ setConnectionMessage(getConnectionErrorMessage(error));
+ } finally {
+ setIsRefreshing(false);
+ }
}
return (
- 管理 Sub2API 连接。}
- variant="minimal"
- >
-
-
-
- {config.baseUrl || '当前没有激活服务器,可在下方直接新增或切换。'}
-
-
- {
- await saveAdminConfig(values);
- queryClient.clear();
- })}>
- 保存并连接
-
-
- 退出当前
-
+
+ void handleRefresh()} tintColor="#1d5f55" />}
+ >
+
+
+ 服务器
+ 选择当前管理的服务器,或添加新的服务器。
+ {
+ setShowForm((value) => !value);
+ setConnectionState('idle');
+ setConnectionMessage('');
+ }}
+ style={{ backgroundColor: colors.primary, borderRadius: 999, width: 42, height: 42, alignItems: 'center', justifyContent: 'center' }}
+ >
+ +
+
-
-
-
-
- Host
- (
-
- )}
- />
+ {showForm ? (
+
+ 添加服务器
+
+
+ 服务器地址
+ (
+
+ )}
+ />
+
+
+
+ Admin Key
+ (
+
+ )}
+ />
+
+
+ {formState.errors.baseUrl || formState.errors.adminApiKey ? (
+
+ {formState.errors.baseUrl?.message || formState.errors.adminApiKey?.message}
+
+ ) : null}
+
+ {connectionMessage ? (
+
+ {connectionMessage}
+
+ ) : null}
+
+
+
+ {connectionState === 'checking' ? '检测中...' : '保存并使用'}
+
+ {
+ setShowForm(false);
+ setConnectionState('idle');
+ setConnectionMessage('');
+ reset({ baseUrl: '', adminApiKey: '' });
+ }}
+ style={{ flex: 1, backgroundColor: colors.border, borderRadius: 16, paddingVertical: 14, alignItems: 'center' }}
+ >
+ 取消
+
+
+ ) : null}
-
- Admin Token
- (
-
- )}
+
+ {config.accounts.map((account: AdminAccountProfile) => (
+ handleSelect(account)}
+ onDelete={() => handleDelete(account)}
/>
-
+ ))}
- 使用本地代理时可留空 token;直连上游时必须填写。
-
- {(formState.errors.baseUrl || formState.errors.adminApiKey) ? (
-
- {formState.errors.baseUrl?.message || formState.errors.adminApiKey?.message}
+ {config.accounts.length === 0 ? (
+
+ 还没有服务器
+ 点击右上角 + 添加服务器,保存成功后会自动切换并进入概览。
) : null}
-
-
-
-
- {config.accounts.map((account: AdminAccountProfile) => {
- const active = account.id === config.activeAccountId;
- const enabled = account.enabled !== false;
-
- return (
-
-
-
- {account.label}
- {account.baseUrl}
-
- {active ? (
-
- 当前
-
- ) : !enabled ? (
-
- 已禁用
-
- ) : null}
-
-
-
- handleSwitch(account)}
- disabled={!enabled}
- >
-
- {active ? '使用中' : '启用连接'}
-
-
- handleToggleEnabled(account)}>
- {enabled ? '禁用' : '启用'}
-
- handleDelete(account)}>
- 删除
-
-
-
- );
- })}
-
- {config.accounts.length === 0 ? 还没有保存的服务器。 : null}
-
-
-
+
+
);
}
diff --git a/app/(tabs)/users.tsx b/app/(tabs)/users.tsx
index 7812119..edeae80 100644
--- a/app/(tabs)/users.tsx
+++ b/app/(tabs)/users.tsx
@@ -1,264 +1,223 @@
-import { useQueries, useQuery, useQueryClient } from '@tanstack/react-query';
-import * as Clipboard from 'expo-clipboard';
-import { Copy, Search, UserRound } from 'lucide-react-native';
+import { useQuery } from '@tanstack/react-query';
import { router } from 'expo-router';
-import { useCallback, useMemo, useState } from 'react';
-import { FlatList, Pressable, Text, TextInput, View } from 'react-native';
+import { useMemo, useState } from 'react';
+import { FlatList, Pressable, RefreshControl, Text, TextInput, View } from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
-import { ListCard } from '@/src/components/list-card';
-import { ScreenShell } from '@/src/components/screen-shell';
import { useDebouncedValue } from '@/src/hooks/use-debounced-value';
-import { useScreenInteractive } from '@/src/hooks/use-screen-interactive';
-import { getUser, getUserUsage, listUserApiKeys, listUsers } from '@/src/services/admin';
+import { queryClient } from '@/src/lib/query-client';
+import { getUser, listUserApiKeys, listUsers } from '@/src/services/admin';
import { adminConfigState } from '@/src/store/admin-config';
-import type { AdminApiKey, AdminUser, UserUsageSummary } from '@/src/types/admin';
+import type { AdminUser } from '@/src/types/admin';
const { useSnapshot } = require('valtio/react');
-type UserSupplement = {
- usage?: UserUsageSummary;
- apiKeys: AdminApiKey[];
+const colors = {
+ page: '#f4efe4',
+ card: '#fbf8f2',
+ mutedCard: '#f1ece2',
+ primary: '#1d5f55',
+ text: '#16181a',
+ subtext: '#6f665c',
+ dangerBg: '#fbf1eb',
+ danger: '#c25d35',
+ accentBg: '#efe4cf',
+ accentText: '#8c5a22',
};
-function getUserTitle(user: AdminUser) {
- return user.username?.trim() || user.email;
-}
+type SortOrder = 'desc' | 'asc';
-function getUserSortValue(user: AdminUser) {
- const raw = user.updated_at || user.created_at || '';
- const value = raw ? new Date(raw).getTime() : 0;
- return Number.isNaN(value) ? 0 : value;
-}
-
-function formatQuotaValue(value: number) {
+function formatBalance(value?: number) {
+ if (typeof value !== 'number' || Number.isNaN(value)) return '$0.00';
return `$${value.toFixed(2)}`;
}
+function formatActivityTime(value?: string) {
+ if (!value) return '时间未知';
+ const date = new Date(value);
+ if (Number.isNaN(date.getTime())) return '时间未知';
+
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, '0');
+ const day = String(date.getDate()).padStart(2, '0');
+ const hours = String(date.getHours()).padStart(2, '0');
+ const minutes = String(date.getMinutes()).padStart(2, '0');
+ const seconds = String(date.getSeconds()).padStart(2, '0');
+
+ return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
+}
+
+function toTimeValue(value?: string | null) {
+ if (!value) return 0;
+ const time = new Date(value).getTime();
+ return Number.isNaN(time) ? 0 : time;
+}
+
+function getTimeValue(user: AdminUser) {
+ return toTimeValue(user.last_used_at) || toTimeValue(user.updated_at) || toTimeValue(user.created_at) || user.id || 0;
+}
+
+function getUserNameLabel(user: AdminUser) {
+ if (user.username?.trim()) return user.username.trim();
+ if (user.notes?.trim()) return user.notes.trim();
+ return user.email.split('@')[0] || '未命名';
+}
+
+function getErrorMessage(error: unknown) {
+ if (error instanceof Error && error.message) {
+ switch (error.message) {
+ case 'BASE_URL_REQUIRED':
+ return '请先到服务器页填写服务地址。';
+ case 'ADMIN_API_KEY_REQUIRED':
+ return '请先到服务器页填写 Admin Token。';
+ default:
+ return error.message;
+ }
+ }
+
+ return '当前无法加载页面数据,请检查服务地址、Token 和网络。';
+}
+
+function MetricTile({ title, value, tone = 'default' }: { title: string; value: string; tone?: 'default' | 'accent' }) {
+ const backgroundColor = tone === 'accent' ? colors.accentBg : colors.mutedCard;
+ const valueColor = tone === 'accent' ? colors.accentText : colors.text;
+
+ return (
+
+ {title}
+
+ {value}
+
+
+ );
+}
+
+function UserCard({ user }: { user: AdminUser }) {
+ const isAdmin = user.role?.trim().toLowerCase() === 'admin';
+ const statusLabel = `${isAdmin ? 'admin · ' : ''}${user.status || 'active'}`;
+
+ return (
+
+
+
+ {user.email}
+ 最近使用 {formatActivityTime(user.last_used_at || user.updated_at || user.created_at)}
+
+
+ {statusLabel}
+
+
+
+
+
+
+
+
+ );
+}
+
export default function UsersScreen() {
- useScreenInteractive('users_interactive');
const config = useSnapshot(adminConfigState);
- const [searchText, setSearchText] = useState('');
- const [sortOrder, setSortOrder] = useState<'desc' | 'asc'>('desc');
- const [copiedKeyId, setCopiedKeyId] = useState(null);
- const keyword = useDebouncedValue(searchText.trim(), 300);
- const queryClient = useQueryClient();
const hasAccount = Boolean(config.baseUrl.trim());
+ const [searchText, setSearchText] = useState('');
+ const [sortOrder, setSortOrder] = useState('desc');
+ const debouncedSearchText = useDebouncedValue(searchText, 250);
const usersQuery = useQuery({
- queryKey: ['users', keyword],
- queryFn: () => listUsers(keyword),
+ queryKey: ['users', debouncedSearchText],
+ queryFn: () => listUsers(debouncedSearchText),
enabled: hasAccount,
});
- const items = usersQuery.data?.items ?? [];
- const userDetailQueries = useQueries({
- queries: items.map((user) => ({
- queryKey: ['user-list-supplement', user.id],
- queryFn: async () => {
- const [usage, apiKeysData] = await Promise.all([getUserUsage(user.id), listUserApiKeys(user.id)]);
+ const users = useMemo(() => {
+ const items = [...(usersQuery.data?.items ?? [])];
+ items.sort((left, right) => {
+ const value = getTimeValue(left) - getTimeValue(right);
+ return sortOrder === 'desc' ? -value : value;
+ });
+ return items;
+ }, [sortOrder, usersQuery.data?.items]);
- return {
- usage,
- apiKeys: apiKeysData.items ?? [],
- } satisfies UserSupplement;
- },
- enabled: hasAccount,
- staleTime: 60_000,
- })),
- });
-
- const errorMessage = usersQuery.error instanceof Error ? usersQuery.error.message : '';
- const supplementsByUserId = useMemo(
- () =>
- items.reduce>((result, user, index) => {
- result[user.id] = userDetailQueries[index]?.data;
- return result;
- }, {}),
- [items, userDetailQueries]
- );
- const sortedItems = useMemo(
- () =>
- [...items].sort((left, right) => {
- const delta = getUserSortValue(right) - getUserSortValue(left);
- return sortOrder === 'desc' ? delta : -delta;
- }),
- [items, sortOrder]
- );
-
- async function copyKey(keyId: number, value: string) {
- await Clipboard.setStringAsync(value);
- setCopiedKeyId(keyId);
- setTimeout(() => setCopiedKeyId((current) => (current === keyId ? null : current)), 1600);
- }
-
- const renderItem = useCallback(
- ({ item: user }: { item: (typeof sortedItems)[number] }) => {
- const keyItems = (supplementsByUserId[user.id]?.apiKeys ?? []).slice(0, 3);
-
- return (
- {
- void queryClient.prefetchQuery({ queryKey: ['user', user.id], queryFn: () => getUser(user.id) });
- void queryClient.prefetchQuery({ queryKey: ['user-usage', user.id], queryFn: () => getUserUsage(user.id) });
- void queryClient.prefetchQuery({ queryKey: ['user-api-keys', user.id], queryFn: () => listUserApiKeys(user.id) });
- router.push(`/users/${user.id}`);
- }}
- >
-
-
-
-
- 余额
- ${Number(user.balance ?? 0).toFixed(2)}
-
-
-
-
-
- Keys
- {keyItems.length} 个
-
-
-
- {keyItems.map((apiKey, index) => (
-
- {(() => {
- const quota = Number(apiKey.quota ?? 0);
- const used = Number(apiKey.quota_used ?? 0);
- const isUnlimited = quota <= 0;
- const progressWidth = isUnlimited ? '16%' : (`${Math.max(Math.min((used / quota) * 100, 100), 6)}%` as `${number}%`);
-
- return (
- <>
-
-
- {apiKey.name}
-
-
- {isUnlimited ? `${formatQuotaValue(used)} / 无限` : `${formatQuotaValue(used)} / ${formatQuotaValue(quota)}`}
-
- {
- event.stopPropagation();
- void copyKey(apiKey.id, apiKey.key);
- }}
- >
-
-
-
-
-
- = 0.85
- ? 'h-full rounded-full bg-[#c25d35]'
- : used / Math.max(quota, 1) >= 0.6
- ? 'h-full rounded-full bg-[#d38b36]'
- : 'h-full rounded-full bg-[#1d5f55]'
- }
- style={{ width: progressWidth }}
- />
-
-
- {copiedKeyId === apiKey.id ? 已复制 : null}
- >
- );
- })()}
-
- ))}
-
- {keyItems.length === 0 ? (
-
- 当前用户还没有可展示的 token 额度信息。
-
- ) : null}
-
-
-
-
-
- );
- },
- [copiedKeyId, queryClient, sortedItems, supplementsByUserId]
- );
-
- const emptyState = useMemo(
- () => (
-
- ),
- [errorMessage, hasAccount]
- );
+ const errorMessage = getErrorMessage(usersQuery.error);
return (
- 搜索结果 {sortedItems.length}}
- variant="minimal"
- scroll={false}
- bottomInsetClassName="pb-12"
- >
-
-
-
-
-
-
-
- setSortOrder('desc')}
- >
-
- 最新
-
-
- setSortOrder('asc')}
- >
-
- 最早
-
-
-
+
+
+
+ 用户
+ 查看用户列表并进入详情页管理账号。
-
+
+
+
+
+ setSortOrder((value) => (value === 'desc' ? 'asc' : 'desc'))}
+ style={{ backgroundColor: colors.card, borderRadius: 16, paddingHorizontal: 14, paddingVertical: 14, minWidth: 92, alignItems: 'center' }}
+ >
+ 时间
+ {sortOrder === 'desc' ? '倒序' : '正序'}
+
+
+
+ {!hasAccount ? (
+
+ 未连接服务器
+ 请先到“服务器”页完成连接,再查看用户列表。
+ router.push('/settings')}
+ >
+ 去配置服务器
+
+
+ ) : usersQuery.isLoading ? (
+
+ 正在加载用户
+ 已连接服务器,正在拉取用户列表。
+
+ ) : usersQuery.error ? (
+
+ 加载失败
+
+ {errorMessage}
+
+
+ ) : (
`${item.id}`}
showsVerticalScrollIndicator={false}
- ListHeaderComponent={() => }
- ListEmptyComponent={emptyState}
- ListFooterComponent={() => }
- ItemSeparatorComponent={() => }
- keyboardShouldPersistTaps="handled"
- removeClippedSubviews
- initialNumToRender={8}
- maxToRenderPerBatch={8}
- windowSize={5}
+ refreshControl={ void usersQuery.refetch()} tintColor="#1d5f55" />}
+ contentContainerStyle={{ paddingBottom: 8, gap: 12, flexGrow: users.length === 0 ? 1 : 0 }}
+ ListEmptyComponent={
+
+ 暂无用户
+ 当前搜索条件下没有匹配结果,可以修改关键词后重试。
+
+ }
+ renderItem={({ item }) => (
+ {
+ void queryClient.prefetchQuery({ queryKey: ['user', item.id], queryFn: () => getUser(item.id) });
+ void queryClient.prefetchQuery({ queryKey: ['user-api-keys', item.id], queryFn: () => listUserApiKeys(item.id) });
+ router.push(`/users/${item.id}`);
+ }}
+ >
+
+
+ )}
/>
-
+ )}
-
+
);
}
diff --git a/app/_layout.tsx b/app/_layout.tsx
index a632382..a13d097 100644
--- a/app/_layout.tsx
+++ b/app/_layout.tsx
@@ -12,16 +12,20 @@ import { adminConfigState, hydrateAdminConfig } from '@/src/store/admin-config';
const { useSnapshot } = require('valtio/react');
+export const unstable_settings = {
+ initialRouteName: '(tabs)',
+};
+
export default function RootLayout() {
+ const config = useSnapshot(adminConfigState);
+
useEffect(() => {
hydrateAdminConfig()
.then(() => markPerformance('config_hydrated'))
.catch(() => undefined);
}, []);
- const config = useSnapshot(adminConfigState);
const isReady = config.hydrated;
-
return (
@@ -30,10 +34,22 @@ export default function RootLayout() {
) : (
-
+
-
+
)}
diff --git a/app/accounts/[id].tsx b/app/accounts/[id].tsx
index b524d04..bc7a9c0 100644
--- a/app/accounts/[id].tsx
+++ b/app/accounts/[id].tsx
@@ -66,11 +66,18 @@ export default function AccountDetailScreen() {
label: item.date.slice(5),
value: item.total_tokens,
}));
+ const isRefreshing = accountQuery.isRefetching || todayStatsQuery.isRefetching || trendQuery.isRefetching;
+
+ function handleRefresh() {
+ void Promise.all([accountQuery.refetch(), todayStatsQuery.refetch(), trendQuery.refetch()]);
+ }
return (
router.back()}>
diff --git a/app/login.tsx b/app/login.tsx
index 80ceaf6..193c6cd 100644
--- a/app/login.tsx
+++ b/app/login.tsx
@@ -1,39 +1,62 @@
-import { router } from 'expo-router';
+import { Redirect, router } from 'expo-router';
import { zodResolver } from '@hookform/resolvers/zod';
-import { Globe, KeyRound } from 'lucide-react-native';
import { Controller, useForm } from 'react-hook-form';
-import { Pressable, Text, TextInput, View } from 'react-native';
+import { Pressable, ScrollView, Text, TextInput, View } from 'react-native';
+import { useState } from 'react';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { z } from 'zod';
-import { ListCard } from '@/src/components/list-card';
-import { ScreenShell } from '@/src/components/screen-shell';
-import { useScreenInteractive } from '@/src/hooks/use-screen-interactive';
-import { isLocalProxyBaseUrl } from '@/src/lib/admin-fetch';
+import { getAdminSettings, getDashboardStats } from '@/src/services/admin';
import { queryClient } from '@/src/lib/query-client';
-import { adminConfigState, removeAdminAccount, saveAdminConfig, setAdminAccountEnabled, switchAdminAccount, type AdminAccountProfile } from '@/src/store/admin-config';
+import { adminConfigState, saveAdminConfig } from '@/src/store/admin-config';
const { useSnapshot } = require('valtio/react');
const schema = z
.object({
- baseUrl: z.string().min(1, '请输入 Host'),
+ baseUrl: z.string().min(1, '请输入服务器地址'),
adminApiKey: z.string(),
})
- .superRefine((values, ctx) => {
- if (!isLocalProxyBaseUrl(values.baseUrl.trim()) && !values.adminApiKey.trim()) {
- ctx.addIssue({
- code: 'custom',
- path: ['adminApiKey'],
- message: '请输入 Admin Token',
- });
- }
+ .refine((values) => values.adminApiKey.trim().length > 0, {
+ path: ['adminApiKey'],
+ message: '请输入 Admin Key',
});
type FormValues = z.infer;
+type ConnectionState = 'idle' | 'checking' | 'error';
+
+const colors = {
+ page: '#f4efe4',
+ card: '#fbf8f2',
+ mutedCard: '#f1ece2',
+ primary: '#1d5f55',
+ text: '#16181a',
+ subtext: '#6f665c',
+ border: '#e7dfcf',
+ dangerBg: '#fbf1eb',
+ danger: '#c25d35',
+};
+
+function getConnectionErrorMessage(error: unknown) {
+ if (error instanceof Error && error.message) {
+ switch (error.message) {
+ case 'BASE_URL_REQUIRED':
+ return '请先填写服务器地址。';
+ case 'ADMIN_API_KEY_REQUIRED':
+ return '请先填写 Admin Key。';
+ case 'INVALID_SERVER_RESPONSE':
+ return '当前地址返回的数据不正确,请确认它是可用的管理接口。';
+ default:
+ return error.message;
+ }
+ }
+
+ return '连接失败,请检查服务器地址、Admin Key 和网络连通性。';
+}
export default function LoginScreen() {
- useScreenInteractive('login_interactive');
const config = useSnapshot(adminConfigState);
+ const hasAccount = Boolean(config.baseUrl.trim());
const { control, handleSubmit, formState } = useForm({
resolver: zodResolver(schema),
defaultValues: {
@@ -41,115 +64,111 @@ export default function LoginScreen() {
adminApiKey: config.adminApiKey,
},
});
+ const [connectionState, setConnectionState] = useState('idle');
+ const [connectionMessage, setConnectionMessage] = useState('');
+
+ if (hasAccount) {
+ return ;
+ }
return (
- 添加、切换或恢复 Sub2API 账号。}
- variant="minimal"
- >
- {config.accounts.length > 0 ? (
-
-
- {config.accounts.map((account: AdminAccountProfile) => {
- const active = account.id === config.activeAccountId;
- const enabled = account.enabled !== false;
-
- return (
-
- {account.label}
- {account.baseUrl}
-
- {
- await switchAdminAccount(account.id);
- queryClient.clear();
- router.replace('/monitor');
- }}
- disabled={!enabled}
- >
-
- {active ? '使用中' : '切换账号'}
-
-
- {
- await setAdminAccountEnabled(account.id, account.enabled === false);
- }}
- >
- {enabled ? '禁用' : '启用'}
-
- {
- await removeAdminAccount(account.id);
- }}
- >
- 删除
-
-
-
- );
- })}
+
+
+
+
+ 管理员入口
+
+ 首次进入请填写服务器地址和 Admin Key。连接成功后即可进入应用,并在“服务器”页管理多个服务器。
+
-
- ) : null}
-
- (
-
- )}
- />
-
+
+
+ 服务器地址
+ (
+ {
+ if (connectionState !== 'idle') {
+ setConnectionState('idle');
+ setConnectionMessage('');
+ }
+ onChange(text);
+ }}
+ placeholder="例如:https://api.example.com"
+ placeholderTextColor="#9b9081"
+ autoCapitalize="none"
+ autoCorrect={false}
+ style={{ backgroundColor: colors.mutedCard, borderRadius: 16, paddingHorizontal: 16, paddingVertical: 14, fontSize: 16, color: colors.text }}
+ />
+ )}
+ />
+
-
- (
-
- )}
- />
-
+
+ Admin Key
+ (
+ {
+ if (connectionState !== 'idle') {
+ setConnectionState('idle');
+ setConnectionMessage('');
+ }
+ onChange(text);
+ }}
+ placeholder="admin-xxxxxxxx"
+ placeholderTextColor="#9b9081"
+ autoCapitalize="none"
+ autoCorrect={false}
+ style={{ backgroundColor: colors.mutedCard, borderRadius: 16, paddingHorizontal: 16, paddingVertical: 14, fontSize: 16, color: colors.text }}
+ />
+ )}
+ />
+
- {(formState.errors.baseUrl || formState.errors.adminApiKey) ? (
-
- {formState.errors.baseUrl?.message || formState.errors.adminApiKey?.message}
+ {formState.errors.baseUrl || formState.errors.adminApiKey ? (
+
+ {formState.errors.baseUrl?.message || formState.errors.adminApiKey?.message}
+
+ ) : null}
+
+ {connectionMessage ? (
+
+ {connectionMessage}
+
+ ) : null}
+
+ {
+ setConnectionState('checking');
+ setConnectionMessage('正在验证服务器连接...');
+
+ try {
+ await saveAdminConfig(values);
+ queryClient.clear();
+ await queryClient.fetchQuery({ queryKey: ['admin-settings'], queryFn: getAdminSettings });
+ await queryClient.prefetchQuery({ queryKey: ['monitor-stats'], queryFn: getDashboardStats });
+ router.replace('/monitor');
+ } catch (error) {
+ setConnectionState('error');
+ setConnectionMessage(getConnectionErrorMessage(error));
+ }
+ })}
+ >
+ {connectionState === 'checking' ? '连接中...' : '进入应用'}
+
+
- ) : null}
-
- {
- await saveAdminConfig(values);
- queryClient.clear();
- router.replace('/monitor');
- })}
- >
-
- {config.saving ? '登录中...' : '进入管理台'}
-
-
-
+
+
);
}
diff --git a/app/users/[id].tsx b/app/users/[id].tsx
index f663d63..5e1dc42 100644
--- a/app/users/[id].tsx
+++ b/app/users/[id].tsx
@@ -1,44 +1,252 @@
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
-import { zodResolver } from '@hookform/resolvers/zod';
import * as Clipboard from 'expo-clipboard';
-import { ArrowLeftRight, ChevronLeft, Copy, KeyRound, Search, Wallet } from 'lucide-react-native';
-import { router, useLocalSearchParams } from 'expo-router';
+import { Stack, useLocalSearchParams } from 'expo-router';
import { useMemo, useState } from 'react';
-import { Controller, useForm } from 'react-hook-form';
-import { Pressable, Text, TextInput, View } from 'react-native';
-import { z } from 'zod';
+import { Pressable, ScrollView, Text, TextInput, View } from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
-import { DetailRow } from '@/src/components/detail-row';
-import { ListCard } from '@/src/components/list-card';
-import { formatDisplayTime } from '@/src/lib/formatters';
-import { ScreenShell } from '@/src/components/screen-shell';
-import { useDebouncedValue } from '@/src/hooks/use-debounced-value';
-import { getUser, getUserUsage, listUserApiKeys, updateUserBalance } from '@/src/services/admin';
-import type { BalanceOperation } from '@/src/types/admin';
+import { LineTrendChart } from '@/src/components/line-trend-chart';
+import { getDashboardSnapshot, getUsageStats, getUser, listUserApiKeys, updateUserBalance } from '@/src/services/admin';
+import type { AdminApiKey, BalanceOperation } from '@/src/types/admin';
-const schema = z.object({
- amount: z.string().min(1, '请输入金额'),
- notes: z.string().optional(),
-});
+const colors = {
+ page: '#f4efe4',
+ card: '#fbf8f2',
+ text: '#16181a',
+ subtext: '#6f665c',
+ border: '#e7dfcf',
+ primary: '#1d5f55',
+ dark: '#1b1d1f',
+ errorBg: '#f7e1d6',
+ errorText: '#a4512b',
+ muted: '#f7f1e6',
+};
-type FormValues = z.infer;
+type RangeKey = '24h' | '7d' | '30d';
+
+const RANGE_OPTIONS: Array<{ key: RangeKey; label: string }> = [
+ { key: '24h', label: '24H' },
+ { key: '7d', label: '7D' },
+ { key: '30d', label: '30D' },
+];
+
+function getDateRange(rangeKey: RangeKey) {
+ const end = new Date();
+ const start = new Date();
+
+ if (rangeKey === '24h') {
+ start.setHours(end.getHours() - 23, 0, 0, 0);
+ } else if (rangeKey === '30d') {
+ start.setDate(end.getDate() - 29);
+ } else {
+ start.setDate(end.getDate() - 6);
+ }
+
+ const toDate = (value: Date) => value.toISOString().slice(0, 10);
+
+ return {
+ start_date: toDate(start),
+ end_date: toDate(end),
+ granularity: rangeKey === '24h' ? ('hour' as const) : ('day' as const),
+ };
+}
+
+function getErrorMessage(error: unknown) {
+ if (error instanceof Error && error.message) {
+ switch (error.message) {
+ case 'BASE_URL_REQUIRED':
+ return '请先到服务器页填写服务地址。';
+ case 'ADMIN_API_KEY_REQUIRED':
+ return '请先到服务器页填写 Admin Token。';
+ default:
+ return error.message;
+ }
+ }
+
+ return '加载失败,请稍后重试。';
+}
+
+function formatMoney(value?: number | null) {
+ return `$${Number(value ?? 0).toFixed(2)}`;
+}
+
+function formatUsageCost(stats?: { total_account_cost?: number | null; total_actual_cost?: number | null; total_cost?: number | null }) {
+ const value = Number(stats?.total_account_cost ?? stats?.total_actual_cost ?? stats?.total_cost ?? 0);
+ return `$${value.toFixed(4)}`;
+}
+
+function formatTokenValue(value?: number | null) {
+ const number = Number(value ?? 0);
+ if (number >= 1_000_000_000) return `${(number / 1_000_000_000).toFixed(2)}B`;
+ if (number >= 1_000_000) return `${(number / 1_000_000).toFixed(2)}M`;
+ if (number >= 1_000) return `${(number / 1_000).toFixed(2)}K`;
+ return new Intl.NumberFormat('en-US').format(number);
+}
+
+
+function formatQuota(quotaUsed?: number | null, quota?: number | null) {
+ const used = Number(quotaUsed ?? 0);
+ const limit = Number(quota ?? 0);
+
+ if (limit <= 0) {
+ return '∞';
+ }
+
+ return `${used} / ${limit}`;
+}
+
+function formatTime(value?: string | null) {
+ if (!value) return '--';
+
+ const date = new Date(value);
+ if (Number.isNaN(date.getTime())) return value;
+
+ const year = date.getFullYear();
+ const month = `${date.getMonth() + 1}`.padStart(2, '0');
+ const day = `${date.getDate()}`.padStart(2, '0');
+ const hours = `${date.getHours()}`.padStart(2, '0');
+ const minutes = `${date.getMinutes()}`.padStart(2, '0');
+
+ return `${year}-${month}-${day} ${hours}:${minutes}`;
+}
+
+function Section({ title, children }: { title: string; children: React.ReactNode }) {
+ return (
+
+ {title}
+ {children}
+
+ );
+}
+
+function GridField({ label, value }: { label: string; value: string }) {
+ return (
+
+ {label}
+ {value}
+
+ );
+}
+
+function MetricCard({ label, value }: { label: string; value: string }) {
+ return (
+
+ {label}
+ {value}
+
+ );
+}
+
+function StatusBadge({ text }: { text: string }) {
+ const normalized = text.toLowerCase();
+ const backgroundColor = normalized === 'active' ? '#dff4ea' : normalized === 'inactive' ? '#ece5da' : '#f7e1d6';
+ const color = normalized === 'active' ? '#17663f' : normalized === 'inactive' ? '#6f665c' : '#a4512b';
+
+ return (
+
+ {text}
+
+ );
+}
+
+function CopyInlineButton({ copied, onPress }: { copied: boolean; onPress: () => void }) {
+ return (
+
+ {copied ? '已复制' : '复制'}
+
+ );
+}
+
+function KeyItem({ item, copied, onCopy }: { item: AdminApiKey; copied: boolean; onCopy: () => void }) {
+ return (
+
+
+
+
+ {item.name || `Key #${item.id}`}
+
+
+ {item.group?.name || '未分组'}
+
+
+
+
+ {item.key || '--'}
+
+
+
+ 已用额度
+ {formatQuota(item.quota_used, item.quota)}
+
+
+ 最后使用时间
+ {formatTime(item.last_used_at || item.updated_at || item.created_at)}
+
+
+
+ );
+}
export default function UserDetailScreen() {
const { id } = useLocalSearchParams<{ id: string }>();
const userId = Number(id);
const queryClient = useQueryClient();
+
const [operation, setOperation] = useState('add');
- const [keySearchText, setKeySearchText] = useState('');
- const [statusFilter, setStatusFilter] = useState<'all' | 'active' | 'inactive'>('all');
+ const [amount, setAmount] = useState('10');
+ const [notes, setNotes] = useState('');
+ const [formError, setFormError] = useState(null);
+ const [searchText, setSearchText] = useState('');
const [copiedKeyId, setCopiedKeyId] = useState(null);
- const keySearch = useDebouncedValue(keySearchText.trim().toLowerCase(), 250);
- const { control, handleSubmit, reset, formState } = useForm({
- resolver: zodResolver(schema),
- defaultValues: {
- amount: '10',
- notes: '',
- },
- });
+ const [rangeKey, setRangeKey] = useState('7d');
+ const range = getDateRange(rangeKey);
const userQuery = useQuery({
queryKey: ['user', userId],
@@ -46,199 +254,329 @@ export default function UserDetailScreen() {
enabled: Number.isFinite(userId),
});
- const usageQuery = useQuery({
- queryKey: ['user-usage', userId],
- queryFn: () => getUserUsage(userId),
- enabled: Number.isFinite(userId),
- });
-
const apiKeysQuery = useQuery({
queryKey: ['user-api-keys', userId],
queryFn: () => listUserApiKeys(userId),
enabled: Number.isFinite(userId),
});
+ const usageStatsQuery = useQuery({
+ queryKey: ['usage-stats', 'user', userId, rangeKey, range.start_date, range.end_date],
+ queryFn: () => getUsageStats({ ...range, user_id: userId }),
+ enabled: Number.isFinite(userId),
+ });
+
+ const usageSnapshotQuery = useQuery({
+ queryKey: ['usage-snapshot', 'user', userId, rangeKey, range.start_date, range.end_date, range.granularity],
+ queryFn: () =>
+ getDashboardSnapshot({
+ ...range,
+ user_id: userId,
+ include_stats: false,
+ include_trend: true,
+ include_model_stats: false,
+ include_group_stats: false,
+ include_users_trend: false,
+ }),
+ enabled: Number.isFinite(userId),
+ });
+;
+;
+
const balanceMutation = useMutation({
- mutationFn: (values: FormValues & { operation: BalanceOperation }) =>
+ mutationFn: (payload: { amount: number; notes?: string; operation: BalanceOperation }) =>
updateUserBalance(userId, {
- balance: Number(values.amount),
- operation: values.operation,
- notes: values.notes,
+ balance: payload.amount,
+ notes: payload.notes,
+ operation: payload.operation,
}),
onSuccess: () => {
+ setFormError(null);
+ setAmount('10');
+ setNotes('');
queryClient.invalidateQueries({ queryKey: ['user', userId] });
queryClient.invalidateQueries({ queryKey: ['users'] });
- reset({ amount: '10', notes: '' });
},
+ onError: (error) => setFormError(getErrorMessage(error)),
});
const user = userQuery.data;
- const usage = usageQuery.data;
const apiKeys = apiKeysQuery.data?.items ?? [];
- const filteredApiKeys = useMemo(
- () =>
- apiKeys.filter((item) => {
- const matchesStatus = statusFilter === 'all' ? true : item.status === statusFilter;
- const matchesSearch = !keySearch
- ? true
- : [item.name, item.key, item.group?.name]
- .filter(Boolean)
- .join(' ')
- .toLowerCase()
- .includes(keySearch);
- return matchesStatus && matchesSearch;
- }),
- [apiKeys, keySearch, statusFilter]
- );
+ const filteredApiKeys = useMemo(() => {
+ const keyword = searchText.trim().toLowerCase();
- function maskKey(value: string) {
- if (!value || value.length < 16) {
- return value;
+ return apiKeys.filter((item) => {
+ const haystack = [item.name, item.key, item.group?.name].filter(Boolean).join(' ').toLowerCase();
+ return keyword ? haystack.includes(keyword) : true;
+ });
+ }, [apiKeys, searchText]);
+ const trendPoints = (usageSnapshotQuery.data?.trend ?? []).map((item) => ({
+ label: rangeKey === '24h' ? item.date.slice(11, 13) : item.date.slice(5, 10),
+ value: item.total_tokens,
+ }));
+
+ function submitBalance() {
+ const numericAmount = Number(amount);
+
+ if (!amount.trim()) {
+ setFormError('请输入金额。');
+ return;
}
- return `${value.slice(0, 8)}••••••${value.slice(-8)}`;
+ if (!Number.isFinite(numericAmount) || numericAmount < 0) {
+ setFormError('金额格式不正确。');
+ return;
+ }
+
+ balanceMutation.mutate({
+ amount: numericAmount,
+ notes: notes.trim() || undefined,
+ operation,
+ });
}
- async function copyKey(keyId: number, value: string) {
- await Clipboard.setStringAsync(value);
- setCopiedKeyId(keyId);
- setTimeout(() => setCopiedKeyId((current) => (current === keyId ? null : current)), 1600);
+ async function copyKey(item: AdminApiKey) {
+ await Clipboard.setStringAsync(item.key || '');
+ setCopiedKeyId(item.id);
+ setTimeout(() => {
+ setCopiedKeyId((current) => (current === item.id ? null : current));
+ }, 1500);
}
return (
- 用户余额、用量与密钥概览。}
- variant="minimal"
- right={
- router.back()}>
-
-
- }
- >
-
-
-
-
-
-
+ <>
+
+
+
+ {userQuery.isLoading ? (
+
+ ) : null}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {(['all', 'active', 'inactive'] as const).map((item) => (
- setStatusFilter(item)}
- >
-
- {item === 'all' ? '全部' : item === 'active' ? '启用' : '停用'}
-
-
- ))}
-
- {filteredApiKeys.map((item) => (
-
-
- {item.name}
- {item.status}
+ {userQuery.error ? (
+
+
+ 用户信息加载失败
+ {getErrorMessage(userQuery.error)}
-
- {maskKey(item.key)}
- copyKey(item.id, item.key)}
+
+ ) : null}
+
+ {user ? (
+
+
+
-
-
+ 邮箱
+ {user.email || '--'}
+
+
+
+
+ 最后使用时间
+ {formatTime(user.last_used_at || user.updated_at || user.created_at)}
+
-
- {copiedKeyId === item.id ? '已复制到剪贴板' : `最近使用 ${formatDisplayTime(item.last_used_at)}`}
-
-
- 已用 ${Number(item.quota_used ?? 0).toFixed(2)} / 配额 {item.quota ? `$${Number(item.quota).toFixed(2)}` : '无限制'}
-
-
- 分组 {item.group?.name || '未绑定'} · 5h 用量 {Number(item.usage_5h ?? 0).toFixed(2)}
-
+
+ ) : null}
+
+
+
+ {RANGE_OPTIONS.map((item) => {
+ const active = item.key === rangeKey;
+ return (
+ setRangeKey(item.key)}
+ style={{
+ backgroundColor: active ? colors.primary : colors.muted,
+ borderRadius: 999,
+ paddingHorizontal: 12,
+ paddingVertical: 8,
+ borderWidth: 1,
+ borderColor: active ? colors.primary : colors.border,
+ }}
+ >
+ {item.label}
+
+ );
+ })}
- ))}
- {filteredApiKeys.length === 0 ? 当前筛选条件下没有 API 密钥。 : null}
-
-
-
-
- (
-
- )}
- />
-
- {(['add', 'subtract', 'set'] as BalanceOperation[]).map((item) => (
- setOperation(item)}
- >
-
- {item === 'add' ? '增加' : item === 'subtract' ? '扣减' : '设为'}
-
-
- ))}
-
- (
-
- )}
- />
- {formState.errors.amount ? {formState.errors.amount.message} : null}
- balanceMutation.mutate({ ...values, operation }))}
- >
-
- {balanceMutation.isPending ? '提交中...' : operation === 'add' ? '增加余额' : operation === 'subtract' ? '扣减余额' : '设置余额'}
-
-
-
-
-
+
+
+
+
+
+
+ {usageStatsQuery.data ? (
+
+ 输入 {formatTokenValue(usageStatsQuery.data.total_input_tokens)} · 输出 {formatTokenValue(usageStatsQuery.data.total_output_tokens)}
+
+ ) : null}
+
+ {usageStatsQuery.isLoading ? 正在加载用量统计... : null}
+
+ {usageStatsQuery.error ? (
+
+ 用量统计加载失败
+ {getErrorMessage(usageStatsQuery.error)}
+
+ ) : null}
+
+ {!usageSnapshotQuery.isLoading && trendPoints.length > 1 ? (
+
+ formatTokenValue(value)}
+ compact
+ />
+
+ ) : null}
+
+ {usageSnapshotQuery.isLoading ? 正在加载趋势图... : null}
+
+ {usageSnapshotQuery.error ? (
+
+ 趋势加载失败
+ {getErrorMessage(usageSnapshotQuery.error)}
+
+ ) : null}
+
+
+
+
+
+ {apiKeysQuery.isLoading ? 正在加载 API Keys... : null}
+
+ {apiKeysQuery.error ? (
+
+ API Keys 加载失败
+ {getErrorMessage(apiKeysQuery.error)}
+
+ ) : null}
+
+ {!apiKeysQuery.isLoading && !apiKeysQuery.error ? (
+ filteredApiKeys.length > 0 ? (
+
+ {filteredApiKeys.map((item) => (
+ copyKey(item)} />
+ ))}
+
+ ) : (
+ 当前筛选条件下没有 Key。
+ )
+ ) : null}
+
+
+
+
+ {([
+ { label: '充值', value: 'add' },
+ { label: '扣减', value: 'subtract' },
+ { label: '设为', value: 'set' },
+ ] as const).map((item) => {
+ const active = operation === item.value;
+ return (
+ setOperation(item.value)}
+ style={{
+ flex: 1,
+ backgroundColor: active ? colors.primary : colors.muted,
+ borderRadius: 12,
+ paddingVertical: 12,
+ alignItems: 'center',
+ borderWidth: 1,
+ borderColor: active ? colors.primary : colors.border,
+ }}
+ >
+ {item.label}
+
+ );
+ })}
+
+
+
+
+
+
+ {formError ? (
+
+ {formError}
+
+ ) : null}
+
+
+ {balanceMutation.isPending ? '提交中...' : '确认提交'}
+
+
+
+
+ >
);
}
diff --git a/docs/EXPO_RELEASE.md b/docs/EXPO_RELEASE.md
index bf1e0ac..9e12857 100644
--- a/docs/EXPO_RELEASE.md
+++ b/docs/EXPO_RELEASE.md
@@ -9,8 +9,10 @@
## 已完成配置
- `app.json` 已配置 `owner`
+- `app.json` 已配置 `scheme = sub2apimobile`
- `app.json` 已配置 `runtimeVersion.policy = appVersion`
- `app.json` 已配置 `updates.url`
+- `package.json` 已包含 `expo-dev-client`
- `eas.json` 已配置 `development / preview / production` 三套 profile
## 登录状态检查
@@ -20,6 +22,45 @@ npx expo whoami
npx eas whoami
```
+## 关键结论
+
+### 1. Expo Go 适合什么
+
+`Expo Go` 适合:
+
+- `npx expo start`
+- 本地 Metro 联调
+- 快速查看 JS / RN 页面改动
+
+### 2. Expo Go 不适合什么
+
+这次已经实测确认:
+
+- 不能把 `Expo Go` 当成 `EAS Update branch` 的稳定预览壳
+- 想在 Expo Updates 里通过 branch 打开新版本,应该使用 `development build / dev client`
+
+### 3. branch 预览要满足什么
+
+要稳定预览 branch/update,需要同时满足:
+
+- 已发布 `eas update --branch `
+- App 壳支持 `expo-updates`
+- App 壳包含 `expo-dev-client` 或对应原生构建
+- 项目配置了自定义 `scheme`
+- `runtimeVersion` 与 update 一致
+
+## 本地开发
+
+```bash
+npm run start
+```
+
+如果要用 dev client 连本地:
+
+```bash
+npm run start:dev-client
+```
+
## 预览包
```bash
@@ -34,6 +75,13 @@ npm run eas:build:preview
npm run eas:build:development
```
+也可以分平台:
+
+```bash
+npm run eas:build:development:android
+npm run eas:build:development:ios
+```
+
当前 `development` profile 已配置:
- `developmentClient: true`
@@ -42,6 +90,92 @@ npm run eas:build:development
适合先生成一个测试壳,后续再配合 `Expo / EAS Update` 做快速验证。
+## 推荐发布流程
+
+### 方案 A:本地开发调试
+
+适用于:
+
+- UI 改动
+- 页面白屏排查
+- 路由调试
+
+命令:
+
+```bash
+npm run start
+```
+
+### 方案 B:发 branch 给 dev client 验证
+
+适用于:
+
+- 想在 Expo Updates 里看到新的 branch/update
+- 想让测试壳直接吃 OTA
+
+步骤:
+
+```bash
+npx eas-cli@latest update --branch preview --message "your message"
+```
+
+然后在 dev client / development build 中验证对应 branch。
+
+### 方案 C:先出壳,再吃 OTA
+
+如果还没有合适的 dev client:
+
+```bash
+npm run eas:build:development:android
+npm run eas:build:development:ios
+```
+
+装好开发壳后,再发:
+
+```bash
+npx eas-cli@latest update --branch preview --message "your message"
+```
+
+## 本次实战记录
+
+本次已经验证通过的 OTA 发布命令:
+
+```bash
+npx eas-cli@latest update --branch preview --message "align dev-client and user detail 2026-03-08"
+```
+
+本次成功发布结果:
+
+- Branch: `preview`
+- Message: `align dev-client and user detail 2026-03-08`
+- Update group ID: `b6744438-929d-4206-b1eb-0887eaf3f97d`
+- iOS update ID: `019ccd68-a2af-7ba1-af68-7958f454e93c`
+- Android update ID: `019ccd68-a2af-7166-9e9d-9619bd1b8e0e`
+
+## 常见问题
+
+### 1. 本地正常,发到 branch 后白屏
+
+先排查:
+
+- 当前打开的是不是 `Expo Go`
+- 当前壳是不是 `development build`
+- 项目是否配置了 `scheme`
+- `runtimeVersion` 是否匹配
+
+### 2. branch 发上去了,但设备没更新
+
+先确认:
+
+- 看的是不是正确 project
+- branch 是否是 `preview`
+- 壳的 channel 是否匹配
+- 使用的是不是 dev client / 原生预览壳
+
+### 3. Deep link 报错 no custom scheme defined
+
+说明 `app.json` 没有自定义 `scheme`,或者当前原生壳太旧,需要重新构建。
+
## GitHub Actions 构建
仓库已提供工作流:`.github/workflows/eas-build.yml`
@@ -85,10 +219,3 @@ npx eas update --branch preview --message "preview update"
```bash
npx eas update --branch production --message "production update"
```
-
-## 当前还需要你补的内容
-
-- iOS 的 `bundleIdentifier`
-- Android 的 `package`
-
-如果不补这两个标识,原生构建时 EAS 还会继续要求你确认或生成。
diff --git a/package-lock.json b/package-lock.json
index 8350736..5c5fe4b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,40 +8,41 @@
"name": "sub2api-mobile",
"version": "1.0.0",
"dependencies": {
+ "@expo/vector-icons": "^15.1.1",
"@hookform/resolvers": "^5.2.2",
"@tanstack/react-query": "^5.90.21",
"cors": "^2.8.6",
- "expo": "~55.0.5",
- "expo-clipboard": "~55.0.8",
- "expo-constants": "~55.0.7",
- "expo-dev-client": "~6.0.16",
- "expo-linking": "~55.0.7",
- "expo-router": "~55.0.4",
- "expo-secure-store": "~55.0.8",
- "expo-status-bar": "~55.0.4",
- "expo-updates": "~55.0.12",
+ "expo": "~54.0.33",
+ "expo-clipboard": "~8.0.8",
+ "expo-constants": "~18.0.13",
+ "expo-dev-client": "~6.0.20",
+ "expo-font": "~14.0.11",
+ "expo-linking": "~8.0.11",
+ "expo-router": "~6.0.23",
+ "expo-secure-store": "~15.0.8",
+ "expo-status-bar": "~3.0.9",
+ "expo-updates": "~29.0.16",
"express": "^5.2.1",
"lucide-react-native": "^0.577.0",
- "react": "19.2.0",
- "react-dom": "19.2.0",
+ "react": "19.1.0",
+ "react-dom": "19.1.0",
"react-hook-form": "^7.71.2",
- "react-native": "0.83.2",
- "react-native-gesture-handler": "~2.30.0",
- "react-native-reanimated": "4.2.1",
- "react-native-safe-area-context": "~5.6.2",
- "react-native-screens": "~4.23.0",
- "react-native-svg": "15.15.3",
- "react-native-web": "^0.21.2",
- "react-native-worklets": "0.7.2",
+ "react-native": "0.81.5",
+ "react-native-gesture-handler": "~2.28.0",
+ "react-native-reanimated": "~4.1.1",
+ "react-native-safe-area-context": "~5.6.0",
+ "react-native-screens": "~4.16.0",
+ "react-native-svg": "15.12.1",
+ "react-native-web": "~0.21.0",
+ "react-native-worklets": "0.5.1",
"tailwindcss": "^4.2.1",
- "uniwind": "^1.5.0",
+ "uniwind": "^1.3.2",
"valtio": "^2.3.1",
"zod": "^4.3.6"
},
"devDependencies": {
- "@types/react": "~19.2.2",
+ "@types/react": "~19.1.0",
"concurrently": "^9.2.1",
- "eas-cli": "^18.1.0",
"typescript": "~5.9.2"
}
},
@@ -49,7 +50,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.2.0.tgz",
"integrity": "sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==",
- "dev": true,
"license": "MIT",
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0"
@@ -1584,30 +1584,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/@cspotcode/source-map-support": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
- "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/trace-mapping": "0.3.9"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
"node_modules/@egjs/hammerjs": {
"version": "2.0.17",
"resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz",
@@ -1620,45 +1596,6 @@
"node": ">=0.8.0"
}
},
- "node_modules/@expo-google-fonts/material-symbols": {
- "version": "0.4.25",
- "resolved": "https://registry.npmjs.org/@expo-google-fonts/material-symbols/-/material-symbols-0.4.25.tgz",
- "integrity": "sha512-MlwOpcYPLYu2+aDAwqv29l3sknNNxA36Jcu07Tg9+MTEvXk2SPcO8eQmwwDeVBbv5Wb6ToD1LmE+e0lLv/9WvA==",
- "license": "MIT AND Apache-2.0"
- },
- "node_modules/@expo/apple-utils": {
- "version": "2.1.13",
- "resolved": "https://registry.npmjs.org/@expo/apple-utils/-/apple-utils-2.1.13.tgz",
- "integrity": "sha512-nt3efiJhAWTHl9ikKYrHEuv3dhqCdicsHFRE9LmvtcVsPhXl9bAsm0gbACoLPr7ClP8664H/S6SdVJOD/tw0jg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "apple-utils": "bin.js"
- }
- },
- "node_modules/@expo/bunyan": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz",
- "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "uuid": "^8.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@expo/bunyan/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
"node_modules/@expo/code-signing-certificates": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.6.tgz",
@@ -1669,33 +1606,35 @@
}
},
"node_modules/@expo/config": {
- "version": "55.0.8",
- "resolved": "https://registry.npmjs.org/@expo/config/-/config-55.0.8.tgz",
- "integrity": "sha512-D7RYYHfErCgEllGxNwdYdkgzLna7zkzUECBV3snbUpf7RvIpB5l1LpCgzuVoc5KVew5h7N1Tn4LnT/tBSUZsQg==",
+ "version": "12.0.13",
+ "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz",
+ "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==",
"license": "MIT",
"dependencies": {
- "@expo/config-plugins": "~55.0.6",
- "@expo/config-types": "^55.0.5",
- "@expo/json-file": "^10.0.12",
- "@expo/require-utils": "^55.0.2",
+ "@babel/code-frame": "~7.10.4",
+ "@expo/config-plugins": "~54.0.4",
+ "@expo/config-types": "^54.0.10",
+ "@expo/json-file": "^10.0.8",
"deepmerge": "^4.3.1",
"getenv": "^2.0.0",
"glob": "^13.0.0",
+ "require-from-string": "^2.0.2",
"resolve-from": "^5.0.0",
"resolve-workspace-root": "^2.0.0",
"semver": "^7.6.0",
- "slugify": "^1.3.4"
+ "slugify": "^1.3.4",
+ "sucrase": "~3.35.1"
}
},
"node_modules/@expo/config-plugins": {
- "version": "55.0.6",
- "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-55.0.6.tgz",
- "integrity": "sha512-cIox6FjZlFaaX40rbQ3DvP9e87S5X85H9uw+BAxJE5timkMhuByy3GAlOsj1h96EyzSiol7Q6YIGgY1Jiz4M+A==",
+ "version": "54.0.4",
+ "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.4.tgz",
+ "integrity": "sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==",
"license": "MIT",
"dependencies": {
- "@expo/config-types": "^55.0.5",
- "@expo/json-file": "~10.0.12",
- "@expo/plist": "^0.5.2",
+ "@expo/config-types": "^54.0.10",
+ "@expo/json-file": "~10.0.8",
+ "@expo/plist": "^0.4.8",
"@expo/sdk-runtime-versions": "^1.0.0",
"chalk": "^4.1.2",
"debug": "^4.3.5",
@@ -1703,17 +1642,58 @@
"glob": "^13.0.0",
"resolve-from": "^5.0.0",
"semver": "^7.5.4",
+ "slash": "^3.0.0",
"slugify": "^1.6.6",
"xcode": "^3.0.1",
"xml2js": "0.6.0"
}
},
"node_modules/@expo/config-types": {
- "version": "55.0.5",
- "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-55.0.5.tgz",
- "integrity": "sha512-sCmSUZG4mZ/ySXvfyyBdhjivz8Q539X1NondwDdYG7s3SBsk+wsgPJzYsqgAG/P9+l0xWjUD2F+kQ1cAJ6NNLg==",
+ "version": "54.0.10",
+ "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.10.tgz",
+ "integrity": "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==",
"license": "MIT"
},
+ "node_modules/@expo/config/node_modules/@babel/code-frame": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
+ "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "node_modules/@expo/config/node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@expo/config/node_modules/sucrase": {
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
+ "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "tinyglobby": "^0.2.11",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/@expo/devcert": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.1.tgz",
@@ -1734,9 +1714,9 @@
}
},
"node_modules/@expo/devtools": {
- "version": "55.0.2",
- "resolved": "https://registry.npmjs.org/@expo/devtools/-/devtools-55.0.2.tgz",
- "integrity": "sha512-4VsFn9MUriocyuhyA+ycJP3TJhUsOFHDc270l9h3LhNpXMf6wvIdGcA0QzXkZtORXmlDybWXRP2KT1k36HcQkA==",
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/@expo/devtools/-/devtools-0.1.8.tgz",
+ "integrity": "sha512-SVLxbuanDjJPgc0sy3EfXUMLb/tXzp6XIHkhtPVmTWJAp+FOr6+5SeiCfJrCzZFet0Ifyke2vX3sFcKwEvCXwQ==",
"license": "MIT",
"dependencies": {
"chalk": "^4.1.2"
@@ -1754,240 +1734,37 @@
}
}
},
- "node_modules/@expo/dom-webview": {
- "version": "55.0.3",
- "resolved": "https://registry.npmjs.org/@expo/dom-webview/-/dom-webview-55.0.3.tgz",
- "integrity": "sha512-bY4/rfcZ0f43DvOtMn8/kmPlmo01tex5hRoc5hKbwBwQjqWQuQt0ACwu7akR9IHI4j0WNG48eL6cZB6dZUFrzg==",
- "license": "MIT",
- "peerDependencies": {
- "expo": "*",
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@expo/eas-build-job": {
- "version": "18.0.2",
- "resolved": "https://registry.npmjs.org/@expo/eas-build-job/-/eas-build-job-18.0.2.tgz",
- "integrity": "sha512-RPlsDYAiKn1fBfxvlvXNSAnwc3KbcBb4lM7tcsDntpTu9CqMIlOB5YRkmKeAH7lbiuXj0xtDM0sEZHouUCKVDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@expo/logger": "18.0.1",
- "joi": "^17.13.1",
- "semver": "^7.6.2",
- "zod": "^4.3.5"
- }
- },
- "node_modules/@expo/eas-build-job/node_modules/joi": {
- "version": "17.13.3",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
- "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.3.0",
- "@hapi/topo": "^5.1.0",
- "@sideway/address": "^4.1.5",
- "@sideway/formula": "^3.0.1",
- "@sideway/pinpoint": "^2.0.0"
- }
- },
- "node_modules/@expo/eas-json": {
- "version": "18.0.2",
- "resolved": "https://registry.npmjs.org/@expo/eas-json/-/eas-json-18.0.2.tgz",
- "integrity": "sha512-GOPpnjgXLwuYofDB5QmLO/+7e6UEHa8h1iBABjU/ZhgRA+8nxj/40pJgr69MpuqlvkmK7E8nuLIdgq2OuzZFkA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "7.23.5",
- "@expo/eas-build-job": "18.0.2",
- "chalk": "4.1.2",
- "env-string": "1.0.1",
- "fs-extra": "11.2.0",
- "golden-fleece": "1.0.9",
- "joi": "17.11.0",
- "log-symbols": "4.1.0",
- "semver": "7.5.2",
- "terminal-link": "2.1.1",
- "tslib": "2.4.1"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@expo/eas-json/node_modules/@babel/code-frame": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
- "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/highlight": "^7.23.4",
- "chalk": "^2.4.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@expo/eas-json/node_modules/@babel/code-frame/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@expo/eas-json/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@expo/eas-json/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@expo/eas-json/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@expo/eas-json/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@expo/eas-json/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@expo/eas-json/node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@expo/eas-json/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/eas-json/node_modules/semver": {
- "version": "7.5.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
- "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/eas-json/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@expo/eas-json/node_modules/tslib": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
- "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
- "dev": true,
- "license": "0BSD"
- },
- "node_modules/@expo/eas-json/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/@expo/env": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.1.1.tgz",
- "integrity": "sha512-rVvHC4I6xlPcg+mAO09ydUi2Wjv1ZytpLmHOSzvXzBAz9mMrJggqCe4s4dubjJvi/Ino/xQCLhbaLCnTtLpikg==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.0.11.tgz",
+ "integrity": "sha512-xV+ps6YCW7XIPVUwFVCRN2nox09dnRwy8uIjwHWTODu0zFw4kp4omnVkl0OOjuu2XOe7tdgAHxikrkJt9xB/7Q==",
"license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
"debug": "^4.3.4",
+ "dotenv": "~16.4.5",
+ "dotenv-expand": "~11.0.6",
"getenv": "^2.0.0"
- },
+ }
+ },
+ "node_modules/@expo/env/node_modules/dotenv": {
+ "version": "16.4.7",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
+ "license": "BSD-2-Clause",
"engines": {
- "node": ">=20.12.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
}
},
"node_modules/@expo/fingerprint": {
- "version": "0.16.5",
- "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.16.5.tgz",
- "integrity": "sha512-mLrcymtgkW9IJ/G1e8MH1Xt2VIb1MOS86ePY0ePcnV3nVyJqm7gfa/AXD1Hk+eZXvf8XhioYz6QZaamBdEzR3A==",
+ "version": "0.15.4",
+ "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.15.4.tgz",
+ "integrity": "sha512-eYlxcrGdR2/j2M6pEDXo9zU9KXXF1vhP+V+Tl+lyY+bU8lnzrN6c637mz6Ye3em2ANy8hhUR03Raf8VsT9Ogng==",
"license": "MIT",
"dependencies": {
- "@expo/env": "^2.0.11",
"@expo/spawn-async": "^1.7.2",
"arg": "^5.0.2",
"chalk": "^4.1.2",
@@ -1995,7 +1772,8 @@
"getenv": "^2.0.0",
"glob": "^13.0.0",
"ignore": "^5.3.1",
- "minimatch": "^10.2.2",
+ "minimatch": "^9.0.0",
+ "p-limit": "^3.1.0",
"resolve-from": "^5.0.0",
"semver": "^7.6.0"
},
@@ -2003,6 +1781,21 @@
"fingerprint": "bin/cli.js"
}
},
+ "node_modules/@expo/fingerprint/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@expo/image-utils": {
"version": "0.8.12",
"resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.8.12.tgz",
@@ -2028,45 +1821,6 @@
"json5": "^2.2.3"
}
},
- "node_modules/@expo/local-build-cache-provider": {
- "version": "55.0.6",
- "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-55.0.6.tgz",
- "integrity": "sha512-4kfdv48sKzokijMqi07fINYA9/XprshmPgSLf8i69XgzIv2YdRyBbb70SzrufB7PDneFoltz8N83icW8gOOj1g==",
- "license": "MIT",
- "dependencies": {
- "@expo/config": "~55.0.8",
- "chalk": "^4.1.2"
- }
- },
- "node_modules/@expo/log-box": {
- "version": "55.0.7",
- "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-55.0.7.tgz",
- "integrity": "sha512-m7V1k2vlMp4NOj3fopjOg4zl/ANXyTRF3HMTMep2GZAKsPiDzgOQ41nm8CaU50/HlDIGXlCObss07gOn20UpHQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@expo/dom-webview": "^55.0.3",
- "anser": "^1.4.9",
- "stacktrace-parser": "^0.1.10"
- },
- "peerDependencies": {
- "@expo/dom-webview": "^55.0.3",
- "expo": "*",
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@expo/logger": {
- "version": "18.0.1",
- "resolved": "https://registry.npmjs.org/@expo/logger/-/logger-18.0.1.tgz",
- "integrity": "sha512-+EP6VDpQCO7fOxnvlFhu9ravVxpSDuEYipgL8q9XhoOIo1BAm5UZSelat46RYHT97mmYKA26kVnqHJpUB+f2eg==",
- "dev": true,
- "license": "BUSL-1.1",
- "dependencies": {
- "@types/bunyan": "^1.8.11",
- "bunyan": "^1.8.15"
- }
- },
"node_modules/@expo/metro": {
"version": "54.2.0",
"resolved": "https://registry.npmjs.org/@expo/metro/-/metro-54.2.0.tgz",
@@ -2090,28 +1844,30 @@
}
},
"node_modules/@expo/metro-config": {
- "version": "55.0.9",
- "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-55.0.9.tgz",
- "integrity": "sha512-ZJFEfat/+dLUhFyFFWrzMjAqAwwUaJ3RD42QNqR7jh+RVYkAf6XYLynb5qrKJTHI1EcOx4KoO1717yXYYRFDBA==",
+ "version": "54.0.14",
+ "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-54.0.14.tgz",
+ "integrity": "sha512-hxpLyDfOR4L23tJ9W1IbJJsG7k4lv2sotohBm/kTYyiG+pe1SYCAWsRmgk+H42o/wWf/HQjE5k45S5TomGLxNA==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.20.0",
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.5",
- "@expo/config": "~55.0.8",
- "@expo/env": "~2.1.1",
- "@expo/json-file": "~10.0.12",
+ "@expo/config": "~12.0.13",
+ "@expo/env": "~2.0.8",
+ "@expo/json-file": "~10.0.8",
"@expo/metro": "~54.2.0",
"@expo/spawn-async": "^1.7.2",
"browserslist": "^4.25.0",
"chalk": "^4.1.0",
"debug": "^4.3.2",
+ "dotenv": "~16.4.5",
+ "dotenv-expand": "~11.0.6",
"getenv": "^2.0.0",
"glob": "^13.0.0",
- "hermes-parser": "^0.32.0",
+ "hermes-parser": "^0.29.1",
"jsc-safe-url": "^0.2.4",
"lightningcss": "^1.30.1",
- "picomatch": "^4.0.3",
+ "minimatch": "^9.0.0",
"postcss": "~8.4.32",
"resolve-from": "^5.0.0"
},
@@ -2124,25 +1880,24 @@
}
}
},
- "node_modules/@expo/metro-config/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "license": "MIT",
+ "node_modules/@expo/metro-config/node_modules/dotenv": {
+ "version": "16.4.7",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "url": "https://dotenvx.com"
}
},
"node_modules/@expo/metro-runtime": {
- "version": "55.0.6",
- "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-55.0.6.tgz",
- "integrity": "sha512-l8VvgKN9md+URjeQDB+DnHVmvpcWI6zFLH6yv7GTv4sfRDKyaZ5zDXYjTP1phYdgW6ea2NrRtCGNIxylWhsgtg==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-6.1.2.tgz",
+ "integrity": "sha512-nvM+Qv45QH7pmYvP8JB1G8JpScrWND3KrMA6ZKe62cwwNiX/BjHU28Ear0v/4bQWXlOY0mv6B8CDIm8JxXde9g==",
"license": "MIT",
"dependencies": {
- "@expo/log-box": "55.0.7",
"anser": "^1.4.9",
"pretty-format": "^29.7.0",
"stacktrace-parser": "^0.1.10",
@@ -2160,16 +1915,6 @@
}
}
},
- "node_modules/@expo/multipart-body-parser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@expo/multipart-body-parser/-/multipart-body-parser-2.0.0.tgz",
- "integrity": "sha512-yS/wsqlj0d8ZKETEN7ro3dZtjdMhpte8wp+xUzjUQC3jizxcE0E62xgvGquJObiYUMGoCF5qRYr2t78STPEaSw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "multipasta": "^0.2.5"
- }
- },
"node_modules/@expo/osascript": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.4.2.tgz",
@@ -2196,199 +1941,29 @@
"resolve-workspace-root": "^2.0.0"
}
},
- "node_modules/@expo/pkcs12": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@expo/pkcs12/-/pkcs12-0.1.3.tgz",
- "integrity": "sha512-96MePEGppKi08vawrTPw8kMCRdsbrDbV900MlI8rrP9F57DfDl/y1P52bwIDBYCEHE3XtPMo7s1xkG0BKOLCVg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "node-forge": "^1.2.1"
- }
- },
"node_modules/@expo/plist": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.5.2.tgz",
- "integrity": "sha512-o4xdVdBpe4aTl3sPMZ2u3fJH4iG1I768EIRk1xRZP+GaFI93MaR3JvoFibYqxeTmLQ1p1kNEVqylfUjezxx45g==",
+ "version": "0.4.8",
+ "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz",
+ "integrity": "sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==",
"license": "MIT",
"dependencies": {
"@xmldom/xmldom": "^0.8.8",
- "base64-js": "^1.5.1",
+ "base64-js": "^1.2.3",
"xmlbuilder": "^15.1.1"
}
},
- "node_modules/@expo/plugin-help": {
- "version": "5.1.23",
- "resolved": "https://registry.npmjs.org/@expo/plugin-help/-/plugin-help-5.1.23.tgz",
- "integrity": "sha512-s0uH6cPplLj73ZVie40EYUhl7X7q9kRR+8IfZWDod3wUtVGOFInxuCPX9Jpv1UwwBgbRu2cLisqr8m45LrFgxw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@oclif/core": "^2.11.1"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@expo/plugin-help/node_modules/@oclif/core": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.16.0.tgz",
- "integrity": "sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/cli-progress": "^3.11.0",
- "ansi-escapes": "^4.3.2",
- "ansi-styles": "^4.3.0",
- "cardinal": "^2.1.1",
- "chalk": "^4.1.2",
- "clean-stack": "^3.0.1",
- "cli-progress": "^3.12.0",
- "debug": "^4.3.4",
- "ejs": "^3.1.8",
- "get-package-type": "^0.1.0",
- "globby": "^11.1.0",
- "hyperlinker": "^1.0.0",
- "indent-string": "^4.0.0",
- "is-wsl": "^2.2.0",
- "js-yaml": "^3.14.1",
- "natural-orderby": "^2.0.3",
- "object-treeify": "^1.1.33",
- "password-prompt": "^1.1.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "supports-color": "^8.1.1",
- "supports-hyperlinks": "^2.2.0",
- "ts-node": "^10.9.1",
- "tslib": "^2.5.0",
- "widest-line": "^3.1.0",
- "wordwrap": "^1.0.0",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@expo/plugin-help/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/@expo/plugin-warn-if-update-available": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@expo/plugin-warn-if-update-available/-/plugin-warn-if-update-available-2.5.1.tgz",
- "integrity": "sha512-B65QSIZ+TgFHnVXsTw+1Q6djsJByWwnIjYfoG8ZV9wizOC01gbAw1cOZ/YtrJ2BrDnzFQtM8qecjlmZ7C3MPLw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@oclif/core": "^2.11.1",
- "chalk": "^4.1.0",
- "debug": "^4.3.4",
- "ejs": "^3.1.7",
- "fs-extra": "^10.1.0",
- "http-call": "^5.2.2",
- "semver": "^7.3.7",
- "tslib": "^2.4.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@expo/plugin-warn-if-update-available/node_modules/@oclif/core": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.16.0.tgz",
- "integrity": "sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/cli-progress": "^3.11.0",
- "ansi-escapes": "^4.3.2",
- "ansi-styles": "^4.3.0",
- "cardinal": "^2.1.1",
- "chalk": "^4.1.2",
- "clean-stack": "^3.0.1",
- "cli-progress": "^3.12.0",
- "debug": "^4.3.4",
- "ejs": "^3.1.8",
- "get-package-type": "^0.1.0",
- "globby": "^11.1.0",
- "hyperlinker": "^1.0.0",
- "indent-string": "^4.0.0",
- "is-wsl": "^2.2.0",
- "js-yaml": "^3.14.1",
- "natural-orderby": "^2.0.3",
- "object-treeify": "^1.1.33",
- "password-prompt": "^1.1.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "supports-color": "^8.1.1",
- "supports-hyperlinks": "^2.2.0",
- "ts-node": "^10.9.1",
- "tslib": "^2.5.0",
- "widest-line": "^3.1.0",
- "wordwrap": "^1.0.0",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@expo/plugin-warn-if-update-available/node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@expo/plugin-warn-if-update-available/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
"node_modules/@expo/prebuild-config": {
- "version": "55.0.8",
- "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-55.0.8.tgz",
- "integrity": "sha512-VJNJiOmmZgyDnR7JMmc3B8Z0ZepZ17I8Wtw+wAH/2+UCUsFg588XU+bwgYcFGw+is28kwGjY46z43kfufpxOnA==",
+ "version": "54.0.8",
+ "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-54.0.8.tgz",
+ "integrity": "sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==",
"license": "MIT",
"dependencies": {
- "@expo/config": "~55.0.8",
- "@expo/config-plugins": "~55.0.6",
- "@expo/config-types": "^55.0.5",
- "@expo/image-utils": "^0.8.12",
- "@expo/json-file": "^10.0.12",
- "@react-native/normalize-colors": "0.83.2",
+ "@expo/config": "~12.0.13",
+ "@expo/config-plugins": "~54.0.4",
+ "@expo/config-types": "^54.0.10",
+ "@expo/image-utils": "^0.8.8",
+ "@expo/json-file": "^10.0.8",
+ "@react-native/normalize-colors": "0.81.5",
"debug": "^4.3.1",
"resolve-from": "^5.0.0",
"semver": "^7.6.0",
@@ -2398,68 +1973,10 @@
"expo": "*"
}
},
- "node_modules/@expo/require-utils": {
- "version": "55.0.2",
- "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-55.0.2.tgz",
- "integrity": "sha512-dV5oCShQ1umKBKagMMT4B/N+SREsQe3lU4Zgmko5AO0rxKV0tynZT6xXs+e2JxuqT4Rz997atg7pki0BnZb4uw==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.20.0",
- "@babel/core": "^7.25.2",
- "@babel/plugin-transform-modules-commonjs": "^7.24.8"
- },
- "peerDependencies": {
- "typescript": "^5.0.0 || ^5.0.0-0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@expo/results": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@expo/results/-/results-1.0.0.tgz",
- "integrity": "sha512-qECzzXX5oJot3m2Gu9pfRDz50USdBieQVwYAzeAtQRUTD3PVeTK1tlRUoDcrK8PSruDLuVYdKkLebX4w/o55VA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@expo/rudder-sdk-node": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz",
- "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@expo/bunyan": "^4.0.0",
- "@segment/loosely-validate-event": "^2.0.0",
- "fetch-retry": "^4.1.1",
- "md5": "^2.2.1",
- "node-fetch": "^2.6.1",
- "remove-trailing-slash": "^0.1.0",
- "uuid": "^8.3.2"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@expo/rudder-sdk-node/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
"node_modules/@expo/schema-utils": {
- "version": "55.0.2",
- "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-55.0.2.tgz",
- "integrity": "sha512-QZ5WKbJOWkCrMq0/kfhV9ry8te/OaS34YgLVpG8u9y2gix96TlpRTbxM/YATjNcUR2s4fiQmPCOxkGtog4i37g==",
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-0.1.8.tgz",
+ "integrity": "sha512-9I6ZqvnAvKKDiO+ZF8BpQQFYWXOJvTAL5L/227RUbWG1OVZDInFifzCBiqAZ3b67NRfeAgpgvbA7rejsqhY62A==",
"license": "MIT"
},
"node_modules/@expo/sdk-runtime-versions": {
@@ -2480,69 +1997,22 @@
"node": ">=12"
}
},
- "node_modules/@expo/steps": {
- "version": "18.0.2",
- "resolved": "https://registry.npmjs.org/@expo/steps/-/steps-18.0.2.tgz",
- "integrity": "sha512-RhWJZt5z3wE+9f+vjBJMu37k6C+43/RJpAzENtDnF0SIZIzRmlm0GoCTNMB79pc2V/3qUvmEFbAzTqU0Z63G6g==",
- "dev": true,
- "license": "BUSL-1.1",
- "dependencies": {
- "@expo/eas-build-job": "18.0.2",
- "@expo/logger": "18.0.1",
- "@expo/spawn-async": "^1.7.2",
- "arg": "^5.0.2",
- "fs-extra": "^11.2.0",
- "joi": "^17.13.1",
- "jsep": "^1.3.8",
- "lodash.clonedeep": "^4.5.0",
- "lodash.get": "^4.4.2",
- "uuid": "^9.0.1",
- "yaml": "^2.4.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@expo/steps/node_modules/joi": {
- "version": "17.13.3",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
- "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.3.0",
- "@hapi/topo": "^5.1.0",
- "@sideway/address": "^4.1.5",
- "@sideway/formula": "^3.0.1",
- "@sideway/pinpoint": "^2.0.0"
- }
- },
- "node_modules/@expo/steps/node_modules/uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "dev": true,
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
"node_modules/@expo/sudo-prompt": {
"version": "9.3.2",
"resolved": "https://registry.npmjs.org/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz",
"integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==",
"license": "MIT"
},
- "node_modules/@expo/timeago.js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@expo/timeago.js/-/timeago.js-1.0.0.tgz",
- "integrity": "sha512-PD45CGlCL8kG0U3YcH1NvYxQThw5XAS7qE9bgP4L7dakm8lsMz+p8BQ1IjBFMmImawVWsV3py6JZINaEebXLnw==",
- "dev": true,
- "license": "MIT"
+ "node_modules/@expo/vector-icons": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-15.1.1.tgz",
+ "integrity": "sha512-Iu2VkcoI5vygbtYngm7jb4ifxElNVXQYdDrYkT7UCEIiKLeWnQY0wf2ZhHZ+Wro6Sc5TaumpKUOqDRpLi5rkvw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "expo-font": ">=14.0.4",
+ "react": "*",
+ "react-native": "*"
+ }
},
"node_modules/@expo/ws-tunnel": {
"version": "1.0.6",
@@ -2582,23 +2052,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/@hapi/hoek": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
- "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@hapi/topo": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
- "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
"node_modules/@hookform/resolvers": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.2.tgz",
@@ -2611,114 +2064,10 @@
"react-hook-form": "^7.55.0"
}
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
- "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.2.2"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
"node_modules/@isaacs/fs-minipass": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
"integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
- "dev": true,
"license": "ISC",
"dependencies": {
"minipass": "^7.0.4"
@@ -2924,266 +2273,12 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@oclif/core": {
- "version": "1.26.2",
- "resolved": "https://registry.npmjs.org/@oclif/core/-/core-1.26.2.tgz",
- "integrity": "sha512-6jYuZgXvHfOIc9GIaS4T3CIKGTjPmfAxuMcbCbMRKJJl4aq/4xeRlEz0E8/hz8HxvxZBGvN2GwAUHlrGWQVrVw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@oclif/linewrap": "^1.0.0",
- "@oclif/screen": "^3.0.4",
- "ansi-escapes": "^4.3.2",
- "ansi-styles": "^4.3.0",
- "cardinal": "^2.1.1",
- "chalk": "^4.1.2",
- "clean-stack": "^3.0.1",
- "cli-progress": "^3.10.0",
- "debug": "^4.3.4",
- "ejs": "^3.1.6",
- "fs-extra": "^9.1.0",
- "get-package-type": "^0.1.0",
- "globby": "^11.1.0",
- "hyperlinker": "^1.0.0",
- "indent-string": "^4.0.0",
- "is-wsl": "^2.2.0",
- "js-yaml": "^3.14.1",
- "natural-orderby": "^2.0.3",
- "object-treeify": "^1.1.33",
- "password-prompt": "^1.1.2",
- "semver": "^7.3.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "supports-color": "^8.1.1",
- "supports-hyperlinks": "^2.2.0",
- "tslib": "^2.4.1",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@oclif/core/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@oclif/core/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/@oclif/linewrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz",
- "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/@oclif/plugin-autocomplete": {
- "version": "2.3.10",
- "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-2.3.10.tgz",
- "integrity": "sha512-Ow1AR8WtjzlyCtiWWPgzMyT8SbcDJFr47009riLioHa+MHX2BCDtVn2DVnN/E6b9JlPV5ptQpjefoRSNWBesmg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@oclif/core": "^2.15.0",
- "chalk": "^4.1.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@oclif/plugin-autocomplete/node_modules/@oclif/core": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.16.0.tgz",
- "integrity": "sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/cli-progress": "^3.11.0",
- "ansi-escapes": "^4.3.2",
- "ansi-styles": "^4.3.0",
- "cardinal": "^2.1.1",
- "chalk": "^4.1.2",
- "clean-stack": "^3.0.1",
- "cli-progress": "^3.12.0",
- "debug": "^4.3.4",
- "ejs": "^3.1.8",
- "get-package-type": "^0.1.0",
- "globby": "^11.1.0",
- "hyperlinker": "^1.0.0",
- "indent-string": "^4.0.0",
- "is-wsl": "^2.2.0",
- "js-yaml": "^3.14.1",
- "natural-orderby": "^2.0.3",
- "object-treeify": "^1.1.33",
- "password-prompt": "^1.1.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "supports-color": "^8.1.1",
- "supports-hyperlinks": "^2.2.0",
- "ts-node": "^10.9.1",
- "tslib": "^2.5.0",
- "widest-line": "^3.1.0",
- "wordwrap": "^1.0.0",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@oclif/plugin-autocomplete/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/@oclif/screen": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-3.0.8.tgz",
- "integrity": "sha512-yx6KAqlt3TAHBduS2fMQtJDL2ufIHnDRArrJEOoTTuizxqmjLT+psGYOHpmMl3gvQpFJ11Hs76guUUktzAF9Bg==",
- "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/@radix-ui/primitive": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz",
"integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==",
"license": "MIT"
},
- "node_modules/@radix-ui/react-collection": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz",
- "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-compose-refs": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
@@ -3214,60 +2309,6 @@
}
}
},
- "node_modules/@radix-ui/react-dialog": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz",
- "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-direction": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz",
@@ -3283,33 +2324,6 @@
}
}
},
- "node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz",
- "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-escape-keydown": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-focus-guards": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz",
@@ -3325,31 +2339,6 @@
}
}
},
- "node_modules/@radix-ui/react-focus-scope": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz",
- "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-id": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz",
@@ -3368,130 +2357,10 @@
}
}
},
- "node_modules/@radix-ui/react-portal": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz",
- "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-presence": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz",
- "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-primitive": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz",
- "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-slot": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-roving-focus": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz",
- "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-slot": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz",
- "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.0.tgz",
+ "integrity": "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==",
"license": "MIT",
"dependencies": {
"@radix-ui/react-compose-refs": "1.1.2"
@@ -3506,36 +2375,6 @@
}
}
},
- "node_modules/@radix-ui/react-tabs": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz",
- "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-use-callback-ref": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz",
@@ -3622,31 +2461,31 @@
}
},
"node_modules/@react-native/assets-registry": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.2.tgz",
- "integrity": "sha512-9I5l3pGAKnlpQ15uVkeB9Mgjvt3cZEaEc8EDtdexvdtZvLSjtwBzgourrOW4yZUijbjJr8h3YO2Y0q+THwUHTA==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.81.5.tgz",
+ "integrity": "sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w==",
"license": "MIT",
"engines": {
"node": ">= 20.19.4"
}
},
"node_modules/@react-native/babel-plugin-codegen": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.83.2.tgz",
- "integrity": "sha512-XbcN/BEa64pVlb0Hb/E/Ph2SepjVN/FcNKrJcQvtaKZA6mBSO8pW8Eircdlr61/KBH94LihHbQoQDzkQFpeaTg==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.81.5.tgz",
+ "integrity": "sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ==",
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.3",
- "@react-native/codegen": "0.83.2"
+ "@react-native/codegen": "0.81.5"
},
"engines": {
"node": ">= 20.19.4"
}
},
"node_modules/@react-native/babel-preset": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.83.2.tgz",
- "integrity": "sha512-X/RAXDfe6W+om/Fw1i6htTxQXFhBJ2jgNOWx3WpI3KbjeIWbq7ib6vrpTeIAW2NUMg+K3mML1NzgD4dpZeqdjA==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.81.5.tgz",
+ "integrity": "sha512-UoI/x/5tCmi+pZ3c1+Ypr1DaRMDLI3y+Q70pVLLVgrnC3DHsHRIbHcCHIeG/IJvoeFqFM2sTdhSOLJrf8lOPrA==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.25.2",
@@ -3690,8 +2529,8 @@
"@babel/plugin-transform-typescript": "^7.25.2",
"@babel/plugin-transform-unicode-regex": "^7.24.7",
"@babel/template": "^7.25.0",
- "@react-native/babel-plugin-codegen": "0.83.2",
- "babel-plugin-syntax-hermes-parser": "0.32.0",
+ "@react-native/babel-plugin-codegen": "0.81.5",
+ "babel-plugin-syntax-hermes-parser": "0.29.1",
"babel-plugin-transform-flow-enums": "^0.0.2",
"react-refresh": "^0.14.0"
},
@@ -3703,15 +2542,15 @@
}
},
"node_modules/@react-native/codegen": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.2.tgz",
- "integrity": "sha512-9uK6X1miCXqtL4c759l74N/XbQeneWeQVjoV7SD2CGJuW7ZefxaoYenwGPs7rMoCdtS6wuIyR3hXQ+uWEBGYXA==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.81.5.tgz",
+ "integrity": "sha512-a2TDA03Up8lpSa9sh5VRGCQDXgCTOyDOFH+aqyinxp1HChG8uk89/G+nkJ9FPd0rqgi25eCTR16TWdS3b+fA6g==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.25.2",
"@babel/parser": "^7.25.3",
"glob": "^7.1.1",
- "hermes-parser": "0.32.0",
+ "hermes-parser": "0.29.1",
"invariant": "^2.2.4",
"nullthrows": "^1.1.1",
"yargs": "^17.6.2"
@@ -3723,12 +2562,6 @@
"@babel/core": "*"
}
},
- "node_modules/@react-native/codegen/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "license": "MIT"
- },
"node_modules/@react-native/codegen/node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
@@ -3773,17 +2606,17 @@
}
},
"node_modules/@react-native/community-cli-plugin": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.2.tgz",
- "integrity": "sha512-sTEF0eiUKtmImEP07Qo5c3Khvm1LIVX1Qyb6zWUqPL6W3MqFiXutZvKBjqLz6p49Szx8cplQLoXfLHT0bcDXKg==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.5.tgz",
+ "integrity": "sha512-yWRlmEOtcyvSZ4+OvqPabt+NS36vg0K/WADTQLhrYrm9qdZSuXmq8PmdJWz/68wAqKQ+4KTILiq2kjRQwnyhQw==",
"license": "MIT",
"dependencies": {
- "@react-native/dev-middleware": "0.83.2",
+ "@react-native/dev-middleware": "0.81.5",
"debug": "^4.4.0",
"invariant": "^2.2.4",
- "metro": "^0.83.3",
- "metro-config": "^0.83.3",
- "metro-core": "^0.83.3",
+ "metro": "^0.83.1",
+ "metro-config": "^0.83.1",
+ "metro-core": "^0.83.1",
"semver": "^7.1.3"
},
"engines": {
@@ -3803,36 +2636,22 @@
}
},
"node_modules/@react-native/debugger-frontend": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.2.tgz",
- "integrity": "sha512-t4fYfa7xopbUF5S4+ihNEwgaq4wLZLKLY0Ms8z72lkMteVd3bOX2Foxa8E2wTfRvdhPOkSpOsTeNDmD8ON4DoQ==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.81.5.tgz",
+ "integrity": "sha512-bnd9FSdWKx2ncklOetCgrlwqSGhMHP2zOxObJbOWXoj7GHEmih4MKarBo5/a8gX8EfA1EwRATdfNBQ81DY+h+w==",
"license": "BSD-3-Clause",
"engines": {
"node": ">= 20.19.4"
}
},
- "node_modules/@react-native/debugger-shell": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.2.tgz",
- "integrity": "sha512-z9go6NJMsLSDJT5MW6VGugRsZHjYvUTwxtsVc3uLt4U9W6T3J6FWI2wHpXIzd2dUkXRfAiRQ3Zi8ZQQ8fRFg9A==",
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "fb-dotslash": "0.5.8"
- },
- "engines": {
- "node": ">= 20.19.4"
- }
- },
"node_modules/@react-native/dev-middleware": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.2.tgz",
- "integrity": "sha512-Zi4EVaAm28+icD19NN07Gh8Pqg/84QQu+jn4patfWKNkcToRFP5vPEbbp0eLOGWS+BVB1d1Fn5lvMrJsBbFcOg==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.81.5.tgz",
+ "integrity": "sha512-WfPfZzboYgo/TUtysuD5xyANzzfka8Ebni6RIb2wDxhb56ERi7qDrE4xGhtPsjCL4pQBXSVxyIlCy0d8I6EgGA==",
"license": "MIT",
"dependencies": {
"@isaacs/ttlcache": "^1.4.1",
- "@react-native/debugger-frontend": "0.83.2",
- "@react-native/debugger-shell": "0.83.2",
+ "@react-native/debugger-frontend": "0.81.5",
"chrome-launcher": "^0.15.2",
"chromium-edge-launcher": "^0.2.0",
"connect": "^3.6.5",
@@ -3841,34 +2660,43 @@
"nullthrows": "^1.1.1",
"open": "^7.0.3",
"serve-static": "^1.16.2",
- "ws": "^7.5.10"
+ "ws": "^6.2.3"
},
"engines": {
"node": ">= 20.19.4"
}
},
+ "node_modules/@react-native/dev-middleware/node_modules/ws": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
+ "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
+ "license": "MIT",
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
"node_modules/@react-native/gradle-plugin": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.2.tgz",
- "integrity": "sha512-PqN11fXRAU+uJ0inZY1HWYlwJOXHOhF4SPyeHBBxjajKpm2PGunmvFWwkmBjmmUkP/CNO0ezTUudV0oj+2wiHQ==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.81.5.tgz",
+ "integrity": "sha512-hORRlNBj+ReNMLo9jme3yQ6JQf4GZpVEBLxmTXGGlIL78MAezDZr5/uq9dwElSbcGmLEgeiax6e174Fie6qPLg==",
"license": "MIT",
"engines": {
"node": ">= 20.19.4"
}
},
"node_modules/@react-native/js-polyfills": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.2.tgz",
- "integrity": "sha512-dk6fIY2OrKW/2Nk2HydfYNrQau8g6LOtd7NVBrgaqa+lvuRyIML5iimShP5qPqQnx2ofHuzjFw+Ya0b5Q7nDbA==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.81.5.tgz",
+ "integrity": "sha512-fB7M1CMOCIUudTRuj7kzxIBTVw2KXnsgbQ6+4cbqSxo8NmRRhA0Ul4ZUzZj3rFd3VznTL4Brmocv1oiN0bWZ8w==",
"license": "MIT",
"engines": {
"node": ">= 20.19.4"
}
},
"node_modules/@react-native/normalize-colors": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.2.tgz",
- "integrity": "sha512-gkZAb9LoVVzNuYzzOviH7DiPTXQoZPHuiTH2+O2+VWNtOkiznjgvqpwYAhg58a5zfRq5GXlbBdf5mzRj5+3Y5Q==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.81.5.tgz",
+ "integrity": "sha512-0HuJ8YtqlTVRXGZuGeBejLE04wSQsibpTI+RGOyVqxZvgtlLLC/Ssw0UmbHhT4lYMp2fhdtvKZSs5emWB1zR/g==",
"license": "MIT"
},
"node_modules/@react-navigation/bottom-tabs": {
@@ -3983,50 +2811,6 @@
"nanoid": "^3.3.11"
}
},
- "node_modules/@segment/ajv-human-errors": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/@segment/ajv-human-errors/-/ajv-human-errors-2.16.0.tgz",
- "integrity": "sha512-cHNfZcbHrmuYOA7/Sn7HlIDHanamiRTZtngfxcAuFaKQjP7cSqsVHjLz38FI2FQ8JDLz3syGLaz10Gn2ddo7+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "ajv": "^8.0.0"
- }
- },
- "node_modules/@segment/loosely-validate-event": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz",
- "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==",
- "dev": true,
- "dependencies": {
- "component-type": "^1.2.1",
- "join-component": "^1.1.0"
- }
- },
- "node_modules/@sideway/address": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
- "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
- "node_modules/@sideway/formula": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
- "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@sideway/pinpoint": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
- "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
"node_modules/@sinclair/typebox": {
"version": "0.27.10",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz",
@@ -4581,34 +3365,6 @@
"react": "^18 || ^19"
}
},
- "node_modules/@tsconfig/node10": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz",
- "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@tsconfig/node12": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
- "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@tsconfig/node14": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
- "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@tsconfig/node16": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
- "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -4650,26 +3406,6 @@
"@babel/types": "^7.28.2"
}
},
- "node_modules/@types/bunyan": {
- "version": "1.8.11",
- "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.11.tgz",
- "integrity": "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/cli-progress": {
- "version": "3.11.6",
- "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.6.tgz",
- "integrity": "sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/graceful-fs": {
"version": "4.1.9",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
@@ -4714,20 +3450,19 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz",
"integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"undici-types": "~7.18.0"
}
},
"node_modules/@types/react": {
- "version": "19.2.14",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz",
- "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==",
+ "version": "19.1.17",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.17.tgz",
+ "integrity": "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==",
"devOptional": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "csstype": "^3.2.2"
+ "csstype": "^3.0.2"
}
},
"node_modules/@types/stack-utils": {
@@ -4757,28 +3492,6 @@
"integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
"license": "ISC"
},
- "node_modules/@urql/core": {
- "version": "4.0.11",
- "resolved": "https://registry.npmjs.org/@urql/core/-/core-4.0.11.tgz",
- "integrity": "sha512-FFdY97vF5xnUrElcGw9erOLvtu+KGMLfwrLNDfv4IPgdp2IBsiGe+Kb7Aypfd3kH//BETewVSLm3+y2sSzjX6A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@0no-co/graphql.web": "^1.0.1",
- "wonka": "^6.3.2"
- }
- },
- "node_modules/@urql/exchange-retry": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.2.0.tgz",
- "integrity": "sha512-1O/biKiVhhn0EtvDF4UOvz325K4RrLupfL8rHcmqD2TBLv4qVDWQuzx4JGa1FfqjjRb+C9TNZ6w19f32Mq85Ug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@urql/core": ">=4.0.0",
- "wonka": "^6.3.2"
- }
- },
"node_modules/@xmldom/xmldom": {
"version": "0.8.11",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz",
@@ -4825,19 +3538,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-walk": {
- "version": "8.3.5",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
- "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "acorn": "^8.11.0"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/agent-base": {
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
@@ -4852,7 +3552,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -4864,24 +3563,6 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
"node_modules/anser": {
"version": "1.4.10",
"resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz",
@@ -4939,13 +3620,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/ansicolors": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
- "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
@@ -4992,81 +3666,18 @@
"node": ">=10"
}
},
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
"license": "MIT"
},
- "node_modules/asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/async": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
- "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
- "dev": true,
+ "node_modules/async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"license": "MIT"
},
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/b4a": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz",
- "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==",
- "dev": true,
- "license": "Apache-2.0",
- "peerDependencies": {
- "react-native-b4a": "*"
- },
- "peerDependenciesMeta": {
- "react-native-b4a": {
- "optional": true
- }
- }
- },
"node_modules/babel-jest": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
@@ -5183,12 +3794,12 @@
"license": "MIT"
},
"node_modules/babel-plugin-syntax-hermes-parser": {
- "version": "0.32.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.32.0.tgz",
- "integrity": "sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==",
+ "version": "0.29.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.29.1.tgz",
+ "integrity": "sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==",
"license": "MIT",
"dependencies": {
- "hermes-parser": "0.32.0"
+ "hermes-parser": "0.29.1"
}
},
"node_modules/babel-plugin-transform-flow-enums": {
@@ -5226,6 +3837,49 @@
"@babel/core": "^7.0.0 || ^8.0.0-0"
}
},
+ "node_modules/babel-preset-expo": {
+ "version": "54.0.10",
+ "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-54.0.10.tgz",
+ "integrity": "sha512-wTt7POavLFypLcPW/uC5v8y+mtQKDJiyGLzYCjqr9tx0Qc3vCXcDKk1iCFIj/++Iy5CWhhTflEa7VvVPNWeCfw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/plugin-proposal-decorators": "^7.12.9",
+ "@babel/plugin-proposal-export-default-from": "^7.24.7",
+ "@babel/plugin-syntax-export-default-from": "^7.24.7",
+ "@babel/plugin-transform-class-static-block": "^7.27.1",
+ "@babel/plugin-transform-export-namespace-from": "^7.25.9",
+ "@babel/plugin-transform-flow-strip-types": "^7.25.2",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.8",
+ "@babel/plugin-transform-object-rest-spread": "^7.24.7",
+ "@babel/plugin-transform-parameters": "^7.24.7",
+ "@babel/plugin-transform-private-methods": "^7.24.7",
+ "@babel/plugin-transform-private-property-in-object": "^7.24.7",
+ "@babel/plugin-transform-runtime": "^7.24.7",
+ "@babel/preset-react": "^7.22.15",
+ "@babel/preset-typescript": "^7.23.0",
+ "@react-native/babel-preset": "0.81.5",
+ "babel-plugin-react-compiler": "^1.0.0",
+ "babel-plugin-react-native-web": "~0.21.0",
+ "babel-plugin-syntax-hermes-parser": "^0.29.1",
+ "babel-plugin-transform-flow-enums": "^0.0.2",
+ "debug": "^4.3.4",
+ "resolve-from": "^5.0.0"
+ },
+ "peerDependencies": {
+ "@babel/runtime": "^7.20.0",
+ "expo": "*",
+ "react-refresh": ">=0.14.0 <1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/runtime": {
+ "optional": true
+ },
+ "expo": {
+ "optional": true
+ }
+ }
+ },
"node_modules/babel-preset-jest": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
@@ -5243,28 +3897,10 @@
}
},
"node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/bare-events": {
- "version": "2.8.2",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
- "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
- "dev": true,
- "license": "Apache-2.0",
- "peerDependencies": {
- "bare-abort-controller": "*"
- },
- "peerDependenciesMeta": {
- "bare-abort-controller": {
- "optional": true
- }
- }
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
@@ -5400,15 +4036,12 @@
}
},
"node_modules/brace-expansion": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
- "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"license": "MIT",
"dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
+ "balanced-match": "^1.0.0"
}
},
"node_modules/braces": {
@@ -5466,31 +4099,36 @@
"node-int64": "^0.4.0"
}
},
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"license": "MIT"
},
- "node_modules/bunyan": {
- "version": "1.8.15",
- "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
- "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==",
- "dev": true,
- "engines": [
- "node >=0.10.0"
- ],
- "license": "MIT",
- "bin": {
- "bunyan": "bin/bunyan"
- },
- "optionalDependencies": {
- "dtrace-provider": "~0.8",
- "moment": "^2.19.3",
- "mv": "~2",
- "safe-json-stringify": "~1"
- }
- },
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -5561,20 +4199,6 @@
],
"license": "CC-BY-4.0"
},
- "node_modules/cardinal": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
- "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansicolors": "~0.3.2",
- "redeyed": "~2.1.0"
- },
- "bin": {
- "cdl": "bin/cdl.js"
- }
- },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -5591,21 +4215,10 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/charenc": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
- "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": "*"
- }
- },
"node_modules/chownr": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
"integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
- "dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=18"
@@ -5649,22 +4262,6 @@
"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
"license": "MIT"
},
- "node_modules/clean-stack": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz",
- "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/cli-cursor": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
@@ -5677,19 +4274,6 @@
"node": ">=4"
}
},
- "node_modules/cli-progress": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz",
- "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "string-width": "^4.2.3"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/cli-spinners": {
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
@@ -5772,19 +4356,6 @@
"simple-swizzle": "^0.2.2"
}
},
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
@@ -5794,16 +4365,6 @@
"node": ">= 10"
}
},
- "node_modules/component-type": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz",
- "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -6011,13 +4572,6 @@
"url": "https://opencollective.com/express"
}
},
- "node_modules/create-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/cross-fetch": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz",
@@ -6041,26 +4595,6 @@
"node": ">= 8"
}
},
- "node_modules/crypt": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
- "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/css-in-js-utils": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz",
@@ -6136,16 +4670,6 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
- "node_modules/dateformat": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
- "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -6172,6 +4696,15 @@
"node": ">=0.10"
}
},
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/deepmerge": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
@@ -6202,16 +4735,6 @@
"node": ">=8"
}
},
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -6246,35 +4769,6 @@
"integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
"license": "MIT"
},
- "node_modules/diff": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
- "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dnssd-advertise": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dnssd-advertise/-/dnssd-advertise-1.1.3.tgz",
- "integrity": "sha512-XENsHi3MBzWOCAXif3yZvU1Ah0l+nhJj1sjWL6TnOAYKvGiFhbTx32xHN7+wLMLUOCj7Nr0evADWG4R8JtqCDA==",
- "license": "MIT"
- },
"node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
@@ -6316,13 +4810,6 @@
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
- "node_modules/domino": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz",
- "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==",
- "dev": true,
- "license": "BSD-2-Clause"
- },
"node_modules/domutils": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
@@ -6337,24 +4824,10 @@
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
- "node_modules/dotenv": {
- "version": "16.3.1",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
- "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/motdotla/dotenv?sponsor=1"
- }
- },
"node_modules/dotenv-expand": {
"version": "11.0.7",
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz",
"integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==",
- "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"dotenv": "^16.4.5"
@@ -6370,7 +4843,6 @@
"version": "16.6.1",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
"integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
- "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
@@ -6379,21 +4851,6 @@
"url": "https://dotenvx.com"
}
},
- "node_modules/dtrace-provider": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
- "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "BSD-2-Clause",
- "optional": true,
- "dependencies": {
- "nan": "^2.14.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -6408,1040 +4865,12 @@
"node": ">= 0.4"
}
},
- "node_modules/eas-cli": {
- "version": "18.1.0",
- "resolved": "https://registry.npmjs.org/eas-cli/-/eas-cli-18.1.0.tgz",
- "integrity": "sha512-seKi5d7WVm8ROEs+iazD6ymXu96tv+sGdmwRZEiqqenNjXy9KnYrs+G09TlhxbImEWHe4SXOFtUUmnN+0CwgSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@expo/apple-utils": "2.1.13",
- "@expo/code-signing-certificates": "0.0.5",
- "@expo/config": "10.0.6",
- "@expo/config-plugins": "9.0.12",
- "@expo/eas-build-job": "18.0.2",
- "@expo/eas-json": "18.0.2",
- "@expo/env": "^1.0.0",
- "@expo/json-file": "8.3.3",
- "@expo/logger": "18.0.1",
- "@expo/multipart-body-parser": "2.0.0",
- "@expo/osascript": "2.1.4",
- "@expo/package-manager": "1.9.10",
- "@expo/pkcs12": "0.1.3",
- "@expo/plist": "0.2.0",
- "@expo/plugin-help": "5.1.23",
- "@expo/plugin-warn-if-update-available": "2.5.1",
- "@expo/prebuild-config": "8.0.17",
- "@expo/results": "1.0.0",
- "@expo/rudder-sdk-node": "1.1.1",
- "@expo/spawn-async": "1.7.2",
- "@expo/steps": "18.0.2",
- "@expo/timeago.js": "1.0.0",
- "@oclif/core": "^1.26.2",
- "@oclif/plugin-autocomplete": "^2.3.10",
- "@segment/ajv-human-errors": "^2.1.2",
- "@urql/core": "4.0.11",
- "@urql/exchange-retry": "1.2.0",
- "ajv": "8.11.0",
- "ajv-formats": "2.1.1",
- "better-opn": "3.0.2",
- "bplist-parser": "^0.3.0",
- "chalk": "4.1.2",
- "cli-progress": "3.12.0",
- "dateformat": "4.6.3",
- "diff": "7.0.0",
- "dotenv": "16.3.1",
- "env-paths": "2.2.0",
- "envinfo": "7.11.0",
- "fast-deep-equal": "3.1.3",
- "fast-glob": "3.3.2",
- "figures": "3.2.0",
- "form-data": "^4.0.4",
- "fs-extra": "11.2.0",
- "getenv": "1.0.0",
- "gradle-to-js": "2.0.1",
- "graphql": "16.8.1",
- "graphql-tag": "2.12.6",
- "https-proxy-agent": "5.0.1",
- "ignore": "5.3.0",
- "indent-string": "4.0.0",
- "invariant": "^2.2.2",
- "jks-js": "1.1.0",
- "joi": "17.11.0",
- "keychain": "1.5.0",
- "log-symbols": "4.1.0",
- "mime": "3.0.0",
- "minimatch": "5.1.2",
- "minizlib": "3.0.1",
- "nanoid": "3.3.8",
- "node-fetch": "2.6.7",
- "node-forge": "1.3.1",
- "node-stream-zip": "1.15.0",
- "nullthrows": "1.1.1",
- "ora": "5.1.0",
- "pkg-dir": "4.2.0",
- "pngjs": "7.0.0",
- "promise-limit": "2.7.0",
- "promise-retry": "2.0.1",
- "prompts": "2.4.2",
- "qrcode-terminal": "0.12.0",
- "resolve-from": "5.0.0",
- "semver": "7.5.4",
- "set-interval-async": "3.0.3",
- "slash": "3.0.0",
- "tar": "7.5.7",
- "tar-stream": "3.1.7",
- "terminal-link": "2.1.1",
- "ts-deepmerge": "6.2.0",
- "tslib": "2.6.2",
- "turndown": "7.1.2",
- "untildify": "4.0.0",
- "uuid": "9.0.1",
- "wrap-ansi": "7.0.0",
- "yaml": "2.6.0",
- "zod": "^4.1.3"
- },
- "bin": {
- "eas": "bin/run"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/code-signing-certificates": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz",
- "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "node-forge": "^1.2.1",
- "nullthrows": "^1.1.1"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/config": {
- "version": "10.0.6",
- "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.6.tgz",
- "integrity": "sha512-xXkfPElrtxznkOZxFASJ7OPa6E9IHSjcZwj5BQ6XUF2dz5M7AFa2h5sXM8AalSaDU5tEBSgoUOjTh5957TlR8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "~7.10.4",
- "@expo/config-plugins": "~9.0.10",
- "@expo/config-types": "^52.0.0",
- "@expo/json-file": "^9.0.0",
- "deepmerge": "^4.3.1",
- "getenv": "^1.0.0",
- "glob": "^10.4.2",
- "require-from-string": "^2.0.2",
- "resolve-from": "^5.0.0",
- "resolve-workspace-root": "^2.0.0",
- "semver": "^7.6.0",
- "slugify": "^1.3.4",
- "sucrase": "3.35.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/config-plugins": {
- "version": "9.0.12",
- "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.12.tgz",
- "integrity": "sha512-/Ko/NM+GzvJyRkq8PITm8ms0KY5v0wmN1OQFYRMkcJqOi3PjlhndW+G6bHpJI9mkQXBaUnHwAiGLqIC3+MQ5Wg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@expo/config-types": "^52.0.0",
- "@expo/json-file": "~9.0.0",
- "@expo/plist": "^0.2.0",
- "@expo/sdk-runtime-versions": "^1.0.0",
- "chalk": "^4.1.2",
- "debug": "^4.3.5",
- "getenv": "^1.0.0",
- "glob": "^10.4.2",
- "resolve-from": "^5.0.0",
- "semver": "^7.5.4",
- "slash": "^3.0.0",
- "slugify": "^1.6.6",
- "xcode": "^3.0.1",
- "xml2js": "0.6.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/config-plugins/node_modules/@expo/json-file": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.2.tgz",
- "integrity": "sha512-yAznIUrybOIWp3Uax7yRflB0xsEpvIwIEqIjao9SGi2Gaa+N0OamWfe0fnXBSWF+2zzF4VvqwT4W5zwelchfgw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "~7.10.4",
- "json5": "^2.2.3",
- "write-file-atomic": "^2.3.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/config-types": {
- "version": "52.0.5",
- "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.5.tgz",
- "integrity": "sha512-AMDeuDLHXXqd8W+0zSjIt7f37vUd/BP8p43k68NHpyAvQO+z8mbQZm3cNQVAMySeayK2XoPigAFB1JF2NFajaA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/eas-cli/node_modules/@expo/config/node_modules/@expo/json-file": {
- "version": "9.1.5",
- "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.1.5.tgz",
- "integrity": "sha512-prWBhLUlmcQtvN6Y7BpW2k9zXGd3ySa3R6rAguMJkp1z22nunLN64KYTUWfijFlprFoxm9r2VNnGkcbndAlgKA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "~7.10.4",
- "json5": "^2.2.3"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/config/node_modules/semver": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
- "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/env": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@expo/env/-/env-1.0.7.tgz",
- "integrity": "sha512-qSTEnwvuYJ3umapO9XJtrb1fAqiPlmUUg78N0IZXXGwQRt+bkp0OBls+Y5Mxw/Owj8waAM0Z3huKKskRADR5ow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "debug": "^4.3.4",
- "dotenv": "~16.4.5",
- "dotenv-expand": "~11.0.6",
- "getenv": "^2.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/env/node_modules/dotenv": {
- "version": "16.4.7",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
- "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/env/node_modules/getenv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/getenv/-/getenv-2.0.0.tgz",
- "integrity": "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/image-utils": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.6.5.tgz",
- "integrity": "sha512-RsS/1CwJYzccvlprYktD42KjyfWZECH6PPIEowvoSmXfGLfdViwcUEI4RvBfKX5Jli6P67H+6YmHvPTbGOboew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@expo/spawn-async": "^1.7.2",
- "chalk": "^4.0.0",
- "fs-extra": "9.0.0",
- "getenv": "^1.0.0",
- "jimp-compact": "0.16.1",
- "parse-png": "^2.1.0",
- "resolve-from": "^5.0.0",
- "semver": "^7.6.0",
- "temp-dir": "~2.0.0",
- "unique-string": "~2.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/image-utils/node_modules/fs-extra": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz",
- "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/image-utils/node_modules/semver": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
- "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/image-utils/node_modules/universalify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
- "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/json-file": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz",
- "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "~7.10.4",
- "json5": "^2.2.2",
- "write-file-atomic": "^2.3.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/osascript": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.4.tgz",
- "integrity": "sha512-LcPjxJ5FOFpqPORm+5MRLV0CuYWMthJYV6eerF+lQVXKlvgSn3EOqaHC3Vf3H+vmB0f6G4kdvvFtg40vG4bIhA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@expo/spawn-async": "^1.7.2",
- "exec-async": "^2.2.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/package-manager": {
- "version": "1.9.10",
- "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.9.10.tgz",
- "integrity": "sha512-axJm+NOj3jVxep49va/+L3KkF3YW/dkV+RwzqUJedZrv4LeTqOG4rhrCaCPXHTvLqCTDKu6j0Xyd28N7mnxsGA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@expo/json-file": "^10.0.8",
- "@expo/spawn-async": "^1.7.2",
- "chalk": "^4.0.0",
- "npm-package-arg": "^11.0.0",
- "ora": "^3.4.0",
- "resolve-workspace-root": "^2.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/package-manager/node_modules/@babel/code-frame": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
- "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.28.5",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/package-manager/node_modules/@expo/json-file": {
- "version": "10.0.12",
- "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.12.tgz",
- "integrity": "sha512-inbDycp1rMAelAofg7h/mMzIe+Owx6F7pur3XdQ3EPTy00tme+4P6FWgHKUcjN8dBSrnbRNpSyh5/shzHyVCyQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.20.0",
- "json5": "^2.2.3"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/package-manager/node_modules/log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/package-manager/node_modules/log-symbols/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/package-manager/node_modules/ora": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
- "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-spinners": "^2.0.0",
- "log-symbols": "^2.2.0",
- "strip-ansi": "^5.2.0",
- "wcwidth": "^1.0.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/package-manager/node_modules/ora/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/package-manager/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/plist": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.2.0.tgz",
- "integrity": "sha512-F/IZJQaf8OIVnVA6XWUeMPC3OH6MV00Wxf0WC0JhTQht2QgjyHUa3U5Gs3vRtDq8tXNsZneOQRDVwpaOnd4zTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@xmldom/xmldom": "~0.7.7",
- "base64-js": "^1.2.3",
- "xmlbuilder": "^14.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/prebuild-config": {
- "version": "8.0.17",
- "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.0.17.tgz",
- "integrity": "sha512-HM+XpDox3fAZuXZXvy55VRcBbsZSDijGf8jI8i/pexgWvtsnt1ouelPXRuE1pXDicMX+lZO83QV+XkyLmBEXYQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@expo/config": "~10.0.4",
- "@expo/config-plugins": "~9.0.0",
- "@expo/config-types": "^52.0.0",
- "@expo/image-utils": "^0.6.0",
- "@expo/json-file": "^9.0.0",
- "@react-native/normalize-colors": "0.76.2",
- "debug": "^4.3.1",
- "fs-extra": "^9.0.0",
- "resolve-from": "^5.0.0",
- "semver": "^7.6.0",
- "xml2js": "0.6.0"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/prebuild-config/node_modules/@expo/json-file": {
- "version": "9.1.5",
- "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.1.5.tgz",
- "integrity": "sha512-prWBhLUlmcQtvN6Y7BpW2k9zXGd3ySa3R6rAguMJkp1z22nunLN64KYTUWfijFlprFoxm9r2VNnGkcbndAlgKA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "~7.10.4",
- "json5": "^2.2.3"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/prebuild-config/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eas-cli/node_modules/@expo/prebuild-config/node_modules/semver": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
- "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eas-cli/node_modules/@react-native/normalize-colors": {
- "version": "0.76.2",
- "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.2.tgz",
- "integrity": "sha512-ICoOpaTLPsFQjNLSM00NgQr6wal300cZZonHVSDXKntX+BfkLeuCHRtr/Mn+klTtW+/1v2/2FRm9dXjvyGf9Dw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/eas-cli/node_modules/@xmldom/xmldom": {
- "version": "0.7.13",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz",
- "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==",
- "deprecated": "this version is no longer supported, please update to at least 0.8.*",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/eas-cli/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eas-cli/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/eas-cli/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/eas-cli/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/eas-cli/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/eas-cli/node_modules/getenv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz",
- "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/eas-cli/node_modules/glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/eas-cli/node_modules/glob/node_modules/minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.2"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/eas-cli/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eas-cli/node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/eas-cli/node_modules/ignore": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
- "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/eas-cli/node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eas-cli/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/eas-cli/node_modules/mime": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
- "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/eas-cli/node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/eas-cli/node_modules/minimatch": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz",
- "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eas-cli/node_modules/nanoid": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
- "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/eas-cli/node_modules/node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
- "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/eas-cli/node_modules/node-forge": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
- "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
- "dev": true,
- "license": "(BSD-3-Clause OR GPL-2.0)",
- "engines": {
- "node": ">= 6.13.0"
- }
- },
- "node_modules/eas-cli/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eas-cli/node_modules/ora": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-5.1.0.tgz",
- "integrity": "sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-spinners": "^2.4.0",
- "is-interactive": "^1.0.0",
- "log-symbols": "^4.0.0",
- "mute-stream": "0.0.8",
- "strip-ansi": "^6.0.0",
- "wcwidth": "^1.0.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eas-cli/node_modules/ora/node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "restore-cursor": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eas-cli/node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/eas-cli/node_modules/pngjs": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz",
- "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14.19.0"
- }
- },
- "node_modules/eas-cli/node_modules/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/eas-cli/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eas-cli/node_modules/semver/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eas-cli/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eas-cli/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
- "dev": true,
- "license": "0BSD"
- },
- "node_modules/eas-cli/node_modules/uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "dev": true,
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/eas-cli/node_modules/write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "node_modules/eas-cli/node_modules/xmlbuilder": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz",
- "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/eas-cli/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/eas-cli/node_modules/yaml": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
- "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
"license": "MIT"
},
- "node_modules/ejs": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
- "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "jake": "^10.8.5"
- },
- "bin": {
- "ejs": "bin/cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/electron-to-chromium": {
"version": "1.5.307",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz",
@@ -7488,60 +4917,15 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/env-paths": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
- "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
- "dev": true,
+ "node_modules/env-editor": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz",
+ "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==",
"license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
- "node_modules/env-string": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/env-string/-/env-string-1.0.1.tgz",
- "integrity": "sha512-/DhCJDf5DSFK32joQiWRpWrT0h7p3hVQfMKxiBb7Nt8C8IF8BYyPtclDnuGGLOoj16d/8udKeiE7JbkotDmorQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/envinfo": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
- "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "envinfo": "dist/cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/error-ex": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
- "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/error-ex/node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/error-stack-parser": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
@@ -7581,22 +4965,6 @@
"node": ">= 0.4"
}
},
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -7655,53 +5023,34 @@
"node": ">=6"
}
},
- "node_modules/events-universal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
- "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "bare-events": "^2.7.0"
- }
- },
- "node_modules/exec-async": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz",
- "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/expo": {
- "version": "55.0.5",
- "resolved": "https://registry.npmjs.org/expo/-/expo-55.0.5.tgz",
- "integrity": "sha512-toVYbRU0gH50QSlIyrAswXD87RKi2pcJcHZpBDuqU3mIQZzJkTcWgRLWN/2R/wnd3kuJTtW5xlr5ndVG6xEWxQ==",
+ "version": "54.0.33",
+ "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.33.tgz",
+ "integrity": "sha512-3yOEfAKqo+gqHcV8vKcnq0uA5zxlohnhA3fu4G43likN8ct5ZZ3LjAh9wDdKteEkoad3tFPvwxmXW711S5OHUw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/runtime": "^7.20.0",
- "@expo/cli": "55.0.15",
- "@expo/config": "~55.0.8",
- "@expo/config-plugins": "~55.0.6",
- "@expo/devtools": "55.0.2",
- "@expo/fingerprint": "0.16.5",
- "@expo/local-build-cache-provider": "55.0.6",
- "@expo/log-box": "55.0.7",
+ "@expo/cli": "54.0.23",
+ "@expo/config": "~12.0.13",
+ "@expo/config-plugins": "~54.0.4",
+ "@expo/devtools": "0.1.8",
+ "@expo/fingerprint": "0.15.4",
"@expo/metro": "~54.2.0",
- "@expo/metro-config": "55.0.9",
- "@expo/vector-icons": "^15.0.2",
+ "@expo/metro-config": "54.0.14",
+ "@expo/vector-icons": "^15.0.3",
"@ungap/structured-clone": "^1.3.0",
- "babel-preset-expo": "~55.0.10",
- "expo-asset": "~55.0.8",
- "expo-constants": "~55.0.7",
- "expo-file-system": "~55.0.10",
- "expo-font": "~55.0.4",
- "expo-keep-awake": "~55.0.4",
- "expo-modules-autolinking": "55.0.8",
- "expo-modules-core": "55.0.14",
+ "babel-preset-expo": "~54.0.10",
+ "expo-asset": "~12.0.12",
+ "expo-constants": "~18.0.13",
+ "expo-file-system": "~19.0.21",
+ "expo-font": "~14.0.11",
+ "expo-keep-awake": "~15.0.8",
+ "expo-modules-autolinking": "3.0.24",
+ "expo-modules-core": "3.0.29",
"pretty-format": "^29.7.0",
"react-refresh": "^0.14.2",
- "whatwg-url-minimum": "^0.1.1"
+ "whatwg-url-without-unicode": "8.0.0-3"
},
"bin": {
"expo": "bin/cli",
@@ -7727,10 +5076,25 @@
}
}
},
+ "node_modules/expo-asset": {
+ "version": "12.0.12",
+ "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-12.0.12.tgz",
+ "integrity": "sha512-CsXFCQbx2fElSMn0lyTdRIyKlSXOal6ilLJd+yeZ6xaC7I9AICQgscY5nj0QcwgA+KYYCCEQEBndMsmj7drOWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@expo/image-utils": "^0.8.8",
+ "expo-constants": "~18.0.12"
+ },
+ "peerDependencies": {
+ "expo": "*",
+ "react": "*",
+ "react-native": "*"
+ }
+ },
"node_modules/expo-clipboard": {
- "version": "55.0.8",
- "resolved": "https://registry.npmjs.org/expo-clipboard/-/expo-clipboard-55.0.8.tgz",
- "integrity": "sha512-s0Hkop+dc6m09LwzUAWweNI0gzLAaX5CgEGR8TMdOdSPKTPc2rCl8h8Ji/cUNM1wYoJQ4Wysa15E8If/Vlu7WA==",
+ "version": "8.0.8",
+ "resolved": "https://registry.npmjs.org/expo-clipboard/-/expo-clipboard-8.0.8.tgz",
+ "integrity": "sha512-VKoBkHIpZZDJTB0jRO4/PZskHdMNOEz3P/41tmM6fDuODMpqhvyWK053X0ebspkxiawJX9lX33JXHBCvVsTTOA==",
"license": "MIT",
"peerDependencies": {
"expo": "*",
@@ -7739,14 +5103,14 @@
}
},
"node_modules/expo-constants": {
- "version": "55.0.7",
- "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-55.0.7.tgz",
- "integrity": "sha512-kdcO4TsQRRqt0USvjaY5vgQMO9H52K3kBZ/ejC7F6rz70mv08GoowrZ1CYOr5O4JpPDRlIpQfZJUucaS/c+KWQ==",
+ "version": "18.0.13",
+ "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.13.tgz",
+ "integrity": "sha512-FnZn12E1dRYKDHlAdIyNFhBurKTS3F9CrfrBDJI5m3D7U17KBHMQ6JEfYlSj7LG7t+Ulr+IKaj58L1k5gBwTcQ==",
"license": "MIT",
"peer": true,
"dependencies": {
- "@expo/config": "~55.0.8",
- "@expo/env": "~2.1.1"
+ "@expo/config": "~12.0.13",
+ "@expo/env": "~2.0.8"
},
"peerDependencies": {
"expo": "*",
@@ -7769,134 +5133,6 @@
"expo": "*"
}
},
- "node_modules/expo-dev-client/node_modules/@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "license": "MIT",
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/expo-dev-client/node_modules/@expo/config": {
- "version": "12.0.13",
- "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz",
- "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "~7.10.4",
- "@expo/config-plugins": "~54.0.4",
- "@expo/config-types": "^54.0.10",
- "@expo/json-file": "^10.0.8",
- "deepmerge": "^4.3.1",
- "getenv": "^2.0.0",
- "glob": "^13.0.0",
- "require-from-string": "^2.0.2",
- "resolve-from": "^5.0.0",
- "resolve-workspace-root": "^2.0.0",
- "semver": "^7.6.0",
- "slugify": "^1.3.4",
- "sucrase": "~3.35.1"
- }
- },
- "node_modules/expo-dev-client/node_modules/@expo/config-plugins": {
- "version": "54.0.4",
- "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.4.tgz",
- "integrity": "sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==",
- "license": "MIT",
- "dependencies": {
- "@expo/config-types": "^54.0.10",
- "@expo/json-file": "~10.0.8",
- "@expo/plist": "^0.4.8",
- "@expo/sdk-runtime-versions": "^1.0.0",
- "chalk": "^4.1.2",
- "debug": "^4.3.5",
- "getenv": "^2.0.0",
- "glob": "^13.0.0",
- "resolve-from": "^5.0.0",
- "semver": "^7.5.4",
- "slash": "^3.0.0",
- "slugify": "^1.6.6",
- "xcode": "^3.0.1",
- "xml2js": "0.6.0"
- }
- },
- "node_modules/expo-dev-client/node_modules/@expo/config-types": {
- "version": "54.0.10",
- "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.10.tgz",
- "integrity": "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==",
- "license": "MIT"
- },
- "node_modules/expo-dev-client/node_modules/@expo/plist": {
- "version": "0.4.8",
- "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz",
- "integrity": "sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==",
- "license": "MIT",
- "dependencies": {
- "@xmldom/xmldom": "^0.8.8",
- "base64-js": "^1.2.3",
- "xmlbuilder": "^15.1.1"
- }
- },
- "node_modules/expo-dev-client/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/expo-dev-client/node_modules/expo-json-utils": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-0.15.0.tgz",
- "integrity": "sha512-duRT6oGl80IDzH2LD2yEFWNwGIC2WkozsB6HF3cDYNoNNdUvFk6uN3YiwsTsqVM/D0z6LEAQ01/SlYvN+Fw0JQ==",
- "license": "MIT"
- },
- "node_modules/expo-dev-client/node_modules/expo-manifests": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-1.0.10.tgz",
- "integrity": "sha512-oxDUnURPcL4ZsOBY6X1DGWGuoZgVAFzp6PISWV7lPP2J0r8u1/ucuChBgpK7u1eLGFp6sDIPwXyEUCkI386XSQ==",
- "license": "MIT",
- "dependencies": {
- "@expo/config": "~12.0.11",
- "expo-json-utils": "~0.15.0"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-dev-client/node_modules/expo-updates-interface": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/expo-updates-interface/-/expo-updates-interface-2.0.0.tgz",
- "integrity": "sha512-pTzAIufEZdVPKql6iMi5ylVSPqV1qbEopz9G6TSECQmnNde2nwq42PxdFBaUEd8IZJ/fdJLQnOT3m6+XJ5s7jg==",
- "license": "MIT",
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-dev-client/node_modules/sucrase": {
- "version": "3.35.1",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
- "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "tinyglobby": "^0.2.11",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/expo-dev-launcher": {
"version": "6.0.20",
"resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-6.0.20.tgz",
@@ -7911,125 +5147,6 @@
"expo": "*"
}
},
- "node_modules/expo-dev-launcher/node_modules/@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "license": "MIT",
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/expo-dev-launcher/node_modules/@expo/config": {
- "version": "12.0.13",
- "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz",
- "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "~7.10.4",
- "@expo/config-plugins": "~54.0.4",
- "@expo/config-types": "^54.0.10",
- "@expo/json-file": "^10.0.8",
- "deepmerge": "^4.3.1",
- "getenv": "^2.0.0",
- "glob": "^13.0.0",
- "require-from-string": "^2.0.2",
- "resolve-from": "^5.0.0",
- "resolve-workspace-root": "^2.0.0",
- "semver": "^7.6.0",
- "slugify": "^1.3.4",
- "sucrase": "~3.35.1"
- }
- },
- "node_modules/expo-dev-launcher/node_modules/@expo/config-plugins": {
- "version": "54.0.4",
- "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.4.tgz",
- "integrity": "sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==",
- "license": "MIT",
- "dependencies": {
- "@expo/config-types": "^54.0.10",
- "@expo/json-file": "~10.0.8",
- "@expo/plist": "^0.4.8",
- "@expo/sdk-runtime-versions": "^1.0.0",
- "chalk": "^4.1.2",
- "debug": "^4.3.5",
- "getenv": "^2.0.0",
- "glob": "^13.0.0",
- "resolve-from": "^5.0.0",
- "semver": "^7.5.4",
- "slash": "^3.0.0",
- "slugify": "^1.6.6",
- "xcode": "^3.0.1",
- "xml2js": "0.6.0"
- }
- },
- "node_modules/expo-dev-launcher/node_modules/@expo/config-types": {
- "version": "54.0.10",
- "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.10.tgz",
- "integrity": "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==",
- "license": "MIT"
- },
- "node_modules/expo-dev-launcher/node_modules/@expo/plist": {
- "version": "0.4.8",
- "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz",
- "integrity": "sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==",
- "license": "MIT",
- "dependencies": {
- "@xmldom/xmldom": "^0.8.8",
- "base64-js": "^1.2.3",
- "xmlbuilder": "^15.1.1"
- }
- },
- "node_modules/expo-dev-launcher/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/expo-dev-launcher/node_modules/expo-json-utils": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-0.15.0.tgz",
- "integrity": "sha512-duRT6oGl80IDzH2LD2yEFWNwGIC2WkozsB6HF3cDYNoNNdUvFk6uN3YiwsTsqVM/D0z6LEAQ01/SlYvN+Fw0JQ==",
- "license": "MIT"
- },
- "node_modules/expo-dev-launcher/node_modules/expo-manifests": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-1.0.10.tgz",
- "integrity": "sha512-oxDUnURPcL4ZsOBY6X1DGWGuoZgVAFzp6PISWV7lPP2J0r8u1/ucuChBgpK7u1eLGFp6sDIPwXyEUCkI386XSQ==",
- "license": "MIT",
- "dependencies": {
- "@expo/config": "~12.0.11",
- "expo-json-utils": "~0.15.0"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
- "node_modules/expo-dev-launcher/node_modules/sucrase": {
- "version": "3.35.1",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
- "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "tinyglobby": "^0.2.11",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/expo-dev-menu": {
"version": "7.0.18",
"resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-7.0.18.tgz",
@@ -8052,15 +5169,25 @@
}
},
"node_modules/expo-eas-client": {
- "version": "55.0.2",
- "resolved": "https://registry.npmjs.org/expo-eas-client/-/expo-eas-client-55.0.2.tgz",
- "integrity": "sha512-fjOgSXaZFBK2Xmzn/uw0DTF3BsYv97JEa4PYXXqVCEvNJPwJB1cV1eX6Xyq6iKGIhMPH9k62sOc+oUdt094WCw==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/expo-eas-client/-/expo-eas-client-1.0.8.tgz",
+ "integrity": "sha512-5or11NJhSeDoHHI6zyvQDW2cz/yFyE+1Cz8NTs5NK8JzC7J0JrkUgptWtxyfB6Xs/21YRNifd3qgbBN3hfKVgA==",
"license": "MIT"
},
+ "node_modules/expo-file-system": {
+ "version": "19.0.21",
+ "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-19.0.21.tgz",
+ "integrity": "sha512-s3DlrDdiscBHtab/6W1osrjGL+C2bvoInPJD7sOwmxfJ5Woynv2oc+Fz1/xVXaE/V7HE/+xrHC/H45tu6lZzzg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "expo": "*",
+ "react-native": "*"
+ }
+ },
"node_modules/expo-font": {
- "version": "55.0.4",
- "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-55.0.4.tgz",
- "integrity": "sha512-ZKeGTFffPygvY5dM/9ATM2p7QDkhsaHopH7wFAWgP2lKzqUMS9B/RxCvw5CaObr9Ro7x9YptyeRKX2HmgmMfrg==",
+ "version": "14.0.11",
+ "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.11.tgz",
+ "integrity": "sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -8072,51 +5199,30 @@
"react-native": "*"
}
},
- "node_modules/expo-glass-effect": {
- "version": "55.0.7",
- "resolved": "https://registry.npmjs.org/expo-glass-effect/-/expo-glass-effect-55.0.7.tgz",
- "integrity": "sha512-G7Q9rUaEY0YC36fGE6irDljfsfvzz/y49zagARAKvSJSyQMUSrhR25WOr5LK5Cw7gQNNBEy9U1ctlr7yCay/fQ==",
- "license": "MIT",
- "peerDependencies": {
- "expo": "*",
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/expo-image": {
- "version": "55.0.6",
- "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-55.0.6.tgz",
- "integrity": "sha512-TKuu0uBmgTZlhd91Glv+V4vSBMlfl0bdQxfl97oKKZUo3OBC13l3eLik7v3VNLJN7PZbiwOAiXkZkqSOBx/Xsw==",
- "license": "MIT",
- "dependencies": {
- "sf-symbols-typescript": "^2.2.0"
- },
- "peerDependencies": {
- "expo": "*",
- "react": "*",
- "react-native": "*",
- "react-native-web": "*"
- },
- "peerDependenciesMeta": {
- "react-native-web": {
- "optional": true
- }
- }
- },
"node_modules/expo-json-utils": {
- "version": "55.0.0",
- "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-55.0.0.tgz",
- "integrity": "sha512-aupt/o5PDAb8dXDCb0JcRdkqnTLxe/F+La7jrnyd/sXlYFfRgBJLFOa1SqVFXm1E/Xam1SE/yw6eAb+DGY7Arg==",
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-0.15.0.tgz",
+ "integrity": "sha512-duRT6oGl80IDzH2LD2yEFWNwGIC2WkozsB6HF3cDYNoNNdUvFk6uN3YiwsTsqVM/D0z6LEAQ01/SlYvN+Fw0JQ==",
"license": "MIT"
},
+ "node_modules/expo-keep-awake": {
+ "version": "15.0.8",
+ "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-15.0.8.tgz",
+ "integrity": "sha512-YK9M1VrnoH1vLJiQzChZgzDvVimVoriibiDIFLbQMpjYBnvyfUeHJcin/Gx1a+XgupNXy92EQJLgI/9ZuXajYQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "expo": "*",
+ "react": "*"
+ }
+ },
"node_modules/expo-linking": {
- "version": "55.0.7",
- "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-55.0.7.tgz",
- "integrity": "sha512-MiGCedere1vzQTEi2aGrkzd7eh/rPSz4w6F3GMBuAJzYl+/0VhIuyhozpEGrueyDIXWfzaUVOcn3SfxVi+kwQQ==",
+ "version": "8.0.11",
+ "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.11.tgz",
+ "integrity": "sha512-+VSaNL5om3kOp/SSKO5qe6cFgfSIWnnQDSbA7XLs3ECkYzXRquk5unxNS3pg7eK5kNUmQ4kgLI7MhTggAEUBLA==",
"license": "MIT",
"peer": true,
"dependencies": {
- "expo-constants": "~55.0.7",
+ "expo-constants": "~18.0.12",
"invariant": "^2.2.4"
},
"peerDependencies": {
@@ -8125,37 +5231,38 @@
}
},
"node_modules/expo-manifests": {
- "version": "55.0.9",
- "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-55.0.9.tgz",
- "integrity": "sha512-i82j3X4hbxYDe6kxUw4u8WfvbvTj2w+9BD9WKuL0mFRy+MjvdzdyaqAjEViWCKo/alquP/hTApDTQBb3UmWhkg==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-1.0.10.tgz",
+ "integrity": "sha512-oxDUnURPcL4ZsOBY6X1DGWGuoZgVAFzp6PISWV7lPP2J0r8u1/ucuChBgpK7u1eLGFp6sDIPwXyEUCkI386XSQ==",
"license": "MIT",
"dependencies": {
- "@expo/config": "~55.0.8",
- "expo-json-utils": "~55.0.0"
+ "@expo/config": "~12.0.11",
+ "expo-json-utils": "~0.15.0"
},
"peerDependencies": {
"expo": "*"
}
},
"node_modules/expo-modules-autolinking": {
- "version": "55.0.8",
- "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-55.0.8.tgz",
- "integrity": "sha512-nrWB1pkNp7bR8ECUTgYUiJ2Pyh6AvxCBXZ+lyPlfl1TzEIGhwU1Yqr+d78eJDueXaW+9zKeE0HqrTZoLS3ve4A==",
+ "version": "3.0.24",
+ "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.24.tgz",
+ "integrity": "sha512-TP+6HTwhL7orDvsz2VzauyQlXJcAWyU3ANsZ7JGL4DQu8XaZv/A41ZchbtAYLfozNA2Ya1Hzmhx65hXryBMjaQ==",
"license": "MIT",
"dependencies": {
- "@expo/require-utils": "^55.0.2",
"@expo/spawn-async": "^1.7.2",
"chalk": "^4.1.0",
- "commander": "^7.2.0"
+ "commander": "^7.2.0",
+ "require-from-string": "^2.0.2",
+ "resolve-from": "^5.0.0"
},
"bin": {
"expo-modules-autolinking": "bin/expo-modules-autolinking.js"
}
},
"node_modules/expo-modules-core": {
- "version": "55.0.14",
- "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-55.0.14.tgz",
- "integrity": "sha512-eAerOnnhbZitUAKbY7B61kIudiabAz/m/oMGINms2+GeY1DRhdvrm5aAkhkHHmykPrg58PPryXtmF14YAYWViw==",
+ "version": "3.0.29",
+ "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-3.0.29.tgz",
+ "integrity": "sha512-LzipcjGqk8gvkrOUf7O2mejNWugPkf3lmd9GkqL9WuNyeN2fRwU0Dn77e3ZUKI3k6sI+DNwjkq4Nu9fNN9WS7Q==",
"license": "MIT",
"dependencies": {
"invariant": "^2.2.4"
@@ -8166,31 +5273,28 @@
}
},
"node_modules/expo-router": {
- "version": "55.0.4",
- "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-55.0.4.tgz",
- "integrity": "sha512-wLKxc9l3IaE96UJFvwXKi2YYYjYK/VUttwAwcnljaUA2dLgDruNGmjsBS9A+g3aK3lt2/JJRu+cec7ZLJ9r6Wg==",
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-6.0.23.tgz",
+ "integrity": "sha512-qCxVAiCrCyu0npky6azEZ6dJDMt77OmCzEbpF6RbUTlfkaCA417LvY14SBkk0xyGruSxy/7pvJOI6tuThaUVCA==",
"license": "MIT",
"dependencies": {
- "@expo/metro-runtime": "^55.0.6",
- "@expo/schema-utils": "^55.0.2",
- "@radix-ui/react-slot": "^1.2.0",
+ "@expo/metro-runtime": "^6.1.2",
+ "@expo/schema-utils": "^0.1.8",
+ "@radix-ui/react-slot": "1.2.0",
"@radix-ui/react-tabs": "^1.1.12",
- "@react-navigation/bottom-tabs": "^7.10.1",
- "@react-navigation/native": "^7.1.28",
- "@react-navigation/native-stack": "^7.10.1",
+ "@react-navigation/bottom-tabs": "^7.4.0",
+ "@react-navigation/native": "^7.1.8",
+ "@react-navigation/native-stack": "^7.3.16",
"client-only": "^0.0.1",
"debug": "^4.3.4",
"escape-string-regexp": "^4.0.0",
- "expo-glass-effect": "^55.0.7",
- "expo-image": "^55.0.6",
- "expo-server": "^55.0.6",
- "expo-symbols": "^55.0.5",
+ "expo-server": "^1.0.5",
"fast-deep-equal": "^3.1.3",
"invariant": "^2.2.4",
"nanoid": "^3.3.8",
"query-string": "^7.1.3",
"react-fast-compare": "^3.2.2",
- "react-native-is-edge-to-edge": "^1.2.1",
+ "react-native-is-edge-to-edge": "^1.1.6",
"semver": "~7.6.3",
"server-only": "^0.0.1",
"sf-symbols-typescript": "^2.1.0",
@@ -8199,13 +5303,12 @@
"vaul": "^1.1.2"
},
"peerDependencies": {
- "@expo/log-box": "55.0.7",
- "@expo/metro-runtime": "^55.0.6",
- "@react-navigation/drawer": "^7.7.2",
- "@testing-library/react-native": ">= 13.2.0",
+ "@expo/metro-runtime": "^6.1.2",
+ "@react-navigation/drawer": "^7.5.0",
+ "@testing-library/react-native": ">= 12.0.0",
"expo": "*",
- "expo-constants": "^55.0.7",
- "expo-linking": "^55.0.7",
+ "expo-constants": "^18.0.13",
+ "expo-linking": "^8.0.11",
"react": "*",
"react-dom": "*",
"react-native": "*",
@@ -8240,6 +5343,176 @@
}
}
},
+ "node_modules/expo-router/node_modules/@radix-ui/react-collection": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz",
+ "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-slot": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/expo-router/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/expo-router/node_modules/@radix-ui/react-presence": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz",
+ "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/expo-router/node_modules/@radix-ui/react-primitive": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz",
+ "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/expo-router/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/expo-router/node_modules/@radix-ui/react-roving-focus": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz",
+ "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/expo-router/node_modules/@radix-ui/react-tabs": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz",
+ "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-roving-focus": "1.1.11",
+ "@radix-ui/react-use-controllable-state": "1.2.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/expo-router/node_modules/semver": {
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -8253,28 +5526,27 @@
}
},
"node_modules/expo-secure-store": {
- "version": "55.0.8",
- "resolved": "https://registry.npmjs.org/expo-secure-store/-/expo-secure-store-55.0.8.tgz",
- "integrity": "sha512-8w9tQe8U6oRo5YIzqCqVhRrOnfoODNDoitBtLXEx+zS6WLUnkRq5kH7ViJuOgiM7PzLr9pvAliRiDOKyvFbTuQ==",
+ "version": "15.0.8",
+ "resolved": "https://registry.npmjs.org/expo-secure-store/-/expo-secure-store-15.0.8.tgz",
+ "integrity": "sha512-lHnzvRajBu4u+P99+0GEMijQMFCOYpWRO4dWsXSuMt77+THPIGjzNvVKrGSl6mMrLsfVaKL8BpwYZLGlgA+zAw==",
"license": "MIT",
"peerDependencies": {
"expo": "*"
}
},
"node_modules/expo-server": {
- "version": "55.0.6",
- "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-55.0.6.tgz",
- "integrity": "sha512-xI72FTm469FfuuBL2R5aNtthgH+GR7ygOpsx/KcPS0K8AZaZd7VjtEExbzn9/qyyYkWW3T+3dAmCDKOMX8gdmQ==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-1.0.5.tgz",
+ "integrity": "sha512-IGR++flYH70rhLyeXF0Phle56/k4cee87WeQ4mamS+MkVAVP+dDlOHf2nN06Z9Y2KhU0Gp1k+y61KkghF7HdhA==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.16.0"
}
},
"node_modules/expo-status-bar": {
- "version": "55.0.4",
- "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-55.0.4.tgz",
- "integrity": "sha512-BPDjUXKqv1F9j2YNGLRZfkBEZXIEEpqj+t81y4c+4fdSN3Pos7goIHXgcl2ozbKQLgKRZQyNZQtbUgh5UjHYUQ==",
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-3.0.9.tgz",
+ "integrity": "sha512-xyYyVg6V1/SSOZWh4Ni3U129XHCnFHBTcUo0dhWtFDrZbNp/duw5AGsQfb2sVeU0gxWHXSY1+5F0jnKYC7WuOw==",
"license": "MIT",
"dependencies": {
"react-native-is-edge-to-edge": "^1.2.1"
@@ -8285,43 +5557,27 @@
}
},
"node_modules/expo-structured-headers": {
- "version": "55.0.0",
- "resolved": "https://registry.npmjs.org/expo-structured-headers/-/expo-structured-headers-55.0.0.tgz",
- "integrity": "sha512-udaNvuWb45/Sryq9FLC/blwgOChhznuqlTrUzVjC0T83pMdcmscKJX23lnNDW6hCec8p81Y3z1DIFwIyk0g/PQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/expo-structured-headers/-/expo-structured-headers-5.0.0.tgz",
+ "integrity": "sha512-RmrBtnSphk5REmZGV+lcdgdpxyzio5rJw8CXviHE6qH5pKQQ83fhMEcigvrkBdsn2Efw2EODp4Yxl1/fqMvOZw==",
"license": "MIT"
},
- "node_modules/expo-symbols": {
- "version": "55.0.5",
- "resolved": "https://registry.npmjs.org/expo-symbols/-/expo-symbols-55.0.5.tgz",
- "integrity": "sha512-W/QYRvnYVes947ZYOHtuKL8Gobs7BUjeu9oknzbo4jGnou7Ks6bj1CwdT0ZWNBgaTopbS4/POXumJIkW4cTPSQ==",
- "license": "MIT",
- "dependencies": {
- "@expo-google-fonts/material-symbols": "^0.4.1",
- "sf-symbols-typescript": "^2.0.0"
- },
- "peerDependencies": {
- "expo": "*",
- "expo-font": "*",
- "react": "*",
- "react-native": "*"
- }
- },
"node_modules/expo-updates": {
- "version": "55.0.12",
- "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-55.0.12.tgz",
- "integrity": "sha512-20YTlmivT7pU8+jYMQHqHQmFTdNHHfIMXXVuFjQA31qCyAOwR32AvDn30IBpgn1Z7XJTX+Sr6cEoMhqz5IJfww==",
+ "version": "29.0.16",
+ "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-29.0.16.tgz",
+ "integrity": "sha512-E9/fxRz/Eurtc7hxeI/6ZPyHH3To9Xoccm1kXoICZTRojmuTo+dx0Xv53UHyHn4G5zGMezyaKF2Qtj3AKcT93w==",
"license": "MIT",
"dependencies": {
"@expo/code-signing-certificates": "^0.0.6",
- "@expo/plist": "^0.5.2",
+ "@expo/plist": "^0.4.8",
"@expo/spawn-async": "^1.7.2",
- "arg": "^4.1.0",
+ "arg": "4.1.0",
"chalk": "^4.1.2",
"debug": "^4.3.4",
- "expo-eas-client": "~55.0.2",
- "expo-manifests": "~55.0.9",
- "expo-structured-headers": "~55.0.0",
- "expo-updates-interface": "~55.1.3",
+ "expo-eas-client": "~1.0.8",
+ "expo-manifests": "~1.0.10",
+ "expo-structured-headers": "~5.0.0",
+ "expo-updates-interface": "~2.0.0",
"getenv": "^2.0.0",
"glob": "^13.0.0",
"ignore": "^5.3.1",
@@ -8337,47 +5593,47 @@
}
},
"node_modules/expo-updates-interface": {
- "version": "55.1.3",
- "resolved": "https://registry.npmjs.org/expo-updates-interface/-/expo-updates-interface-55.1.3.tgz",
- "integrity": "sha512-UVVIiZqymQZJL+o/jh65kXOI97xdkbqBJJM0LMabaPMNLFnc6/WvOMOzmQs7SPyKb8+0PeBaFd7tj5DzF6JeQg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/expo-updates-interface/-/expo-updates-interface-2.0.0.tgz",
+ "integrity": "sha512-pTzAIufEZdVPKql6iMi5ylVSPqV1qbEopz9G6TSECQmnNde2nwq42PxdFBaUEd8IZJ/fdJLQnOT3m6+XJ5s7jg==",
"license": "MIT",
"peerDependencies": {
"expo": "*"
}
},
"node_modules/expo-updates/node_modules/arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz",
+ "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==",
"license": "MIT"
},
"node_modules/expo/node_modules/@expo/cli": {
- "version": "55.0.15",
- "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-55.0.15.tgz",
- "integrity": "sha512-Qd4aF2+wT9LtdV7G/gULbx/t8FJ/OVtwuNkLcZt1XlosQ5XX/C/3ywZXYl+/bYcHUmuO1TBD3Fg05bNlmL6vrw==",
+ "version": "54.0.23",
+ "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.23.tgz",
+ "integrity": "sha512-km0h72SFfQCmVycH/JtPFTVy69w6Lx1cHNDmfLfQqgKFYeeHTjx7LVDP4POHCtNxFP2UeRazrygJhlh4zz498g==",
"license": "MIT",
"dependencies": {
+ "@0no-co/graphql.web": "^1.0.8",
"@expo/code-signing-certificates": "^0.0.6",
- "@expo/config": "~55.0.8",
- "@expo/config-plugins": "~55.0.6",
+ "@expo/config": "~12.0.13",
+ "@expo/config-plugins": "~54.0.4",
"@expo/devcert": "^1.2.1",
- "@expo/env": "~2.1.1",
- "@expo/image-utils": "^0.8.12",
- "@expo/json-file": "^10.0.12",
- "@expo/log-box": "55.0.7",
+ "@expo/env": "~2.0.8",
+ "@expo/image-utils": "^0.8.8",
+ "@expo/json-file": "^10.0.8",
"@expo/metro": "~54.2.0",
- "@expo/metro-config": "~55.0.9",
- "@expo/osascript": "^2.4.2",
- "@expo/package-manager": "^1.10.3",
- "@expo/plist": "^0.5.2",
- "@expo/prebuild-config": "^55.0.8",
- "@expo/require-utils": "^55.0.2",
- "@expo/router-server": "^55.0.9",
- "@expo/schema-utils": "^55.0.2",
+ "@expo/metro-config": "~54.0.14",
+ "@expo/osascript": "^2.3.8",
+ "@expo/package-manager": "^1.9.10",
+ "@expo/plist": "^0.4.8",
+ "@expo/prebuild-config": "^54.0.8",
+ "@expo/schema-utils": "^0.1.8",
"@expo/spawn-async": "^1.7.2",
"@expo/ws-tunnel": "^1.0.1",
- "@expo/xcpretty": "^4.4.0",
- "@react-native/dev-middleware": "0.83.2",
+ "@expo/xcpretty": "^4.3.0",
+ "@react-native/dev-middleware": "0.81.5",
+ "@urql/core": "^5.0.6",
+ "@urql/exchange-retry": "^1.3.0",
"accepts": "^1.3.8",
"arg": "^5.0.2",
"better-opn": "~3.0.2",
@@ -8388,32 +5644,38 @@
"compression": "^1.7.4",
"connect": "^3.7.0",
"debug": "^4.3.4",
- "dnssd-advertise": "^1.1.3",
- "expo-server": "^55.0.6",
- "fetch-nodeshim": "^0.4.6",
+ "env-editor": "^0.4.1",
+ "expo-server": "^1.0.5",
+ "freeport-async": "^2.0.0",
"getenv": "^2.0.0",
"glob": "^13.0.0",
- "lan-network": "^0.2.0",
- "multitars": "^0.2.3",
+ "lan-network": "^0.1.6",
+ "minimatch": "^9.0.0",
"node-forge": "^1.3.3",
"npm-package-arg": "^11.0.0",
"ora": "^3.4.0",
- "picomatch": "^4.0.3",
+ "picomatch": "^3.0.1",
+ "pretty-bytes": "^5.6.0",
"pretty-format": "^29.7.0",
"progress": "^2.0.3",
"prompts": "^2.3.2",
+ "qrcode-terminal": "0.11.0",
+ "require-from-string": "^2.0.2",
+ "requireg": "^0.2.2",
+ "resolve": "^1.22.2",
"resolve-from": "^5.0.0",
+ "resolve.exports": "^2.0.3",
"semver": "^7.6.0",
"send": "^0.19.0",
"slugify": "^1.3.4",
"source-map-support": "~0.5.21",
"stacktrace-parser": "^0.1.10",
"structured-headers": "^0.4.1",
+ "tar": "^7.5.2",
"terminal-link": "^2.1.1",
- "toqr": "^0.1.1",
+ "undici": "^6.18.2",
"wrap-ansi": "^7.0.0",
- "ws": "^8.12.1",
- "zod": "^3.25.76"
+ "ws": "^8.12.1"
},
"bin": {
"expo-internal": "build/bin/cli"
@@ -8432,97 +5694,27 @@
}
}
},
- "node_modules/expo/node_modules/@expo/cli/node_modules/@expo/router-server": {
- "version": "55.0.9",
- "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-55.0.9.tgz",
- "integrity": "sha512-LcCFi+P1qfZOsw0DO4JwNKRxtWt4u2bjTYj0PUe4WVf9NVG/NfUetAXYRbBS6P+gupfM6SC+/bdzdqCWQh7j8g==",
+ "node_modules/expo/node_modules/@urql/core": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.2.0.tgz",
+ "integrity": "sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==",
"license": "MIT",
"dependencies": {
- "debug": "^4.3.4"
- },
- "peerDependencies": {
- "@expo/metro-runtime": "^55.0.6",
- "expo": "*",
- "expo-constants": "^55.0.7",
- "expo-font": "^55.0.4",
- "expo-router": "*",
- "expo-server": "^55.0.6",
- "react": "*",
- "react-dom": "*",
- "react-server-dom-webpack": "~19.0.1 || ~19.1.2 || ~19.2.1"
- },
- "peerDependenciesMeta": {
- "@expo/metro-runtime": {
- "optional": true
- },
- "expo-router": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- },
- "react-server-dom-webpack": {
- "optional": true
- }
+ "@0no-co/graphql.web": "^1.0.13",
+ "wonka": "^6.3.2"
}
},
- "node_modules/expo/node_modules/@expo/vector-icons": {
- "version": "15.1.1",
- "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-15.1.1.tgz",
- "integrity": "sha512-Iu2VkcoI5vygbtYngm7jb4ifxElNVXQYdDrYkT7UCEIiKLeWnQY0wf2ZhHZ+Wro6Sc5TaumpKUOqDRpLi5rkvw==",
- "license": "MIT",
- "peerDependencies": {
- "expo-font": ">=14.0.4",
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/expo/node_modules/babel-preset-expo": {
- "version": "55.0.10",
- "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-55.0.10.tgz",
- "integrity": "sha512-aRtW7qJKohGU2V0LUJ6IeP7py3+kVUo9zcc8+v1Kix8jGGuIvqvpo9S6W1Fmn9VFP2DBwkFDLiyzkCZS85urVA==",
+ "node_modules/expo/node_modules/@urql/exchange-retry": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.2.tgz",
+ "integrity": "sha512-TQMCz2pFJMfpNxmSfX1VSfTjwUIFx/mL+p1bnfM1xjjdla7Z+KnGMW/EhFbpckp3LyWAH4PgOsMwOMnIN+MBFg==",
"license": "MIT",
"dependencies": {
- "@babel/generator": "^7.20.5",
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/plugin-proposal-decorators": "^7.12.9",
- "@babel/plugin-proposal-export-default-from": "^7.24.7",
- "@babel/plugin-syntax-export-default-from": "^7.24.7",
- "@babel/plugin-transform-class-static-block": "^7.27.1",
- "@babel/plugin-transform-export-namespace-from": "^7.25.9",
- "@babel/plugin-transform-flow-strip-types": "^7.25.2",
- "@babel/plugin-transform-modules-commonjs": "^7.24.8",
- "@babel/plugin-transform-object-rest-spread": "^7.24.7",
- "@babel/plugin-transform-parameters": "^7.24.7",
- "@babel/plugin-transform-private-methods": "^7.24.7",
- "@babel/plugin-transform-private-property-in-object": "^7.24.7",
- "@babel/plugin-transform-runtime": "^7.24.7",
- "@babel/preset-react": "^7.22.15",
- "@babel/preset-typescript": "^7.23.0",
- "@react-native/babel-preset": "0.83.2",
- "babel-plugin-react-compiler": "^1.0.0",
- "babel-plugin-react-native-web": "~0.21.0",
- "babel-plugin-syntax-hermes-parser": "^0.32.0",
- "babel-plugin-transform-flow-enums": "^0.0.2",
- "debug": "^4.3.4",
- "resolve-from": "^5.0.0"
+ "@urql/core": "^5.1.2",
+ "wonka": "^6.3.2"
},
"peerDependencies": {
- "@babel/runtime": "^7.20.0",
- "expo": "*",
- "expo-widgets": "^55.0.2",
- "react-refresh": ">=0.14.0 <1.0.0"
- },
- "peerDependenciesMeta": {
- "@babel/runtime": {
- "optional": true
- },
- "expo": {
- "optional": true
- },
- "expo-widgets": {
- "optional": true
- }
+ "@urql/core": "^5.0.0"
}
},
"node_modules/expo/node_modules/ci-info": {
@@ -8540,53 +5732,26 @@
"node": ">=8"
}
},
- "node_modules/expo/node_modules/expo-asset": {
- "version": "55.0.8",
- "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-55.0.8.tgz",
- "integrity": "sha512-yEz2svDX67R0yiW2skx6dJmcE0q7sj9ECpGMcxBExMCbctc+nMoZCnjUuhzPl5vhClUsO5HFFXS5vIGmf1bgHQ==",
- "license": "MIT",
- "dependencies": {
- "@expo/image-utils": "^0.8.12",
- "expo-constants": "~55.0.7"
- },
- "peerDependencies": {
- "expo": "*",
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/expo/node_modules/expo-file-system": {
- "version": "55.0.10",
- "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-55.0.10.tgz",
- "integrity": "sha512-ysFdVdUgtfj2ApY0Cn+pBg+yK4xp+SNwcaH8j2B91JJQ4OXJmnyCSmrNZYz7J4mdYVuv2GzxIP+N/IGlHQG3Yw==",
- "license": "MIT",
- "peerDependencies": {
- "expo": "*",
- "react-native": "*"
- }
- },
- "node_modules/expo/node_modules/expo-keep-awake": {
- "version": "55.0.4",
- "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-55.0.4.tgz",
- "integrity": "sha512-vwfdMtMS5Fxaon8gC0AiE70SpxTsHJ+rjeoVJl8kdfdbxczF7OIaVmfjFJ5Gfigd/WZiLqxhfZk34VAkXF4PNg==",
- "license": "MIT",
- "peerDependencies": {
- "expo": "*",
- "react": "*"
- }
- },
"node_modules/expo/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz",
+ "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==",
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/expo/node_modules/qrcode-terminal": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz",
+ "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==",
+ "bin": {
+ "qrcode-terminal": "bin/qrcode-terminal.js"
+ }
+ },
"node_modules/expo/node_modules/ws": {
"version": "8.19.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
@@ -8608,15 +5773,6 @@
}
}
},
- "node_modules/expo/node_modules/zod": {
- "version": "3.25.76",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
- "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
"node_modules/exponential-backoff": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz",
@@ -8824,58 +5980,12 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"license": "MIT"
},
- "node_modules/fast-fifo": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
- "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"license": "MIT"
},
- "node_modules/fastq": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
- "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fb-dotslash": {
- "version": "0.5.8",
- "resolved": "https://registry.npmjs.org/fb-dotslash/-/fb-dotslash-0.5.8.tgz",
- "integrity": "sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==",
- "license": "(MIT OR Apache-2.0)",
- "bin": {
- "dotslash": "bin/dotslash"
- },
- "engines": {
- "node": ">=20"
- }
- },
"node_modules/fb-watchman": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
@@ -8915,85 +6025,6 @@
"asap": "~2.0.3"
}
},
- "node_modules/fetch-nodeshim": {
- "version": "0.4.9",
- "resolved": "https://registry.npmjs.org/fetch-nodeshim/-/fetch-nodeshim-0.4.9.tgz",
- "integrity": "sha512-XIQWlB2A4RZ7NebXWGxS0uDMdvRHkiUDTghBVJKFg9yEOd45w/PP8cZANuPf2H08W6Cor3+2n7Q6TTZgAS3Fkw==",
- "license": "MIT"
- },
- "node_modules/fetch-retry": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz",
- "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/figures/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/filelist": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz",
- "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "minimatch": "^5.0.1"
- }
- },
- "node_modules/filelist/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/filelist/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/filelist/node_modules/minimatch": {
- "version": "5.1.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
- "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -9073,53 +6104,6 @@
"integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==",
"license": "BSD-2-Clause"
},
- "node_modules/foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/form-data": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
- "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -9129,6 +6113,15 @@
"node": ">= 0.6"
}
},
+ "node_modules/freeport-async": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz",
+ "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -9138,21 +6131,6 @@
"node": ">= 0.6"
}
},
- "node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -9281,45 +6259,41 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
+ "node_modules/glob/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "license": "MIT",
"engines": {
- "node": ">= 6"
+ "node": "18 || 20 || >=22"
}
},
- "node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
+ "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"license": "MIT",
"dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
+ "balanced-match": "^4.0.2"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": "18 || 20 || >=22"
}
},
- "node_modules/golden-fleece": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/golden-fleece/-/golden-fleece-1.0.9.tgz",
- "integrity": "sha512-YSwLaGMOgSBx9roJlNLL12c+FRiw7VECphinc6mGucphc/ZxTHgdEz6gmJqH6NOzYEd/yr64hwjom5pZ+tJVpg==",
- "dev": true
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
"node_modules/gopd": {
"version": "1.2.0",
@@ -9339,46 +6313,6 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"license": "ISC"
},
- "node_modules/gradle-to-js": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/gradle-to-js/-/gradle-to-js-2.0.1.tgz",
- "integrity": "sha512-is3hDn9zb8XXnjbEeAEIqxTpLHUiGBqjegLmXPuyMBfKAggpadWFku4/AP8iYAGBX6qR9/5UIUIp47V0XI3aMw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "lodash.merge": "^4.6.2"
- },
- "bin": {
- "gradle-to-js": "cli.js"
- }
- },
- "node_modules/graphql": {
- "version": "16.8.1",
- "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz",
- "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
- }
- },
- "node_modules/graphql-tag": {
- "version": "2.12.6",
- "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz",
- "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
- }
- },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -9400,22 +6334,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -9428,25 +6346,19 @@
"node": ">= 0.4"
}
},
- "node_modules/hermes-compiler": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-0.14.1.tgz",
- "integrity": "sha512-+RPPQlayoZ9n6/KXKt5SFILWXCGJ/LV5d24L5smXrvTDrPS4L6dSctPczXauuvzFP3QEJbD1YO7Z3Ra4a+4IhA==",
- "license": "MIT"
- },
"node_modules/hermes-estree": {
- "version": "0.32.0",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz",
- "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==",
+ "version": "0.29.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz",
+ "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==",
"license": "MIT"
},
"node_modules/hermes-parser": {
- "version": "0.32.0",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz",
- "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==",
+ "version": "0.29.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz",
+ "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==",
"license": "MIT",
"dependencies": {
- "hermes-estree": "0.32.0"
+ "hermes-estree": "0.29.1"
}
},
"node_modules/hoist-non-react-statics": {
@@ -9482,24 +6394,6 @@
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"license": "ISC"
},
- "node_modules/http-call": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz",
- "integrity": "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "content-type": "^1.0.4",
- "debug": "^4.1.1",
- "is-retry-allowed": "^1.1.0",
- "is-stream": "^2.0.0",
- "parse-json": "^4.0.0",
- "tunnel-agent": "^0.6.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
"node_modules/http-errors": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
@@ -9542,16 +6436,6 @@
"node": ">= 14"
}
},
- "node_modules/hyperlinker": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz",
- "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/hyphenate-style-name": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz",
@@ -9574,6 +6458,26 @@
"url": "https://opencollective.com/express"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -9607,16 +6511,6 @@
"node": ">=0.8.19"
}
},
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -9634,6 +6528,12 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "license": "ISC"
+ },
"node_modules/inline-style-prefixer": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz",
@@ -9667,13 +6567,6 @@
"integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
"license": "MIT"
},
- "node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/is-core-module": {
"version": "2.16.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
@@ -9704,16 +6597,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -9723,29 +6606,6 @@
"node": ">=8"
}
},
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-interactive": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
- "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -9761,42 +6621,6 @@
"integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
"license": "MIT"
},
- "node_modules/is-retry-allowed": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
- "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
@@ -9849,40 +6673,6 @@
"semver": "bin/semver.js"
}
},
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jake": {
- "version": "10.9.4",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
- "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "async": "^3.2.6",
- "filelist": "^1.0.4",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "jake": "bin/cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/jest-environment-node": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
@@ -10071,39 +6861,6 @@
"jiti": "lib/jiti-cli.mjs"
}
},
- "node_modules/jks-js": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/jks-js/-/jks-js-1.1.0.tgz",
- "integrity": "sha512-irWi8S2V029Vic63w0/TYa8NIZwXu9oeMtHQsX51JDIVBo0lrEaOoyM8ALEEh5PVKD6TrA26FixQK6TzT7dHqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "node-forge": "^1.3.1",
- "node-int64": "^0.4.0",
- "node-rsa": "^1.1.1"
- }
- },
- "node_modules/joi": {
- "version": "17.11.0",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz",
- "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.0.0",
- "@hapi/topo": "^5.0.0",
- "@sideway/address": "^4.1.3",
- "@sideway/formula": "^3.0.1",
- "@sideway/pinpoint": "^2.0.0"
- }
- },
- "node_modules/join-component": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz",
- "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -10129,16 +6886,6 @@
"integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==",
"license": "0BSD"
},
- "node_modules/jsep": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz",
- "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.16.0"
- }
- },
"node_modules/jsesc": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
@@ -10151,13 +6898,6 @@
"node": ">=6"
}
},
- "node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
@@ -10176,26 +6916,6 @@
"node": ">=6"
}
},
- "node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/keychain": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/keychain/-/keychain-1.5.0.tgz",
- "integrity": "sha512-liyp4r+93RI7EB2jhwaRd4MWfdgHH6shuldkaPMkELCJjMFvOOVXuTvw1pGqFfhsrgA6OqfykWWPQgBjQakVag==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -10206,9 +6926,9 @@
}
},
"node_modules/lan-network": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/lan-network/-/lan-network-0.2.0.tgz",
- "integrity": "sha512-EZgbsXMrGS+oK+Ta12mCjzBFse+SIewGdwrSTr5g+MSymnjpox2x05ceI20PQejJOFvOgzcXrfDk/SdY7dSCtw==",
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/lan-network/-/lan-network-0.1.7.tgz",
+ "integrity": "sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==",
"license": "MIT",
"bin": {
"lan-network": "dist/lan-network-cli.js"
@@ -10515,34 +7235,12 @@
"node": ">=8"
}
},
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"license": "MIT"
},
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/lodash.throttle": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
@@ -10673,13 +7371,6 @@
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
- "node_modules/make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/makeerror": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@@ -10704,18 +7395,6 @@
"node": ">= 0.4"
}
},
- "node_modules/md5": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
- "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "charenc": "0.0.2",
- "crypt": "0.0.2",
- "is-buffer": "~1.1.6"
- }
- },
"node_modules/mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -10755,16 +7434,6 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"license": "MIT"
},
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/metro": {
"version": "0.83.3",
"resolved": "https://registry.npmjs.org/metro/-/metro-0.83.3.tgz",
@@ -10834,6 +7503,21 @@
"node": ">=20.19.4"
}
},
+ "node_modules/metro-babel-transformer/node_modules/hermes-estree": {
+ "version": "0.32.0",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz",
+ "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==",
+ "license": "MIT"
+ },
+ "node_modules/metro-babel-transformer/node_modules/hermes-parser": {
+ "version": "0.32.0",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz",
+ "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==",
+ "license": "MIT",
+ "dependencies": {
+ "hermes-estree": "0.32.0"
+ }
+ },
"node_modules/metro-cache": {
"version": "0.83.3",
"resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz",
@@ -11034,6 +7718,21 @@
"node": ">=20.19.4"
}
},
+ "node_modules/metro/node_modules/hermes-estree": {
+ "version": "0.32.0",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz",
+ "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==",
+ "license": "MIT"
+ },
+ "node_modules/metro/node_modules/hermes-parser": {
+ "version": "0.32.0",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz",
+ "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==",
+ "license": "MIT",
+ "dependencies": {
+ "hermes-estree": "0.32.0"
+ }
+ },
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
@@ -11090,105 +7789,9 @@
}
},
"node_modules/minimatch": {
- "version": "10.2.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
- "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
- "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/minizlib": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz",
- "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minipass": "^7.0.4",
- "rimraf": "^5.0.5"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/minizlib/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/minizlib/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/minizlib/node_modules/glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minizlib/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/minizlib/node_modules/minimatch": {
"version": "9.0.9",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
- "dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.2"
@@ -11200,37 +7803,22 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/minizlib/node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/minizlib/node_modules/rimraf": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
- "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^10.3.7"
- },
- "bin": {
- "rimraf": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node_modules/minipass": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
}
},
"node_modules/mkdirp": {
@@ -11245,141 +7833,12 @@
"node": ">=10"
}
},
- "node_modules/moment": {
- "version": "2.30.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
- "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": "*"
- }
- },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
- "node_modules/multipasta": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/multipasta/-/multipasta-0.2.7.tgz",
- "integrity": "sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/multitars": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/multitars/-/multitars-0.2.4.tgz",
- "integrity": "sha512-XgLbg1HHchFauMCQPRwMj6MSyDd5koPlTA1hM3rUFkeXzGpjU/I9fP3to7yrObE9jcN8ChIOQGrM0tV0kUZaKg==",
- "license": "MIT"
- },
- "node_modules/mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/mv": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
- "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "mkdirp": "~0.5.1",
- "ncp": "~2.0.0",
- "rimraf": "~2.4.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/mv/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/mv/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/mv/node_modules/glob": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
- "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/mv/node_modules/minimatch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
- "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/mv/node_modules/mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "minimist": "^1.2.6"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/mv/node_modules/rimraf": {
- "version": "2.4.5",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
- "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "glob": "^6.0.1"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
"node_modules/mz": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
@@ -11391,14 +7850,6 @@
"thenify-all": "^1.0.0"
}
},
- "node_modules/nan": {
- "version": "2.25.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz",
- "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
@@ -11417,27 +7868,6 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/natural-orderby": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz",
- "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ncp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
- "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "bin": {
- "ncp": "bin/ncp"
- }
- },
"node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -11447,6 +7877,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/nested-error-stacks": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz",
+ "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==",
+ "license": "MIT"
+ },
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
@@ -11488,30 +7924,6 @@
"integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==",
"license": "MIT"
},
- "node_modules/node-rsa": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz",
- "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "asn1": "^0.2.4"
- }
- },
- "node_modules/node-stream-zip": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
- "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/antelle"
- }
- },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -11587,16 +7999,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/object-treeify": {
- "version": "1.1.33",
- "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz",
- "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -11800,27 +8202,6 @@
"node": ">=6"
}
},
- "node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
- "dev": true,
- "license": "BlueOak-1.0.0"
- },
- "node_modules/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/parse-png": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz",
@@ -11842,17 +8223,6 @@
"node": ">= 0.8"
}
},
- "node_modules/password-prompt": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz",
- "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==",
- "dev": true,
- "license": "0BSD",
- "dependencies": {
- "ansi-escapes": "^4.3.2",
- "cross-spawn": "^7.0.3"
- }
- },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -11921,16 +8291,6 @@
"url": "https://opencollective.com/express"
}
},
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -11958,19 +8318,6 @@
"node": ">= 6"
}
},
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/plist": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
@@ -12028,6 +8375,18 @@
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"license": "MIT"
},
+ "node_modules/pretty-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/pretty-format": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
@@ -12081,27 +8440,6 @@
"asap": "~2.0.6"
}
},
- "node_modules/promise-limit": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz",
- "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/promise-retry": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
- "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "err-code": "^2.0.2",
- "retry": "^0.12.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/prompts": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -12143,15 +8481,6 @@
"node": ">=6"
}
},
- "node_modules/qrcode-terminal": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
- "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
- "dev": true,
- "bin": {
- "qrcode-terminal": "bin/qrcode-terminal.js"
- }
- },
"node_modules/qs": {
"version": "6.15.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
@@ -12194,27 +8523,6 @@
"inherits": "~2.0.3"
}
},
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -12239,10 +8547,25 @@
"node": ">= 0.10"
}
},
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
"node_modules/react": {
- "version": "19.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
- "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
+ "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
"license": "MIT",
"peer": true,
"engines": {
@@ -12260,16 +8583,16 @@
}
},
"node_modules/react-dom": {
- "version": "19.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
- "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
+ "version": "19.1.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
+ "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
"license": "MIT",
"peer": true,
"dependencies": {
- "scheduler": "^0.27.0"
+ "scheduler": "^0.26.0"
},
"peerDependencies": {
- "react": "^19.2.0"
+ "react": "^19.1.0"
}
},
"node_modules/react-fast-compare": {
@@ -12314,46 +8637,45 @@
"license": "MIT"
},
"node_modules/react-native": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.2.tgz",
- "integrity": "sha512-ZDma3SLkRN2U2dg0/EZqxNBAx4of/oTnPjXAQi299VLq2gdnbZowGy9hzqv+O7sTA62g+lM1v+2FM5DUnJ/6hg==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.81.5.tgz",
+ "integrity": "sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==",
"license": "MIT",
"peer": true,
"dependencies": {
"@jest/create-cache-key-function": "^29.7.0",
- "@react-native/assets-registry": "0.83.2",
- "@react-native/codegen": "0.83.2",
- "@react-native/community-cli-plugin": "0.83.2",
- "@react-native/gradle-plugin": "0.83.2",
- "@react-native/js-polyfills": "0.83.2",
- "@react-native/normalize-colors": "0.83.2",
- "@react-native/virtualized-lists": "0.83.2",
+ "@react-native/assets-registry": "0.81.5",
+ "@react-native/codegen": "0.81.5",
+ "@react-native/community-cli-plugin": "0.81.5",
+ "@react-native/gradle-plugin": "0.81.5",
+ "@react-native/js-polyfills": "0.81.5",
+ "@react-native/normalize-colors": "0.81.5",
+ "@react-native/virtualized-lists": "0.81.5",
"abort-controller": "^3.0.0",
"anser": "^1.4.9",
"ansi-regex": "^5.0.0",
"babel-jest": "^29.7.0",
- "babel-plugin-syntax-hermes-parser": "0.32.0",
+ "babel-plugin-syntax-hermes-parser": "0.29.1",
"base64-js": "^1.5.1",
"commander": "^12.0.0",
"flow-enums-runtime": "^0.0.6",
"glob": "^7.1.1",
- "hermes-compiler": "0.14.1",
"invariant": "^2.2.4",
"jest-environment-node": "^29.7.0",
"memoize-one": "^5.0.0",
- "metro-runtime": "^0.83.3",
- "metro-source-map": "^0.83.3",
+ "metro-runtime": "^0.83.1",
+ "metro-source-map": "^0.83.1",
"nullthrows": "^1.1.1",
"pretty-format": "^29.7.0",
"promise": "^8.3.0",
"react-devtools-core": "^6.1.5",
"react-refresh": "^0.14.0",
"regenerator-runtime": "^0.13.2",
- "scheduler": "0.27.0",
+ "scheduler": "0.26.0",
"semver": "^7.1.3",
"stacktrace-parser": "^0.1.10",
"whatwg-fetch": "^3.0.0",
- "ws": "^7.5.10",
+ "ws": "^6.2.3",
"yargs": "^17.6.2"
},
"bin": {
@@ -12363,8 +8685,8 @@
"node": ">= 20.19.4"
},
"peerDependencies": {
- "@types/react": "^19.1.1",
- "react": "^19.2.0"
+ "@types/react": "^19.1.0",
+ "react": "^19.1.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -12373,9 +8695,9 @@
}
},
"node_modules/react-native-gesture-handler": {
- "version": "2.30.0",
- "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.30.0.tgz",
- "integrity": "sha512-5YsnKHGa0X9C8lb5oCnKm0fLUPM6CRduvUUw2Bav4RIj/C3HcFh4RIUnF8wgG6JQWCL1//gRx4v+LVWgcIQdGA==",
+ "version": "2.28.0",
+ "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.28.0.tgz",
+ "integrity": "sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -12399,35 +8721,26 @@
}
},
"node_modules/react-native-reanimated": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.2.1.tgz",
- "integrity": "sha512-/NcHnZMyOvsD/wYXug/YqSKw90P9edN0kEPL5lP4PFf1aQ4F1V7MKe/E0tvfkXKIajy3Qocp5EiEnlcrK/+BZg==",
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.6.tgz",
+ "integrity": "sha512-F+ZJBYiok/6Jzp1re75F/9aLzkgoQCOh4yxrnwATa8392RvM3kx+fiXXFvwcgE59v48lMwd9q0nzF1oJLXpfxQ==",
"license": "MIT",
"peer": true,
"dependencies": {
- "react-native-is-edge-to-edge": "1.2.1",
- "semver": "7.7.3"
+ "react-native-is-edge-to-edge": "^1.2.1",
+ "semver": "7.7.2"
},
"peerDependencies": {
+ "@babel/core": "^7.0.0-0",
"react": "*",
"react-native": "*",
- "react-native-worklets": ">=0.7.0"
- }
- },
- "node_modules/react-native-reanimated/node_modules/react-native-is-edge-to-edge": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.2.1.tgz",
- "integrity": "sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==",
- "license": "MIT",
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
+ "react-native-worklets": ">=0.5.0"
}
},
"node_modules/react-native-reanimated/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -12448,13 +8761,14 @@
}
},
"node_modules/react-native-screens": {
- "version": "4.23.0",
- "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.23.0.tgz",
- "integrity": "sha512-XhO3aK0UeLpBn4kLecd+J+EDeRRJlI/Ro9Fze06vo1q163VeYtzfU9QS09/VyDFMWR1qxDC1iazCArTPSFFiPw==",
+ "version": "4.16.0",
+ "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.16.0.tgz",
+ "integrity": "sha512-yIAyh7F/9uWkOzCi1/2FqvNvK6Wb9Y1+Kzn16SuGfN9YFJDTbwlzGRvePCNTOX0recpLQF3kc2FmvMUhyTCH1Q==",
"license": "MIT",
"peer": true,
"dependencies": {
"react-freeze": "^1.0.0",
+ "react-native-is-edge-to-edge": "^1.2.1",
"warn-once": "^0.1.0"
},
"peerDependencies": {
@@ -12463,9 +8777,9 @@
}
},
"node_modules/react-native-svg": {
- "version": "15.15.3",
- "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.15.3.tgz",
- "integrity": "sha512-/k4KYwPBLGcx2f5d4FjE+vCScK7QOX14cl2lIASJ28u4slHHtIhL0SZKU7u9qmRBHxTCKPoPBtN6haT1NENJNA==",
+ "version": "15.12.1",
+ "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.12.1.tgz",
+ "integrity": "sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -12512,120 +8826,34 @@
"license": "MIT"
},
"node_modules/react-native-worklets": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.7.2.tgz",
- "integrity": "sha512-DuLu1kMV/Uyl9pQHp3hehAlThoLw7Yk2FwRTpzASOmI+cd4845FWn3m2bk9MnjUw8FBRIyhwLqYm2AJaXDXsog==",
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz",
+ "integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==",
"license": "MIT",
"peer": true,
"dependencies": {
- "@babel/plugin-transform-arrow-functions": "7.27.1",
- "@babel/plugin-transform-class-properties": "7.27.1",
- "@babel/plugin-transform-classes": "7.28.4",
- "@babel/plugin-transform-nullish-coalescing-operator": "7.27.1",
- "@babel/plugin-transform-optional-chaining": "7.27.1",
- "@babel/plugin-transform-shorthand-properties": "7.27.1",
- "@babel/plugin-transform-template-literals": "7.27.1",
- "@babel/plugin-transform-unicode-regex": "7.27.1",
- "@babel/preset-typescript": "7.27.1",
- "convert-source-map": "2.0.0",
- "semver": "7.7.3"
+ "@babel/plugin-transform-arrow-functions": "^7.0.0-0",
+ "@babel/plugin-transform-class-properties": "^7.0.0-0",
+ "@babel/plugin-transform-classes": "^7.0.0-0",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0",
+ "@babel/plugin-transform-optional-chaining": "^7.0.0-0",
+ "@babel/plugin-transform-shorthand-properties": "^7.0.0-0",
+ "@babel/plugin-transform-template-literals": "^7.0.0-0",
+ "@babel/plugin-transform-unicode-regex": "^7.0.0-0",
+ "@babel/preset-typescript": "^7.16.7",
+ "convert-source-map": "^2.0.0",
+ "semver": "7.7.2"
},
"peerDependencies": {
- "@babel/core": "*",
+ "@babel/core": "^7.0.0-0",
"react": "*",
"react-native": "*"
}
},
- "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz",
- "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-classes": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz",
- "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-globals": "^7.28.0",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1",
- "@babel/traverse": "^7.28.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz",
- "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/react-native-worklets/node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz",
- "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/react-native-worklets/node_modules/@babel/preset-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz",
- "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-option": "^7.27.1",
- "@babel/plugin-syntax-jsx": "^7.27.1",
- "@babel/plugin-transform-modules-commonjs": "^7.27.1",
- "@babel/plugin-transform-typescript": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
"node_modules/react-native-worklets/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -12635,9 +8863,9 @@
}
},
"node_modules/react-native/node_modules/@react-native/virtualized-lists": {
- "version": "0.83.2",
- "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.2.tgz",
- "integrity": "sha512-N7mRjHLW/+KWxMp9IHRWyE3VIkeG1m3PnZJAGEFLCN8VFb7e4VfI567o7tE/HYcdcXCylw+Eqhlciz8gDeQ71g==",
+ "version": "0.81.5",
+ "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.81.5.tgz",
+ "integrity": "sha512-UVXgV/db25OPIvwZySeToXD/9sKKhOdkcWmmf4Jh8iBZuyfML+/5CasaZ1E7Lqg6g3uqVQq75NqIwkYmORJMPw==",
"license": "MIT",
"dependencies": {
"invariant": "^2.2.4",
@@ -12647,7 +8875,7 @@
"node": ">= 20.19.4"
},
"peerDependencies": {
- "@types/react": "^19.2.0",
+ "@types/react": "^19.1.0",
"react": "*",
"react-native": "*"
},
@@ -12657,12 +8885,6 @@
}
}
},
- "node_modules/react-native/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "license": "MIT"
- },
"node_modules/react-native/node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
@@ -12715,6 +8937,15 @@
"node": "*"
}
},
+ "node_modules/react-native/node_modules/ws": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz",
+ "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==",
+ "license": "MIT",
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
"node_modules/react-refresh": {
"version": "0.14.2",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
@@ -12794,16 +9025,6 @@
}
}
},
- "node_modules/redeyed": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
- "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esprima": "~4.0.0"
- }
- },
"node_modules/regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -12863,13 +9084,6 @@
"regjsparser": "bin/parser"
}
},
- "node_modules/remove-trailing-slash": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz",
- "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -12888,6 +9102,28 @@
"node": ">=0.10.0"
}
},
+ "node_modules/requireg": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz",
+ "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==",
+ "dependencies": {
+ "nested-error-stacks": "~2.0.1",
+ "rc": "~1.2.7",
+ "resolve": "~1.7.1"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/requireg/node_modules/resolve": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
+ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
+ "license": "MIT",
+ "dependencies": {
+ "path-parse": "^1.0.5"
+ }
+ },
"node_modules/resolve": {
"version": "1.22.11",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
@@ -12923,6 +9159,15 @@
"integrity": "sha512-nR23LHAvaI6aHtMg6RWoaHpdR4D881Nydkzi2CixINyg9T00KgaJdJI6Vwty+Ps8WLxZHuxsS0BseWjxSA4C+w==",
"license": "MIT"
},
+ "node_modules/resolve.exports": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
+ "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/restore-cursor": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
@@ -12936,27 +9181,6 @@
"node": ">=4"
}
},
- "node_modules/retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
- "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -12973,12 +9197,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/rimraf/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "license": "MIT"
- },
"node_modules/rimraf/node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
@@ -13038,30 +9256,6 @@
"node": ">= 18"
}
},
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
"node_modules/rxjs": {
"version": "7.8.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
@@ -13092,14 +9286,6 @@
],
"license": "MIT"
},
- "node_modules/safe-json-stringify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
- "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -13116,9 +9302,9 @@
}
},
"node_modules/scheduler": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
- "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
+ "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
"license": "MIT"
},
"node_modules/semver": {
@@ -13241,16 +9427,6 @@
"integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==",
"license": "MIT"
},
- "node_modules/set-interval-async": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/set-interval-async/-/set-interval-async-3.0.3.tgz",
- "integrity": "sha512-o4DyBv6mko+A9cH3QKek4SAAT5UyJRkfdTi6JHii6ZCKUYFun8SwgBmQrOXd158JOwBQzA+BnO8BvT64xuCaSw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14.0.0"
- }
- },
"node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -13424,24 +9600,6 @@
"node": ">=8"
}
},
- "node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
"node_modules/slugify": {
"version": "1.6.6",
"resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz",
@@ -13560,18 +9718,6 @@
"node": ">= 0.10.0"
}
},
- "node_modules/streamx": {
- "version": "2.23.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
- "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "events-universal": "^1.0.0",
- "fast-fifo": "^1.3.2",
- "text-decoder": "^1.1.0"
- }
- },
"node_modules/strict-uri-encode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
@@ -13595,22 +9741,6 @@
"node": ">=8"
}
},
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -13623,18 +9753,13 @@
"node": ">=8"
}
},
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
"license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/structured-headers": {
@@ -13649,118 +9774,6 @@
"integrity": "sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==",
"license": "MIT"
},
- "node_modules/sucrase": {
- "version": "3.35.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
- "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "glob": "^10.3.10",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/sucrase/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/sucrase/node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/sucrase/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/sucrase/node_modules/glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/sucrase/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/sucrase/node_modules/minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.2"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/sucrase/node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -13823,7 +9836,6 @@
"resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz",
"integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==",
"deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/fs-minipass": "^4.0.0",
@@ -13836,23 +9848,10 @@
"node": ">=18"
}
},
- "node_modules/tar-stream": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
- "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "b4a": "^1.6.4",
- "fast-fifo": "^1.2.0",
- "streamx": "^2.15.0"
- }
- },
"node_modules/tar/node_modules/minizlib": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz",
"integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"minipass": "^7.1.2"
@@ -13865,22 +9864,11 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
"integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
- "dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=18"
}
},
- "node_modules/temp-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
- "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/terminal-link": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
@@ -13935,12 +9923,6 @@
"node": ">=8"
}
},
- "node_modules/test-exclude/node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "license": "MIT"
- },
"node_modules/test-exclude/node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
@@ -13984,16 +9966,6 @@
"node": "*"
}
},
- "node_modules/text-decoder": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz",
- "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "b4a": "^1.6.4"
- }
- },
"node_modules/thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -14094,12 +10066,6 @@
"node": ">=0.6"
}
},
- "node_modules/toqr": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/toqr/-/toqr-0.1.1.tgz",
- "integrity": "sha512-FWAPzCIHZHnrE/5/w9MPk0kK25hSQSH2IKhYh9PyjS3SG/+IEMvlwIHbhz+oF7xl54I+ueZlVnMjyzdSwLmAwA==",
- "license": "MIT"
- },
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -14116,112 +10082,18 @@
"tree-kill": "cli.js"
}
},
- "node_modules/ts-deepmerge": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-6.2.0.tgz",
- "integrity": "sha512-2qxI/FZVDPbzh63GwWIZYE7daWKtwXZYuyc8YNq0iTmMUwn4mL0jRLsp6hfFlgbdRSR4x2ppe+E86FnvEpN7Nw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14.13.1"
- }
- },
"node_modules/ts-interface-checker": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
"license": "Apache-2.0"
},
- "node_modules/ts-node": {
- "version": "10.9.2",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
- "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@cspotcode/source-map-support": "^0.8.0",
- "@tsconfig/node10": "^1.0.7",
- "@tsconfig/node12": "^1.0.7",
- "@tsconfig/node14": "^1.0.0",
- "@tsconfig/node16": "^1.0.2",
- "acorn": "^8.4.1",
- "acorn-walk": "^8.1.1",
- "arg": "^4.1.0",
- "create-require": "^1.1.0",
- "diff": "^4.0.1",
- "make-error": "^1.1.1",
- "v8-compile-cache-lib": "^3.0.1",
- "yn": "3.1.1"
- },
- "bin": {
- "ts-node": "dist/bin.js",
- "ts-node-cwd": "dist/bin-cwd.js",
- "ts-node-esm": "dist/bin-esm.js",
- "ts-node-script": "dist/bin-script.js",
- "ts-node-transpile-only": "dist/bin-transpile.js",
- "ts-script": "dist/bin-script-deprecated.js"
- },
- "peerDependencies": {
- "@swc/core": ">=1.2.50",
- "@swc/wasm": ">=1.2.50",
- "@types/node": "*",
- "typescript": ">=2.7"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "@swc/wasm": {
- "optional": true
- }
- }
- },
- "node_modules/ts-node/node_modules/arg": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/ts-node/node_modules/diff": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz",
- "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.3.1"
- }
- },
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/turndown": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.1.2.tgz",
- "integrity": "sha512-ntI9R7fcUKjqBP6QU8rBK2Ehyt8LAzt3UBT9JR9tgo6GtuKvyUzpayWmeMKJw1DPdXzktvtIT8m2mVXz+bL/Qg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "domino": "^2.1.6"
- }
- },
"node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -14283,9 +10155,8 @@
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -14320,6 +10191,15 @@
"node": "*"
}
},
+ "node_modules/undici": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz",
+ "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.17"
+ }
+ },
"node_modules/undici-types": {
"version": "7.18.2",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
@@ -14366,29 +10246,6 @@
"node": ">=4"
}
},
- "node_modules/unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "crypto-random-string": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/uniwind": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/uniwind/-/uniwind-1.5.0.tgz",
@@ -14643,16 +10500,6 @@
"node": ">= 0.8"
}
},
- "node_modules/untildify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
- "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/update-browserslist-db": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
@@ -14771,13 +10618,6 @@
"uuid": "dist/bin/uuid"
}
},
- "node_modules/v8-compile-cache-lib": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
- "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/validate-npm-package-name": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
@@ -14833,6 +10673,183 @@
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc"
}
},
+ "node_modules/vaul/node_modules/@radix-ui/react-dialog": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz",
+ "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
+ "@radix-ui/react-focus-scope": "1.1.7",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-portal": "1.1.9",
+ "@radix-ui/react-presence": "1.1.5",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-slot": "1.2.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vaul/node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz",
+ "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-escape-keydown": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vaul/node_modules/@radix-ui/react-focus-scope": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz",
+ "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vaul/node_modules/@radix-ui/react-portal": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz",
+ "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vaul/node_modules/@radix-ui/react-presence": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz",
+ "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vaul/node_modules/@radix-ui/react-primitive": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz",
+ "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.2.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vaul/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/vlq": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz",
@@ -14885,11 +10902,28 @@
"webidl-conversions": "^3.0.0"
}
},
- "node_modules/whatwg-url-minimum": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/whatwg-url-minimum/-/whatwg-url-minimum-0.1.1.tgz",
- "integrity": "sha512-u2FNVjFVFZhdjb502KzXy1gKn1mEisQRJssmSJT8CPhZdZa0AP6VCbWlXERKyGu0l09t0k50FiDiralpGhBxgA==",
- "license": "MIT"
+ "node_modules/whatwg-url-without-unicode": {
+ "version": "8.0.0-3",
+ "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz",
+ "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.4.3",
+ "punycode": "^2.1.1",
+ "webidl-conversions": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/which": {
"version": "2.0.2",
@@ -14906,31 +10940,10 @@
"node": ">= 8"
}
},
- "node_modules/widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "string-width": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/wonka": {
"version": "6.3.5",
"resolved": "https://registry.npmjs.org/wonka/-/wonka-6.3.5.tgz",
"integrity": "sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
- "dev": true,
"license": "MIT"
},
"node_modules/wrap-ansi": {
@@ -14950,25 +10963,6 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -15110,14 +11104,16 @@
"node": ">=12"
}
},
- "node_modules/yn": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
- "dev": true,
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/zod": {
diff --git a/package.json b/package.json
index 44ce38a..d40da35 100644
--- a/package.json
+++ b/package.json
@@ -13,43 +13,47 @@
"eas:build:preview": "eas build --profile preview",
"eas:build:production": "eas build --profile production",
"eas:update:preview": "eas update --branch preview --message",
- "eas:update:production": "eas update --branch production --message"
+ "eas:update:production": "eas update --branch production --message",
+ "start:dev-client": "expo start --dev-client",
+ "eas:build:development:android": "eas build -p android --profile development",
+ "eas:build:development:ios": "eas build -p ios --profile development"
},
"dependencies": {
+ "@expo/vector-icons": "^15.1.1",
"@hookform/resolvers": "^5.2.2",
"@tanstack/react-query": "^5.90.21",
"cors": "^2.8.6",
- "expo": "~55.0.5",
- "expo-clipboard": "~55.0.8",
- "expo-constants": "~55.0.7",
- "expo-dev-client": "~6.0.16",
- "expo-linking": "~55.0.7",
- "expo-router": "~55.0.4",
- "expo-secure-store": "~55.0.8",
- "expo-status-bar": "~55.0.4",
- "expo-updates": "~55.0.12",
+ "expo": "~54.0.33",
+ "expo-clipboard": "~8.0.8",
+ "expo-constants": "~18.0.13",
+ "expo-dev-client": "~6.0.20",
+ "expo-font": "~14.0.11",
+ "expo-linking": "~8.0.11",
+ "expo-router": "~6.0.23",
+ "expo-secure-store": "~15.0.8",
+ "expo-status-bar": "~3.0.9",
+ "expo-updates": "~29.0.16",
"express": "^5.2.1",
"lucide-react-native": "^0.577.0",
- "react": "19.2.0",
- "react-dom": "19.2.0",
+ "react": "19.1.0",
+ "react-dom": "19.1.0",
"react-hook-form": "^7.71.2",
- "react-native": "0.83.2",
- "react-native-gesture-handler": "~2.30.0",
- "react-native-reanimated": "4.2.1",
- "react-native-safe-area-context": "~5.6.2",
- "react-native-screens": "~4.23.0",
- "react-native-svg": "15.15.3",
- "react-native-web": "^0.21.2",
- "react-native-worklets": "0.7.2",
+ "react-native": "0.81.5",
+ "react-native-gesture-handler": "~2.28.0",
+ "react-native-reanimated": "~4.1.1",
+ "react-native-safe-area-context": "~5.6.0",
+ "react-native-screens": "~4.16.0",
+ "react-native-svg": "15.12.1",
+ "react-native-web": "~0.21.0",
+ "react-native-worklets": "0.5.1",
"tailwindcss": "^4.2.1",
- "uniwind": "^1.5.0",
+ "uniwind": "^1.3.2",
"valtio": "^2.3.1",
"zod": "^4.3.6"
},
"devDependencies": {
- "@types/react": "~19.2.2",
+ "@types/react": "~19.1.0",
"concurrently": "^9.2.1",
- "eas-cli": "^18.1.0",
"typescript": "~5.9.2"
},
"private": true
diff --git a/src/components/line-trend-chart.tsx b/src/components/line-trend-chart.tsx
index 6e0dab9..9fed919 100644
--- a/src/components/line-trend-chart.tsx
+++ b/src/components/line-trend-chart.tsx
@@ -1,3 +1,4 @@
+import { useMemo } from 'react';
import { Text, View } from 'react-native';
import Svg, { Defs, LinearGradient, Path, Stop } from 'react-native-svg';
@@ -28,6 +29,10 @@ export function LineTrendChart({
const maxValue = Math.max(...points.map((point) => point.value), 1);
const minValue = Math.min(...points.map((point) => point.value), 0);
const range = Math.max(maxValue - minValue, 1);
+ const gradientId = useMemo(
+ () => `trendFill-${title.replace(/[^a-zA-Z0-9_-]/g, '')}-${compact ? 'compact' : 'full'}`,
+ [compact, title]
+ );
const line = points
.map((point, index) => {
@@ -53,18 +58,18 @@ export function LineTrendChart({
- {tickPoints.map((point) => (
-
+ {tickPoints.map((point, index) => (
+
{point.label}
))}
diff --git a/src/components/screen-shell.tsx b/src/components/screen-shell.tsx
index ed9fbc2..2f381c9 100644
--- a/src/components/screen-shell.tsx
+++ b/src/components/screen-shell.tsx
@@ -1,6 +1,6 @@
import type { PropsWithChildren, ReactNode } from 'react';
import { SafeAreaView } from 'react-native-safe-area-context';
-import { ScrollView, Text, View } from 'react-native';
+import { RefreshControl, ScrollView, Text, View } from 'react-native';
type ScreenShellProps = PropsWithChildren<{
title: string;
@@ -12,6 +12,8 @@ type ScreenShellProps = PropsWithChildren<{
bottomInsetClassName?: string;
horizontalInsetClassName?: string;
contentGapClassName?: string;
+ refreshing?: boolean;
+ onRefresh?: () => void | Promise;
}>;
function ScreenHeader({
@@ -66,6 +68,8 @@ export function ScreenShell({
bottomInsetClassName = 'pb-24',
horizontalInsetClassName = 'px-5',
contentGapClassName = 'mt-4 gap-4',
+ refreshing = false,
+ onRefresh,
}: ScreenShellProps) {
if (!scroll) {
return (
@@ -80,9 +84,15 @@ export function ScreenShell({
return (
-
-
- {children}
+ : undefined}
+ >
+
+
+ {children}
+
);
diff --git a/src/lib/admin-fetch.ts b/src/lib/admin-fetch.ts
index 18c414b..7e2ed0b 100644
--- a/src/lib/admin-fetch.ts
+++ b/src/lib/admin-fetch.ts
@@ -1,14 +1,6 @@
import { adminConfigState } from '@/src/store/admin-config';
import type { ApiEnvelope } from '@/src/types/admin';
-function isProxyBaseUrl(baseUrl: string) {
- return /localhost:8787$/.test(baseUrl) || /127\.0\.0\.1:8787$/.test(baseUrl);
-}
-
-export function isLocalProxyBaseUrl(baseUrl: string) {
- return isProxyBaseUrl(baseUrl);
-}
-
export async function adminFetch(
path: string,
init: RequestInit = {},
@@ -21,7 +13,7 @@ export async function adminFetch(
throw new Error('BASE_URL_REQUIRED');
}
- if (!adminApiKey && !isProxyBaseUrl(baseUrl)) {
+ if (!adminApiKey) {
throw new Error('ADMIN_API_KEY_REQUIRED');
}
diff --git a/src/services/admin.ts b/src/services/admin.ts
index 563373f..3255257 100644
--- a/src/services/admin.ts
+++ b/src/services/admin.ts
@@ -8,13 +8,15 @@ import type {
AdminUser,
BalanceOperation,
DashboardModelStats,
+ DashboardSnapshot,
DashboardStats,
DashboardTrend,
PaginatedData,
+ UsageStats,
UserUsageSummary,
} from '@/src/types/admin';
-function buildQuery(params: Record) {
+function buildQuery(params: Record) {
const query = new URLSearchParams();
Object.entries(params).forEach(([key, value]) => {
@@ -51,6 +53,38 @@ export function getDashboardModels(params: { start_date: string; end_date: strin
return adminFetch(`/api/v1/admin/dashboard/models${buildQuery(params)}`);
}
+export function getDashboardSnapshot(params: {
+ start_date: string;
+ end_date: string;
+ granularity?: 'day' | 'hour';
+ account_id?: number;
+ user_id?: number;
+ group_id?: number;
+ model?: string;
+ request_type?: string;
+ billing_type?: string | null;
+ include_stats?: boolean;
+ include_trend?: boolean;
+ include_model_stats?: boolean;
+ include_group_stats?: boolean;
+ include_users_trend?: boolean;
+}) {
+ return adminFetch(`/api/v1/admin/dashboard/snapshot-v2${buildQuery(params)}`);
+}
+
+export function getUsageStats(params: {
+ start_date: string;
+ end_date: string;
+ user_id?: number;
+ account_id?: number;
+ group_id?: number;
+ model?: string;
+ request_type?: string;
+ billing_type?: string | null;
+}) {
+ return adminFetch(`/api/v1/admin/usage/stats${buildQuery(params)}`);
+}
+
export function listUsers(search = '') {
return adminFetch>(
`/api/v1/admin/users${buildQuery({ page: 1, page_size: 20, search: search.trim() })}`
diff --git a/src/store/admin-config.ts b/src/store/admin-config.ts
index c85e755..153f17d 100644
--- a/src/store/admin-config.ts
+++ b/src/store/admin-config.ts
@@ -1,4 +1,5 @@
import * as SecureStore from 'expo-secure-store';
+import { Platform } from 'react-native';
const { proxy } = require('valtio');
const BASE_URL_KEY = 'sub2api_base_url';
@@ -67,39 +68,51 @@ export function getDefaultAdminConfig() {
}
async function getItem(key: string) {
- if (typeof window !== 'undefined') {
- if (typeof localStorage === 'undefined') {
- return null;
+ try {
+ if (Platform.OS === 'web') {
+ if (typeof localStorage === 'undefined') {
+ return null;
+ }
+
+ return localStorage.getItem(key);
}
- return localStorage.getItem(key);
+ return await SecureStore.getItemAsync(key);
+ } catch {
+ return null;
}
-
- return SecureStore.getItemAsync(key);
}
async function setItem(key: string, value: string) {
- if (typeof window !== 'undefined') {
- if (typeof localStorage !== 'undefined') {
- localStorage.setItem(key, value);
+ try {
+ if (Platform.OS === 'web') {
+ if (typeof localStorage !== 'undefined') {
+ localStorage.setItem(key, value);
+ }
+
+ return;
}
+ await SecureStore.setItemAsync(key, value);
+ } catch {
return;
}
-
- await SecureStore.setItemAsync(key, value);
}
async function deleteItem(key: string) {
- if (typeof window !== 'undefined') {
- if (typeof localStorage !== 'undefined') {
- localStorage.removeItem(key);
+ try {
+ if (Platform.OS === 'web') {
+ if (typeof localStorage !== 'undefined') {
+ localStorage.removeItem(key);
+ }
+
+ return;
}
+ await SecureStore.deleteItemAsync(key);
+ } catch {
return;
}
-
- await SecureStore.deleteItemAsync(key);
}
export const adminConfigState = proxy({
@@ -112,98 +125,104 @@ export const adminConfigState = proxy({
export async function hydrateAdminConfig() {
const defaults = getDefaultAdminConfig();
- const [baseUrl, adminApiKey, rawAccounts, activeAccountId] = await Promise.all([
- getItem(BASE_URL_KEY),
- getItem(ADMIN_KEY_KEY),
- getItem(ACCOUNTS_KEY),
- getItem(ACTIVE_ACCOUNT_ID_KEY),
- ]);
- let accounts: AdminAccountProfile[] = [];
+ try {
+ const [baseUrl, adminApiKey, rawAccounts, activeAccountId] = await Promise.all([
+ getItem(BASE_URL_KEY),
+ getItem(ADMIN_KEY_KEY),
+ getItem(ACCOUNTS_KEY),
+ getItem(ACTIVE_ACCOUNT_ID_KEY),
+ ]);
- if (rawAccounts) {
- try {
- const parsed = JSON.parse(rawAccounts) as AdminAccountProfile[];
- accounts = Array.isArray(parsed) ? parsed.map((account) => normalizeAccount(account)) : [];
- } catch {
- accounts = [];
+ let accounts: AdminAccountProfile[] = [];
+
+ if (rawAccounts) {
+ try {
+ const parsed = JSON.parse(rawAccounts) as AdminAccountProfile[];
+ accounts = Array.isArray(parsed) ? parsed.map((account) => normalizeAccount(account)) : [];
+ } catch {
+ accounts = [];
+ }
}
+
+ if (accounts.length === 0 && baseUrl) {
+ const legacyConfig = normalizeConfig({
+ baseUrl,
+ adminApiKey: adminApiKey ?? defaults.adminApiKey,
+ });
+
+ accounts = [
+ {
+ id: createAccountId(),
+ label: getAccountLabel(legacyConfig.baseUrl),
+ ...legacyConfig,
+ updatedAt: new Date().toISOString(),
+ enabled: true,
+ },
+ ];
+ }
+
+ const sortedAccounts = sortAccounts(accounts);
+ const activeAccount = getNextActiveAccount(sortedAccounts, activeAccountId ?? undefined);
+ const nextActiveAccountId = activeAccount?.id || '';
+
+ adminConfigState.accounts = sortedAccounts;
+ adminConfigState.activeAccountId = nextActiveAccountId;
+ adminConfigState.baseUrl = activeAccount?.baseUrl ?? defaults.baseUrl;
+ adminConfigState.adminApiKey = activeAccount?.adminApiKey ?? defaults.adminApiKey;
+
+ await Promise.all([
+ setItem(ACCOUNTS_KEY, JSON.stringify(sortedAccounts)),
+ nextActiveAccountId ? setItem(ACTIVE_ACCOUNT_ID_KEY, nextActiveAccountId) : deleteItem(ACTIVE_ACCOUNT_ID_KEY),
+ setItem(BASE_URL_KEY, activeAccount?.baseUrl ?? defaults.baseUrl),
+ setItem(ADMIN_KEY_KEY, activeAccount?.adminApiKey ?? defaults.adminApiKey),
+ ]);
+ } finally {
+ adminConfigState.hydrated = true;
}
-
- if (accounts.length === 0 && baseUrl) {
- const legacyConfig = normalizeConfig({
- baseUrl,
- adminApiKey: adminApiKey ?? defaults.adminApiKey,
- });
-
- accounts = [
- {
- id: createAccountId(),
- label: getAccountLabel(legacyConfig.baseUrl),
- ...legacyConfig,
- updatedAt: new Date().toISOString(),
- enabled: true,
- },
- ];
- }
-
- const sortedAccounts = sortAccounts(accounts);
- const activeAccount = getNextActiveAccount(sortedAccounts, activeAccountId ?? undefined);
- const nextActiveAccountId = activeAccount?.id || '';
-
- adminConfigState.accounts = sortedAccounts;
- adminConfigState.activeAccountId = nextActiveAccountId;
- adminConfigState.baseUrl = activeAccount?.baseUrl ?? defaults.baseUrl;
- adminConfigState.adminApiKey = activeAccount?.adminApiKey ?? defaults.adminApiKey;
-
- adminConfigState.hydrated = true;
-
- await Promise.all([
- setItem(ACCOUNTS_KEY, JSON.stringify(sortedAccounts)),
- nextActiveAccountId ? setItem(ACTIVE_ACCOUNT_ID_KEY, nextActiveAccountId) : deleteItem(ACTIVE_ACCOUNT_ID_KEY),
- setItem(BASE_URL_KEY, activeAccount?.baseUrl ?? defaults.baseUrl),
- setItem(ADMIN_KEY_KEY, activeAccount?.adminApiKey ?? defaults.adminApiKey),
- ]);
}
export async function saveAdminConfig(input: { baseUrl: string; adminApiKey: string }) {
adminConfigState.saving = true;
- const normalized = normalizeConfig(input);
- const nextUpdatedAt = new Date().toISOString();
- const existingAccount = adminConfigState.accounts.find(
- (account: AdminAccountProfile) => account.baseUrl === normalized.baseUrl && account.adminApiKey === normalized.adminApiKey
- );
- const nextAccount: AdminAccountProfile = existingAccount
- ? {
- ...existingAccount,
- label: getAccountLabel(normalized.baseUrl),
- updatedAt: nextUpdatedAt,
- }
- : {
- id: createAccountId(),
- label: getAccountLabel(normalized.baseUrl),
- ...normalized,
- updatedAt: nextUpdatedAt,
- enabled: true,
- };
- const nextAccounts = sortAccounts([
- nextAccount,
- ...adminConfigState.accounts.filter((account: AdminAccountProfile) => account.id !== nextAccount.id),
- ]);
+ try {
+ const normalized = normalizeConfig(input);
+ const nextUpdatedAt = new Date().toISOString();
+ const existingAccount = adminConfigState.accounts.find(
+ (account: AdminAccountProfile) => account.baseUrl === normalized.baseUrl && account.adminApiKey === normalized.adminApiKey
+ );
+ const nextAccount: AdminAccountProfile = existingAccount
+ ? {
+ ...existingAccount,
+ label: getAccountLabel(normalized.baseUrl),
+ updatedAt: nextUpdatedAt,
+ }
+ : {
+ id: createAccountId(),
+ label: getAccountLabel(normalized.baseUrl),
+ ...normalized,
+ updatedAt: nextUpdatedAt,
+ enabled: true,
+ };
+ const nextAccounts = sortAccounts([
+ nextAccount,
+ ...adminConfigState.accounts.filter((account: AdminAccountProfile) => account.id !== nextAccount.id),
+ ]);
- await Promise.all([
- setItem(BASE_URL_KEY, normalized.baseUrl),
- setItem(ADMIN_KEY_KEY, normalized.adminApiKey),
- setItem(ACCOUNTS_KEY, JSON.stringify(nextAccounts)),
- setItem(ACTIVE_ACCOUNT_ID_KEY, nextAccount.id),
- ]);
+ await Promise.all([
+ setItem(BASE_URL_KEY, normalized.baseUrl),
+ setItem(ADMIN_KEY_KEY, normalized.adminApiKey),
+ setItem(ACCOUNTS_KEY, JSON.stringify(nextAccounts)),
+ setItem(ACTIVE_ACCOUNT_ID_KEY, nextAccount.id),
+ ]);
- adminConfigState.accounts = nextAccounts;
- adminConfigState.activeAccountId = nextAccount.id;
- adminConfigState.baseUrl = normalized.baseUrl;
- adminConfigState.adminApiKey = normalized.adminApiKey;
- adminConfigState.saving = false;
+ adminConfigState.accounts = nextAccounts;
+ adminConfigState.activeAccountId = nextAccount.id;
+ adminConfigState.baseUrl = normalized.baseUrl;
+ adminConfigState.adminApiKey = normalized.adminApiKey;
+ } finally {
+ adminConfigState.saving = false;
+ }
}
export async function switchAdminAccount(accountId: string) {
diff --git a/src/types/admin.ts b/src/types/admin.ts
index f1d8fea..ae2d703 100644
--- a/src/types/admin.ts
+++ b/src/types/admin.ts
@@ -73,6 +73,30 @@ export type DashboardModelStats = {
models: ModelStat[];
};
+export type UsageStats = {
+ total_requests?: number;
+ total_tokens?: number;
+ total_input_tokens?: number;
+ total_output_tokens?: number;
+ total_cost?: number;
+ total_actual_cost?: number;
+ total_account_cost?: number;
+ average_duration_ms?: number;
+};
+
+export type DashboardSnapshot = {
+ trend?: TrendPoint[];
+ models?: ModelStat[];
+ groups?: Array<{
+ group_id?: number;
+ group_name?: string;
+ requests?: number;
+ total_tokens?: number;
+ total_cost?: number;
+ total_actual_cost?: number;
+ }>;
+};
+
export type AdminSettings = {
site_name?: string;
[key: string]: string | number | boolean | null | string[] | undefined;
@@ -88,6 +112,7 @@ export type AdminUser = {
role?: string;
current_concurrency?: number;
notes?: string | null;
+ last_used_at?: string | null;
created_at?: string;
updated_at?: string;
};