diff --git a/app/(tabs)/codex.tsx b/app/(tabs)/codex.tsx
index be1e209..4f505a6 100644
--- a/app/(tabs)/codex.tsx
+++ b/app/(tabs)/codex.tsx
@@ -15,6 +15,44 @@ import { LastUpdated } from "@/components/LastUpdated";
import { ScreenErrorBoundary } from "@/components/ScreenErrorBoundary";
import { COLORS } from "@/lib/constants";
import { windowLabel } from "@/lib/timeUtils";
+import type { CodexResetCredit } from "@/types/codex";
+
+function formatResetStatus(status?: string) {
+ if (!status) return "Unknown";
+ return status.replace(/_/g, " ").replace(/\b\w/g, (char) => char.toUpperCase());
+}
+
+function ResetCreditRow({ credit }: { credit: CodexResetCredit }) {
+ return (
+
+
+
+ Credit {credit.index}
+
+
+
+ {formatResetStatus(credit.status)}
+
+
+
+ {credit.timeUntilExpiry && (
+
+ Expires in {credit.timeUntilExpiry}
+
+ )}
+ {credit.expiresAtLocal && (
+
+ Expires {credit.expiresAtLocal}
+
+ )}
+ {credit.grantedAtLocal && (
+
+ Granted {credit.grantedAtLocal}
+
+ )}
+
+ );
+}
function CodexTabContent() {
const {
@@ -28,6 +66,9 @@ function CodexTabContent() {
clearAuth,
} =
useCodexUsage();
+ const resetCoupons = usage?.resetCoupons;
+ const availableResetCredits =
+ resetCoupons?.credits?.filter((credit) => credit.status === "available") ?? [];
return (
- {usage.plan_type}
+ {usage.planType ?? "codex"}
-
-
+ {usage.primary && (
+
+ )}
+ {usage.secondary && (
+
+ )}
{/* Credits */}
@@ -162,7 +207,7 @@ function CodexTabContent() {
Unlimited
- ) : usage.credits.has_credits ? (
+ ) : usage.credits.hasCredits ? (
${Number(usage.credits.balance).toFixed(2)} remaining
@@ -170,6 +215,47 @@ function CodexTabContent() {
No credits
)}
+
+ {resetCoupons && (
+
+
+ Reset Credits
+
+
+ {resetCoupons.availableCount ?? 0} available
+
+ {typeof resetCoupons.totalEarnedCount === "number" && (
+
+ {resetCoupons.totalEarnedCount} earned total
+
+ )}
+ {resetCoupons.nextExpiringCredit?.expiresAtLocal && (
+
+ Next expires {resetCoupons.nextExpiringCredit.expiresAtLocal}
+
+ )}
+ {resetCoupons.nextExpiringCredit?.timeUntilExpiry && (
+
+ In {resetCoupons.nextExpiringCredit.timeUntilExpiry}
+
+ )}
+ {availableResetCredits.length > 0 && (
+
+
+ Available Now
+
+ {availableResetCredits.map((credit) => (
+
+ ))}
+
+ )}
+ {resetCoupons.source !== "live_api" && (
+
+ Source: {resetCoupons.sourceDescription}
+
+ )}
+
+ )}
diff --git a/app/(tabs)/index.tsx b/app/(tabs)/index.tsx
index c4b682b..a29d099 100644
--- a/app/(tabs)/index.tsx
+++ b/app/(tabs)/index.tsx
@@ -159,17 +159,17 @@ function DashboardTabContent() {
- {codex.usage?.plan_type && (
+ {codex.usage?.planType && (
- {codex.usage.plan_type}
+ {codex.usage.planType}
)}
{codex.auth && codex.status === "error" && (
)}
- {codex.status === "success" && !codex.usage?.plan_type && (
+ {codex.status === "success" && !codex.usage?.planType && (
)}
@@ -189,22 +189,22 @@ function DashboardTabContent() {
)}
{codex.usage && (
-
-
+ {codex.usage.primary && (
+
+ )}
+ {codex.usage.secondary && (
+
+ )}
{!codex.usage.credits.unlimited &&
- codex.usage.credits.has_credits && (
+ codex.usage.credits.hasCredits && (
@@ -226,6 +226,22 @@ function DashboardTabContent() {
)}
+ {!!codex.usage.resetCoupons && (
+
+
+
+
+ {codex.usage.resetCoupons.availableCount ?? 0} reset credits
+ available
+
+
+ {!!codex.usage.resetCoupons.nextExpiringCredit?.timeUntilExpiry && (
+
+ Next expires in {codex.usage.resetCoupons.nextExpiringCredit.timeUntilExpiry}
+
+ )}
+
+ )}
diff --git a/app/(tabs)/settings.tsx b/app/(tabs)/settings.tsx
index 8aae580..f3fc121 100644
--- a/app/(tabs)/settings.tsx
+++ b/app/(tabs)/settings.tsx
@@ -35,6 +35,12 @@ import { ScreenErrorBoundary } from "@/components/ScreenErrorBoundary";
import type { CodexAuth } from "@/types/codex";
import Constants from "expo-constants";
+function humanizeImportError(code: string): string {
+ if (code === "DOCUMENT_NOT_READABLE") {
+ return "The selected file could not be read. Try copying auth.json into Files or Downloads and import it again.";
+ }
+ return code;
+}
function SettingRow({
icon,
label,
@@ -160,7 +166,7 @@ function SettingsTabContent() {
} catch (e: unknown) {
const msg = e instanceof Error ? e.message : "UNKNOWN_ERROR";
if (msg !== "PICKER_CANCELLED") {
- Alert.alert("Import failed", msg);
+ Alert.alert("Import failed", humanizeImportError(msg));
}
}
};
diff --git a/app/onboarding/codex.tsx b/app/onboarding/codex.tsx
index ae54918..6c3f50a 100644
--- a/app/onboarding/codex.tsx
+++ b/app/onboarding/codex.tsx
@@ -8,6 +8,13 @@ import { saveCodexAuth, loadCodexAuth } from "@/lib/storage";
import type { CodexAuth } from "@/types/codex";
import { COLORS } from "@/lib/constants";
+function humanizeImportError(code: string): string {
+ if (code === "DOCUMENT_NOT_READABLE") {
+ return "The selected file could not be read. Try copying auth.json into Files or Downloads and import it again.";
+ }
+ return code;
+}
+
export default function OnboardingCodexScreen() {
const [auth, setAuth] = useState(null);
const [loading, setLoading] = useState(false);
@@ -28,7 +35,7 @@ export default function OnboardingCodexScreen() {
setAuth(parsed);
} catch (e: unknown) {
const msg = e instanceof Error ? e.message : "UNKNOWN_ERROR";
- if (msg !== "PICKER_CANCELLED") setError(msg);
+ if (msg !== "PICKER_CANCELLED") setError(humanizeImportError(msg));
} finally {
setLoading(false);
}
@@ -86,7 +93,7 @@ export default function OnboardingCodexScreen() {
- Connected
+ Imported
{auth.accountId && (
{auth.accountId.slice(0, 12)}…
diff --git a/app/onboarding/done.tsx b/app/onboarding/done.tsx
index 2cbebb2..f3dee71 100644
--- a/app/onboarding/done.tsx
+++ b/app/onboarding/done.tsx
@@ -77,7 +77,7 @@ export default function OnboardingDoneScreen() {
Codex CLI
- {codexConfigured ? "Connected" : "Not configured"}
+ {codexConfigured ? "Auth imported" : "Not configured"}
@@ -105,7 +105,7 @@ export default function OnboardingDoneScreen() {
Claude.ai
- {claudeConfigured ? "Connected" : "Not configured"}
+ {claudeConfigured ? "Session saved" : "Not configured"}
diff --git a/components/ErrorMessage.tsx b/components/ErrorMessage.tsx
index 867a2af..14e2639 100644
--- a/components/ErrorMessage.tsx
+++ b/components/ErrorMessage.tsx
@@ -4,6 +4,8 @@ const ERROR_MESSAGES: Record = {
TOKEN_EXPIRED: "Your session token has expired. Please reconfigure.",
MISSING_ACCESS_TOKEN: "auth.json is missing the accessToken field.",
INVALID_JSON: "The selected file is not valid JSON.",
+ DOCUMENT_NOT_READABLE:
+ "The selected file could not be read. Try copying auth.json into Files or Downloads and import it again.",
NO_ORGS_FOUND: "No Claude organizations found for this session key.",
INVALID_CODEX_RESPONSE:
"Codex returned an unexpected response. The app was kept safe from invalid data.",
diff --git a/hooks/useCodexUsage.ts b/hooks/useCodexUsage.ts
index 9644ae7..d359162 100644
--- a/hooks/useCodexUsage.ts
+++ b/hooks/useCodexUsage.ts
@@ -19,10 +19,7 @@ type Status = "idle" | "loading" | "success" | "error";
function shouldRetry(error: unknown): boolean {
const message = error instanceof Error ? error.message : "";
- return (
- message !== "TOKEN_EXPIRED" &&
- message !== "INVALID_CODEX_RESPONSE"
- );
+ return message !== "TOKEN_EXPIRED" && message !== "INVALID_CODEX_RESPONSE";
}
function wait(ms: number): Promise {
@@ -82,14 +79,6 @@ export function useCodexUsage() {
} catch (caught: unknown) {
if (version !== requestVersion.current) return;
const message = caught instanceof Error ? caught.message : "UNKNOWN_ERROR";
- if (message === "TOKEN_EXPIRED") {
- await clearCodexAuth();
- if (mounted.current) {
- setAuth(null);
- setUsage(null);
- setLastFetchedAt(null);
- }
- }
if (mounted.current) {
setError(message);
setStatus("error");
diff --git a/lib/api/codexApi.ts b/lib/api/codexApi.ts
index 79ef483..0ed5c01 100644
--- a/lib/api/codexApi.ts
+++ b/lib/api/codexApi.ts
@@ -1,66 +1,86 @@
import type { CodexAuth, CodexUsageResponse } from "@/types/codex";
const USAGE_URL = "https://chatgpt.com/backend-api/wham/usage";
+const RESET_CREDITS_URL =
+ "https://chatgpt.com/backend-api/wham/rate-limit-reset-credits";
+
+interface RawUsageWindow {
+ used_percent?: number;
+ limit_window_seconds?: number;
+ reset_at?: number;
+}
+
+interface RawUsageResponse {
+ plan_type?: string | null;
+ rate_limit?: {
+ primary_window?: RawUsageWindow | null;
+ secondary_window?: RawUsageWindow | null;
+ } | null;
+ credits?: {
+ has_credits?: boolean;
+ unlimited?: boolean;
+ balance?: string | number;
+ } | null;
+ rate_limit_reached_type?: string | null;
+ rate_limit_reset_credits?: {
+ available_count?: number | null;
+ } | null;
+}
+
+interface RawResetCredit {
+ status?: string;
+ granted_at?: string | null;
+ expires_at?: string | null;
+}
+
+interface RawResetCreditsResponse {
+ available_count?: number | null;
+ total_earned_count?: number | null;
+ credits?: RawResetCredit[] | null;
+}
function isNumber(value: unknown): value is number {
return typeof value === "number" && Number.isFinite(value);
}
-export function parseCodexUsageResponse(data: unknown): CodexUsageResponse {
- if (!data || typeof data !== "object") {
- throw new Error("INVALID_CODEX_RESPONSE");
- }
+function formatDurationUntil(isoString: string | null | undefined): string | null {
+ if (!isoString) return null;
- const value = data as Record;
- const rateLimit = value.rate_limit as Record | undefined;
- const primary = rateLimit?.primary_window as Record | undefined;
- const secondary = rateLimit?.secondary_window as Record | undefined;
- const credits = value.credits as Record | undefined;
+ const targetMs = new Date(isoString).getTime();
+ if (Number.isNaN(targetMs)) return null;
- const validWindow = (window: Record | undefined) =>
- !!window &&
- isNumber(window.used_percent) &&
- isNumber(window.reset_at) &&
- isNumber(window.limit_window_seconds);
+ let remainingSeconds = Math.max(Math.round((targetMs - Date.now()) / 1000), 0);
+ const days = Math.floor(remainingSeconds / 86400);
+ remainingSeconds -= days * 86400;
+ const hours = Math.floor(remainingSeconds / 3600);
+ remainingSeconds -= hours * 3600;
+ const minutes = Math.floor(remainingSeconds / 60);
+ remainingSeconds -= minutes * 60;
- if (
- typeof value.plan_type !== "string" ||
- !validWindow(primary) ||
- !validWindow(secondary) ||
- !credits ||
- typeof credits.has_credits !== "boolean" ||
- typeof credits.unlimited !== "boolean" ||
- !isNumber(credits.balance)
- ) {
- throw new Error("INVALID_CODEX_RESPONSE");
- }
+ const parts: string[] = [];
+ if (days > 0) parts.push(`${days}d`);
+ if (hours > 0) parts.push(`${hours}h`);
+ if (minutes > 0) parts.push(`${minutes}m`);
+ if (remainingSeconds > 0 || parts.length === 0) parts.push(`${remainingSeconds}s`);
+ return parts.join(" ");
+}
- const primaryWindow = primary as Record;
- const secondaryWindow = secondary as Record;
+function normalizeWindow(window: RawUsageWindow | null | undefined) {
+ if (!window) return null;
+
+ const windowSeconds =
+ typeof window.limit_window_seconds === "number" ? window.limit_window_seconds : 0;
+ const resetsAt = typeof window.reset_at === "number" ? window.reset_at : 0;
return {
- plan_type: value.plan_type,
- rate_limit: {
- primary_window: {
- used_percent: primaryWindow.used_percent as number,
- reset_at: primaryWindow.reset_at as number,
- limit_window_seconds: primaryWindow.limit_window_seconds as number,
- },
- secondary_window: {
- used_percent: secondaryWindow.used_percent as number,
- reset_at: secondaryWindow.reset_at as number,
- limit_window_seconds: secondaryWindow.limit_window_seconds as number,
- },
- },
- credits: {
- has_credits: credits.has_credits,
- unlimited: credits.unlimited,
- balance: credits.balance,
- },
+ usedPercent: typeof window.used_percent === "number" ? window.used_percent : 0,
+ resetsAt,
+ windowMinutes: Math.round(windowSeconds / 60),
+ windowSeconds,
};
}
-export async function fetchCodexUsage(auth: CodexAuth): Promise {
+function buildBaseHeaders(auth: CodexAuth): Record {
const headers: Record = {
Authorization: `Bearer ${auth.accessToken}`,
"Content-Type": "application/json",
@@ -70,6 +90,103 @@ export async function fetchCodexUsage(auth: CodexAuth): Promise ({
+ index: index + 1,
+ status: credit.status,
+ grantedAt: credit.granted_at ?? null,
+ grantedAtLocal: credit.granted_at
+ ? new Date(credit.granted_at).toLocaleString()
+ : null,
+ expiresAt: credit.expires_at ?? null,
+ expiresAtLocal: credit.expires_at
+ ? new Date(credit.expires_at).toLocaleString()
+ : null,
+ timeUntilExpiry: formatDurationUntil(credit.expires_at),
+ }))
+ .sort((a, b) => {
+ const left = a.expiresAt ? new Date(a.expiresAt).getTime() : Number.MAX_SAFE_INTEGER;
+ const right = b.expiresAt ? new Date(b.expiresAt).getTime() : Number.MAX_SAFE_INTEGER;
+ return left - right;
+ });
+
+ const availableCredits = normalizedCredits.filter(
+ (credit) => credit.status === "available"
+ );
+
+ return {
+ source: "live_api" as const,
+ sourceDescription: "Live Codex reset-credit endpoint",
+ availableCount:
+ payload.available_count ?? usage.rate_limit_reset_credits?.available_count ?? null,
+ totalEarnedCount: payload.total_earned_count ?? null,
+ credits: normalizedCredits,
+ nextExpiringCredit: availableCredits[0] ?? normalizedCredits[0] ?? null,
+ };
+ } catch (error) {
+ const message = error instanceof Error ? error.message : "UNKNOWN_ERROR";
+ return {
+ source: "unavailable" as const,
+ sourceDescription: "Reset-credit endpoint unavailable",
+ availableCount: usage.rate_limit_reset_credits?.available_count ?? null,
+ fallbackReason: message,
+ error: message,
+ };
+ }
+}
+
+export function parseCodexUsageResponse(data: unknown): CodexUsageResponse {
+ if (!data || typeof data !== "object") {
+ throw new Error("INVALID_CODEX_RESPONSE");
+ }
+
+ const value = data as Record;
+ const primary = value.primary as Record | null | undefined;
+ const secondary = value.secondary as Record | null | undefined;
+ const credits = value.credits as Record | undefined;
+
+ const validWindow = (window: Record | null | undefined) =>
+ window === null ||
+ window === undefined ||
+ (isNumber(window.usedPercent) &&
+ isNumber(window.resetsAt) &&
+ isNumber(window.windowMinutes) &&
+ isNumber(window.windowSeconds));
+
+ if (
+ !validWindow(primary) ||
+ !validWindow(secondary) ||
+ !credits ||
+ typeof credits.hasCredits !== "boolean" ||
+ typeof credits.unlimited !== "boolean" ||
+ !isNumber(credits.balance)
+ ) {
+ throw new Error("INVALID_CODEX_RESPONSE");
+ }
+
+ return value as unknown as CodexUsageResponse;
+}
+
+export async function fetchCodexUsage(auth: CodexAuth): Promise {
+ const headers = buildBaseHeaders(auth);
const response = await fetch(USAGE_URL, { headers });
if (response.status === 401 || response.status === 403) {
@@ -80,6 +197,19 @@ export async function fetchCodexUsage(auth: CodexAuth): Promise {
+ try {
+ const response = await fetch(uri);
+ if (!response.ok) {
+ throw new Error(`HTTP_ERROR_${response.status}`);
+ }
+ return await response.text();
+ } catch {
+ try {
+ return await LegacyFileSystem.readAsStringAsync(uri);
+ } catch {
+ const cacheDirectory = LegacyFileSystem.cacheDirectory;
+ if (!cacheDirectory) {
+ throw new Error("DOCUMENT_NOT_READABLE");
+ }
+
+ const destination = `${cacheDirectory}${Date.now()}-${sanitizeFileName(
+ fileName ?? "import.json"
+ )}`;
+
+ try {
+ await LegacyFileSystem.copyAsync({ from: uri, to: destination });
+ return await LegacyFileSystem.readAsStringAsync(destination);
+ } catch {
+ throw new Error("DOCUMENT_NOT_READABLE");
+ }
+ }
+ }
+}
+
export async function pickAndReadCodexAuth(): Promise {
const result = await DocumentPicker.getDocumentAsync({
type: "application/json",
@@ -9,9 +44,8 @@ export async function pickAndReadCodexAuth(): Promise {
if (result.canceled) throw new Error("PICKER_CANCELLED");
- const { uri } = result.assets[0];
- const response = await fetch(uri);
- const text = await response.text();
+ const { uri, name } = result.assets[0];
+ const text = await readPickedTextFile(uri, name);
let parsed: Record;
try {
@@ -22,7 +56,11 @@ export async function pickAndReadCodexAuth(): Promise {
const tokens = parsed["tokens"] as Record | undefined;
const accessToken = (tokens?.["access_token"] ?? parsed["accessToken"]) as string | undefined;
- const accountId = (tokens?.["account_id"] ?? parsed["accountId"]) as string | undefined;
+ const accountId = (
+ tokens?.["account_id"] ??
+ parsed["accountId"] ??
+ parsed["account_id"]
+ ) as string | undefined;
if (!accessToken || typeof accessToken !== "string") {
throw new Error("MISSING_ACCESS_TOKEN");
diff --git a/lib/notifications.ts b/lib/notifications.ts
index 82dcfd6..29f6358 100644
--- a/lib/notifications.ts
+++ b/lib/notifications.ts
@@ -56,7 +56,7 @@ export async function scheduleDailyDigest(
}
if (codexUsage) {
parts.push(
- `Codex: ${Math.round(codexUsage.rate_limit.secondary_window.used_percent)}% used`
+ `Codex: ${Math.round(codexUsage.secondary?.usedPercent ?? 0)}% used`
);
}
@@ -106,7 +106,7 @@ function buildThresholdAlerts(
}
if (codexUsage) {
- const remaining = 100 - codexUsage.rate_limit.secondary_window.used_percent;
+ const remaining = 100 - (codexUsage.secondary?.usedPercent ?? 0);
if (remaining <= thresholdPct) {
alerts.push({ service: "Codex", window: "weekly", remaining });
}
diff --git a/package-lock.json b/package-lock.json
index d4f4b3b..0a57e3e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,14 +11,14 @@
"@expo/metro-runtime": "~56.0.15",
"@expo/vector-icons": "^15.1.1",
"babel-preset-expo": "~56.0.0",
- "expo": "~56.0.12",
- "expo-constants": "~56.0.18",
+ "expo": "~56.0.14",
+ "expo-constants": "~56.0.20",
"expo-document-picker": "~56.0.4",
"expo-file-system": "~56.0.8",
"expo-font": "~56.0.7",
- "expo-linking": "~56.0.14",
- "expo-notifications": "~56.0.18",
- "expo-router": "~56.2.11",
+ "expo-linking": "~56.0.15",
+ "expo-notifications": "~56.0.19",
+ "expo-router": "~56.2.13",
"expo-secure-store": "~56.0.4",
"expo-splash-screen": "~56.0.10",
"expo-status-bar": "~56.0.4",
@@ -85,6 +85,7 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
"integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.29.7",
"@babel/generator": "^7.29.7",
@@ -969,7 +970,6 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz",
"integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.29.7"
},
@@ -985,7 +985,6 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz",
"integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.29.7"
},
@@ -1017,7 +1016,6 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz",
"integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.29.7"
},
@@ -1211,15 +1209,15 @@
}
},
"node_modules/@expo/config": {
- "version": "56.0.9",
- "resolved": "https://registry.npmjs.org/@expo/config/-/config-56.0.9.tgz",
- "integrity": "sha512-/lqFeWGSrhpKJVP8tTN8LjuoIe8u8q2w7FzBL0C+wHgl+WM8l1qUIEYWy/sMvsG/NbpUIUsDHJRhQvOkU58eIw==",
+ "version": "56.0.11",
+ "resolved": "https://registry.npmjs.org/@expo/config/-/config-56.0.11.tgz",
+ "integrity": "sha512-Rt3U9Rqr6midz/sDeubFN5fefR0KzHpcEEgAUnV98XsLSSTnfzIxoC1blICb7pUUscKc8TtlVyn7/Gita2wnOQ==",
"license": "MIT",
"dependencies": {
- "@expo/config-plugins": "~56.0.8",
- "@expo/config-types": "^56.0.5",
+ "@expo/config-plugins": "~56.0.11",
+ "@expo/config-types": "^56.0.7",
"@expo/json-file": "^10.2.0",
- "@expo/require-utils": "^56.1.3",
+ "@expo/require-utils": "^56.1.4",
"deepmerge": "^4.3.1",
"getenv": "^2.0.0",
"glob": "^13.0.0",
@@ -1229,15 +1227,15 @@
}
},
"node_modules/@expo/config-plugins": {
- "version": "56.0.9",
- "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-56.0.9.tgz",
- "integrity": "sha512-/6a/S9USwx8OC9tGjHxbviLFiBHyueN3aoNWMLvWDEJoZ1CIVW800ZBzwXq/FYNK2qzcN1LxFmQtzD1zeFQKNA==",
+ "version": "56.0.11",
+ "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-56.0.11.tgz",
+ "integrity": "sha512-be/FpnTUCY0Qt6OH9qFknj9/R7v0OW0Tsxkf/V0CkXuhHjZtL3J8N4kZhhDj5KiHnw7lkbtMvgxGnCHqieF/7g==",
"license": "MIT",
"dependencies": {
- "@expo/config-types": "^56.0.6",
+ "@expo/config-types": "^56.0.7",
"@expo/json-file": "~10.2.0",
"@expo/plist": "^0.7.0",
- "@expo/require-utils": "^56.1.3",
+ "@expo/require-utils": "^56.1.4",
"@expo/sdk-runtime-versions": "^1.0.0",
"chalk": "^4.1.2",
"debug": "^4.3.5",
@@ -1250,9 +1248,9 @@
}
},
"node_modules/@expo/config-types": {
- "version": "56.0.6",
- "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-56.0.6.tgz",
- "integrity": "sha512-4Y6Aum5J4Re5NnxGVofRNe1aDwUBOmWhQYkynZsqzRtX/zEA1ADUeyHXuEckv9YD9djiyT7bKtLt5gKL3mA6VQ==",
+ "version": "56.0.7",
+ "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-56.0.7.tgz",
+ "integrity": "sha512-V7bxawNsNned/yMppAHdisIOxniZXgPKRWpIUiQOQBs45/A5MBd2gfDM4Ecq5gnbilnQUTaI6Zxn6JcW7L3TAA==",
"license": "MIT"
},
"node_modules/@expo/devcert": {
@@ -1296,9 +1294,9 @@
}
},
"node_modules/@expo/dom-webview": {
- "version": "56.0.5",
- "resolved": "https://registry.npmjs.org/@expo/dom-webview/-/dom-webview-56.0.5.tgz",
- "integrity": "sha512-UIEJxkLg6cHqofKrpWpkn9E6ApxVRtCgZhZkARPr9VV7rBVloJgeroTHs31YgU/JpbI5lLQOnfOlGo54W6C2Ew==",
+ "version": "56.0.6",
+ "resolved": "https://registry.npmjs.org/@expo/dom-webview/-/dom-webview-56.0.6.tgz",
+ "integrity": "sha512-DQY3Tj5nrPbpIfEQiD9xbyEFTu25yEORa02Eyzl5rXszDzxDT4VkZDHkyErNQOyE1qjublJHNFhE5bDm4tRfqA==",
"license": "MIT",
"peerDependencies": {
"expo": "*",
@@ -1307,9 +1305,9 @@
}
},
"node_modules/@expo/env": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.3.0.tgz",
- "integrity": "sha512-9HnnIbzwTTdbwSjNLXTk0fPm9ZwMJ7c1/31tsni8HZ8Q62KzYCyspahH+V365vg5J6lr001DzNwBxVWSaYCQLg==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.3.1.tgz",
+ "integrity": "sha512-JvBdZa5OkTd+dGEtt3fLW9OF6RlIp9SNu9VyMSiWPV5szMDTSAYbX8Uj3cRvZcU1zzaRbqnTSsHk2AE8WXHfxQ==",
"license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
@@ -1327,12 +1325,12 @@
"license": "MIT"
},
"node_modules/@expo/fingerprint": {
- "version": "0.19.4",
- "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.19.4.tgz",
- "integrity": "sha512-PsowRlO8+S7JlO8go7yhNEXp7sqlsWDE2AlCwoss7zH0dcajXFo74Fy0KdXEc4UXK7kKoHD37oDgsZ8aHSLr7A==",
+ "version": "0.19.6",
+ "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.19.6.tgz",
+ "integrity": "sha512-qNcb/8aDVi1QeQzS6bSkKU/7vld8WUSHYZnZbOtJx98BroztcN50yoj7PZ3ccuMB7PUHsWNAHJVM94VvDWnPPw==",
"license": "MIT",
"dependencies": {
- "@expo/env": "^2.3.0",
+ "@expo/env": "^2.3.1",
"@expo/spawn-async": "^1.8.0",
"arg": "^5.0.2",
"chalk": "^4.1.2",
@@ -1349,12 +1347,12 @@
}
},
"node_modules/@expo/image-utils": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.10.1.tgz",
- "integrity": "sha512-YDeefvmYdihS7Wp3ESDUVnOgOSWmj2Cczm9lVNDdm4MqQLdAKm/LPYg83HtFQPfefRlAxyHrQR/O9kIXN9C1Wg==",
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.10.2.tgz",
+ "integrity": "sha512-qQUGaacqXduoFTCUQAMceIWYzlKU0xX4/BKTyh8TdVj0uHv9/W3MfHOy5yXoOqBVrSccXk++Gm4D/NfS5HnCNA==",
"license": "MIT",
"dependencies": {
- "@expo/require-utils": "^56.1.3",
+ "@expo/require-utils": "^56.1.4",
"@expo/spawn-async": "^1.8.0",
"chalk": "^4.0.0",
"getenv": "^2.0.0",
@@ -1364,12 +1362,12 @@
}
},
"node_modules/@expo/inline-modules": {
- "version": "0.0.12",
- "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.0.12.tgz",
- "integrity": "sha512-SNIZr/HWfIQPTZBwmukItxpc7ws1SgMUywYq1dnQvDknQDjJcuWAasIRFUjsK15yQ1xb4G5CP7VHtbN3V4lENg==",
+ "version": "0.0.13",
+ "resolved": "https://registry.npmjs.org/@expo/inline-modules/-/inline-modules-0.0.13.tgz",
+ "integrity": "sha512-26RllWesRmYsAAo70cRcR9DaqXPKJct9MIGxZteS+Tkg25ljOkFeG7fYEsSazZOLpAslKBiilqtZykVYrxSzCw==",
"license": "MIT",
"dependencies": {
- "@expo/config-plugins": "~56.0.9"
+ "@expo/config-plugins": "~56.0.11"
}
},
"node_modules/@expo/json-file": {
@@ -1383,27 +1381,27 @@
}
},
"node_modules/@expo/local-build-cache-provider": {
- "version": "56.0.8",
- "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-56.0.8.tgz",
- "integrity": "sha512-UsuXwpNi57MNhzZ3be4XThc8xW6nzk3Wu37s1+2qcfZGeJcMLKDFfwO6n8YXeIiGlCsOi0Ee1rsTdgjrKt/YJQ==",
+ "version": "56.0.9",
+ "resolved": "https://registry.npmjs.org/@expo/local-build-cache-provider/-/local-build-cache-provider-56.0.9.tgz",
+ "integrity": "sha512-VMJC5ul7dXPfD2OO16ObPi6ym4H8vlnCBUuCM/KeKh0OvLRub35X8OB2uYrFQ+vbWkPemAEOWvk0oOptpPxbzA==",
"license": "MIT",
"dependencies": {
- "@expo/config": "~56.0.9",
+ "@expo/config": "~56.0.11",
"chalk": "^4.1.2"
}
},
"node_modules/@expo/log-box": {
- "version": "56.0.13",
- "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-56.0.13.tgz",
- "integrity": "sha512-QWRZSpWPyjkDLVQio4R7oAzg/Av2MOt/DciFkfjr8qQ3qxGVn1Rt1oHP/80hvcWDcHFV7N6PqpyxRXw6nbxzKQ==",
+ "version": "56.0.14",
+ "resolved": "https://registry.npmjs.org/@expo/log-box/-/log-box-56.0.14.tgz",
+ "integrity": "sha512-3Eadcxz0J2NESG2iKe8DnAggsRCWqY0mBLhgQPNzClPVjS6o4NyD0F8kuOvWNngFwpJBC08HhY2o8P1mgSgeJg==",
"license": "MIT",
"dependencies": {
- "@expo/dom-webview": "^56.0.5",
+ "@expo/dom-webview": "^56.0.6",
"anser": "^1.4.9",
"stacktrace-parser": "^0.1.10"
},
"peerDependencies": {
- "@expo/dom-webview": "^56.0.5",
+ "@expo/dom-webview": "^56.0.6",
"expo": "*",
"react": "*",
"react-native": "*"
@@ -1431,6 +1429,72 @@
"metro-transform-worker": "0.84.4"
}
},
+ "node_modules/@expo/metro-config": {
+ "version": "56.0.16",
+ "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-56.0.16.tgz",
+ "integrity": "sha512-mxPZ23exC6kkEpPYQOteamaiWYER3uDk2IqKys7EJwtIKc3F1207Xtsdko/DNNG04DLwpN/WM2UlNl+Ak8uPRg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.20.0",
+ "@babel/core": "^7.20.0",
+ "@babel/generator": "^7.20.5",
+ "@expo/config": "~56.0.11",
+ "@expo/env": "~2.3.1",
+ "@expo/json-file": "~10.2.0",
+ "@expo/metro": "~56.0.0",
+ "@expo/require-utils": "^56.1.4",
+ "@expo/spawn-async": "^1.8.0",
+ "@jridgewell/gen-mapping": "^0.3.13",
+ "@jridgewell/remapping": "^2.3.5",
+ "@jridgewell/sourcemap-codec": "^1.5.5",
+ "browserslist": "^4.25.0",
+ "chalk": "^4.1.0",
+ "debug": "^4.3.2",
+ "getenv": "^2.0.0",
+ "glob": "^13.0.0",
+ "hermes-parser": "^0.33.3",
+ "jsc-safe-url": "^0.2.4",
+ "lightningcss": "^1.30.1",
+ "picomatch": "^4.0.4",
+ "postcss": "^8.5.14",
+ "resolve-from": "^5.0.0"
+ },
+ "peerDependencies": {
+ "expo": "*"
+ },
+ "peerDependenciesMeta": {
+ "expo": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@expo/metro-config/node_modules/hermes-estree": {
+ "version": "0.33.3",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz",
+ "integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==",
+ "license": "MIT"
+ },
+ "node_modules/@expo/metro-config/node_modules/hermes-parser": {
+ "version": "0.33.3",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz",
+ "integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==",
+ "license": "MIT",
+ "dependencies": {
+ "hermes-estree": "0.33.3"
+ }
+ },
+ "node_modules/@expo/metro-config/node_modules/picomatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/@expo/metro-file-map": {
"version": "56.0.3",
"resolved": "https://registry.npmjs.org/@expo/metro-file-map/-/metro-file-map-56.0.3.tgz",
@@ -1446,19 +1510,19 @@
}
},
"node_modules/@expo/metro-runtime": {
- "version": "56.0.15",
- "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-56.0.15.tgz",
- "integrity": "sha512-WIWeVsL6kCSB57oYZdUA4MTkH7c67UFMIjdNoQzKXwxZYwBFE/xL2cGPDC3z8RWt0femzJTVxAVZUOW/hiqRzA==",
+ "version": "56.0.16",
+ "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-56.0.16.tgz",
+ "integrity": "sha512-UsKrBLOCa+kAVHW1S0HdGkM0hkiQXeh3fZIpjcriOmoNg/CVRgdKQhUxUkNoXAoPfT85uW1x2fzNbiYhPQO1SA==",
"license": "MIT",
"dependencies": {
- "@expo/log-box": "^56.0.13",
+ "@expo/log-box": "^56.0.14",
"anser": "^1.4.9",
"pretty-format": "^29.7.0",
"stacktrace-parser": "^0.1.10",
"whatwg-fetch": "^3.0.0"
},
"peerDependencies": {
- "@expo/log-box": "^56.0.13",
+ "@expo/log-box": "^56.0.14",
"expo": "*",
"react": "*",
"react-dom": "*",
@@ -1471,9 +1535,9 @@
}
},
"node_modules/@expo/osascript": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.6.0.tgz",
- "integrity": "sha512-QvqDBlJXa8CS2vRORJ4wEflY1m0vVI07uSJdIRgBrLxRPBcsrXxrtU7+wXRXMqfq9zLwNP9XbvRsXF2omoDylg==",
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.7.0.tgz",
+ "integrity": "sha512-wKIXL8UtbuX4KwavPasIW3CUcgTbYfjzLcgUhjyKUAYDEqMaf6gmU1bqz3ffBPTokmX+G8/vFG1ZuI9etQWukA==",
"license": "MIT",
"dependencies": {
"@expo/spawn-async": "^1.8.0"
@@ -1483,12 +1547,12 @@
}
},
"node_modules/@expo/package-manager": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.12.1.tgz",
- "integrity": "sha512-fQLiFAcFRWF53mtuLK32SUJQ1ahhrTcBZPZPedYTiUT5ha5FF+UO6bPtCc0Y/hgj0/m3HCGBAuSHjbg2kI9oPQ==",
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.13.0.tgz",
+ "integrity": "sha512-s3W3eZafJDEyVL7W/jxj2Nz3eONKxSCU604S5xj8ijrVaRz83x0DnZznLf/UXQEI1w+FyibH68nHeQyk767b1A==",
"license": "MIT",
"dependencies": {
- "@expo/json-file": "^10.2.0",
+ "@expo/json-file": "^11.0.0",
"@expo/spawn-async": "^1.8.0",
"chalk": "^4.0.0",
"npm-package-arg": "^11.0.0",
@@ -1496,6 +1560,16 @@
"resolve-workspace-root": "^2.0.0"
}
},
+ "node_modules/@expo/package-manager/node_modules/@expo/json-file": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-11.0.0.tgz",
+ "integrity": "sha512-pHJCETqFL5x5BzNV6cEPwjwuECgGmnl0bNmfHIJ6LM1tlh2eVXi5HEdit3zby/JO/B8Otk5cgcqtJXgvvUat3A==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.20.0",
+ "json5": "^2.2.3"
+ }
+ },
"node_modules/@expo/plist": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.7.0.tgz",
@@ -1508,27 +1582,27 @@
}
},
"node_modules/@expo/prebuild-config": {
- "version": "56.0.16",
- "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-56.0.16.tgz",
- "integrity": "sha512-ce9ENfPWO4WUWUVQz0OaqL3KYZ7YofP8O35ncnn7CHCaKwQ7BqxcCGJbh+qvP1UjlWeNB3CjHPrXXJ3bnZwlJw==",
+ "version": "56.0.18",
+ "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-56.0.18.tgz",
+ "integrity": "sha512-OnzuPMVUWbj8x5XeYkzxW4X36AUGkp1Kif2h9FrcyXNT67NoWOgxeTB8udQBBA1uodR+wcf8Hxz8H5TgIpp4ig==",
"license": "MIT",
"dependencies": {
- "@expo/config": "~56.0.9",
- "@expo/config-plugins": "~56.0.9",
- "@expo/config-types": "^56.0.6",
- "@expo/image-utils": "^0.10.1",
+ "@expo/config": "~56.0.11",
+ "@expo/config-plugins": "~56.0.11",
+ "@expo/config-types": "^56.0.7",
+ "@expo/image-utils": "^0.10.2",
"@expo/json-file": "^10.2.0",
"@react-native/normalize-colors": "0.85.3",
"debug": "^4.3.1",
- "expo-modules-autolinking": "~56.0.16",
+ "expo-modules-autolinking": "~56.0.18",
"resolve-from": "^5.0.0",
"semver": "^7.6.0"
}
},
"node_modules/@expo/require-utils": {
- "version": "56.1.3",
- "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-56.1.3.tgz",
- "integrity": "sha512-KyLeOn/zzQSvuPpV5YhB/FPKnpQytno4luN918bGdPDssLBoS3N/0UbC3W0rJAn9kSFu+XpfR81eABRVsSdfgQ==",
+ "version": "56.1.4",
+ "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-56.1.4.tgz",
+ "integrity": "sha512-IX7XXg9obnrH3ni0TClBbVKgqk0nT0bjTEPTBtbD+WgIeZ0hpcgwxMJH3j5uBsUqEAq1jqUAkJWrPcg7ZRSV7g==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.20.0",
@@ -1545,9 +1619,9 @@
}
},
"node_modules/@expo/schema-utils": {
- "version": "56.0.1",
- "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-56.0.1.tgz",
- "integrity": "sha512-CZ/+mYbQmWeOnkCGlWy9K+lFxbJSMFY7+TqBZcKzBSTU5Q7IGRvn/sOG3TdNjIdLPmbA8xe7R/c3UUQ28R9i9w==",
+ "version": "56.0.2",
+ "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-56.0.2.tgz",
+ "integrity": "sha512-WcOH1E6rwxRqNwBzPOVhd5GBbMlS04+5n+ZMdhdwKOg/Kt3suV+F8F6An+z8mUJ8eSuMM3HD9Sj09t7vc/Xjkw==",
"license": "MIT"
},
"node_modules/@expo/sdk-runtime-versions": {
@@ -1574,6 +1648,35 @@
"integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==",
"license": "MIT"
},
+ "node_modules/@expo/ui": {
+ "version": "56.0.20",
+ "resolved": "https://registry.npmjs.org/@expo/ui/-/ui-56.0.20.tgz",
+ "integrity": "sha512-GdQ0tE4YhI/Ij0Nl/NHoul0GC0N4riRN0d7gE+1mSOLykVtHsR19eD3MUWr6PwQZCC45uUxviSJ9c3hOztswPw==",
+ "license": "MIT",
+ "dependencies": {
+ "sf-symbols-typescript": "^2.1.0",
+ "vaul": "^1.1.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "*",
+ "expo": "*",
+ "react": "*",
+ "react-dom": "*",
+ "react-native": "*",
+ "react-native-worklets": "*"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "react-native-worklets": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@expo/vector-icons": {
"version": "15.1.1",
"resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-15.1.1.tgz",
@@ -1734,14 +1837,14 @@
"license": "MIT"
},
"node_modules/@radix-ui/react-collection": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.10.tgz",
- "integrity": "sha512-IVVz4EvBcKjrzKgof714qDnz/SzQAkLA2Emh5edlHbgcE6fNd3Un6CJLlaYcnm8N4JmAtzQgse4dOKxcD2yc9g==",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.11.tgz",
+ "integrity": "sha512-djW9+zeg137KQdlPtmE8xnaD+K2rcXXMWFrSg0hsmYZ6HRbdTA7tDHFgpaW9+huWVEu0RCabL+985T4TA0BE7g==",
"license": "MIT",
"dependencies": {
"@radix-ui/react-compose-refs": "1.1.3",
"@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-primitive": "2.1.6",
+ "@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-slot": "1.3.0"
},
"peerDependencies": {
@@ -1790,21 +1893,21 @@
}
},
"node_modules/@radix-ui/react-dialog": {
- "version": "1.1.17",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.17.tgz",
- "integrity": "sha512-TDTYmpdq8dI2+Xgvgj9AJ8Ghqq+Eph/TRVEdaFQPDItIY+6QSkU7MJMeevw1568Yw/2Ijz8BTphPSP2XejKphw==",
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.18.tgz",
+ "integrity": "sha512-apa28mldjMgORmE6g/w3sCcA0Y9UAVeeDVoozN4i7kOw12mLl9RBchfzK3Nn6qxOWjrZhK1Lfy7f07kyzxtnBw==",
"license": "MIT",
"dependencies": {
"@radix-ui/primitive": "1.1.4",
"@radix-ui/react-compose-refs": "1.1.3",
"@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-dismissable-layer": "1.1.13",
+ "@radix-ui/react-dismissable-layer": "1.1.14",
"@radix-ui/react-focus-guards": "1.1.4",
- "@radix-ui/react-focus-scope": "1.1.10",
+ "@radix-ui/react-focus-scope": "1.1.11",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-portal": "1.1.12",
+ "@radix-ui/react-portal": "1.1.13",
"@radix-ui/react-presence": "1.1.6",
- "@radix-ui/react-primitive": "2.1.6",
+ "@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-slot": "1.3.0",
"@radix-ui/react-use-controllable-state": "1.2.3",
"aria-hidden": "^1.2.4",
@@ -1841,16 +1944,16 @@
}
},
"node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.13.tgz",
- "integrity": "sha512-2v+zNAWWe0ySxgC0D0yeXMPQ23xZVgXZTerTz+JKlmdRj6gfTqmCcR29jb6d290DezXPGgruHWDX/vYUebtErg==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.14.tgz",
+ "integrity": "sha512-4lUhWTWAjbDIqFrAPWJ3WqBOpO5YchVZ88X3nh6H9Lu5AFi5nCUeTPj3D8FSDmabmFeRe9ME0BDA4MwKTha5GQ==",
"license": "MIT",
"dependencies": {
"@radix-ui/primitive": "1.1.4",
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-primitive": "2.1.6",
+ "@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-callback-ref": "1.1.2",
- "@radix-ui/react-use-escape-keydown": "1.1.2"
+ "@radix-ui/react-use-effect-event": "0.0.3"
},
"peerDependencies": {
"@types/react": "*",
@@ -1883,13 +1986,13 @@
}
},
"node_modules/@radix-ui/react-focus-scope": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.10.tgz",
- "integrity": "sha512-Fas/lXQqhVvqwAb64s5RFeHiHYElZ6SUQbZaNd6EkfhP/Al7wTIQ9WIR4QVX475tlu5yFCEdDcJH6/UwsZjMWw==",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.11.tgz",
+ "integrity": "sha512-Mn88Vg2whaRocGJNOH+DKFqYm6ySFPQaiwHNxZPyjn99B52KAEJWWY9NP83+nWdk2HM3rdov+STu9AG471Rt9w==",
"license": "MIT",
"dependencies": {
"@radix-ui/react-compose-refs": "1.1.3",
- "@radix-ui/react-primitive": "2.1.6",
+ "@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-callback-ref": "1.1.2"
},
"peerDependencies": {
@@ -1926,12 +2029,12 @@
}
},
"node_modules/@radix-ui/react-portal": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.12.tgz",
- "integrity": "sha512-m309havGzsjLHHaIX50G5PlvRs3xkgPCsGk/5PTvYm8D5q33yG0J7w/712PTOhid7NTaFETtnSXjngHQavvhVw==",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.13.tgz",
+ "integrity": "sha512-z3oXfmaHLJTF1wktbjgD6cn9jiEbq3WSondB10LIuIt2m2Ym4iJlrW04/euMwENDdWDdE7z+OuY7Qyp1YpRSwA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.6",
+ "@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-layout-effect": "1.1.2"
},
"peerDependencies": {
@@ -1973,9 +2076,9 @@
}
},
"node_modules/@radix-ui/react-primitive": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.6.tgz",
- "integrity": "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g==",
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.7.tgz",
+ "integrity": "sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==",
"license": "MIT",
"dependencies": {
"@radix-ui/react-slot": "1.3.0"
@@ -1996,18 +2099,18 @@
}
},
"node_modules/@radix-ui/react-roving-focus": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.13.tgz",
- "integrity": "sha512-9gkwneI0guf8JDmrFxPjJF6Ozzgioyw+/lonYNCwefS9ZHA05er0BVHiXr+LbWGHxUfczvMY6G1oiZZi1VzjRw==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.14.tgz",
+ "integrity": "sha512-8Qcnx9447tx/aCBgw6Jenfqg4Skq+vqab9mCBmuGNipIS5YXvL275wbKEu7+ICYHIlAPgCduUMJH1XOYewKF6Q==",
"license": "MIT",
"dependencies": {
"@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-collection": "1.1.10",
+ "@radix-ui/react-collection": "1.1.11",
"@radix-ui/react-compose-refs": "1.1.3",
"@radix-ui/react-context": "1.1.4",
"@radix-ui/react-direction": "1.1.2",
"@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-primitive": "2.1.6",
+ "@radix-ui/react-primitive": "2.1.7",
"@radix-ui/react-use-callback-ref": "1.1.2",
"@radix-ui/react-use-controllable-state": "1.2.3"
},
@@ -2044,6 +2147,36 @@
}
}
},
+ "node_modules/@radix-ui/react-tabs": {
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.16.tgz",
+ "integrity": "sha512-v3Ab2l7z6U7tRB4xA0IyKdq0OsqaO1o9ZjsIEoKKnSZ/l96mZz8aCTX0NCXw+YVHJXr8Km4d+Mn6/Q8YjXa+gw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.4",
+ "@radix-ui/react-context": "1.1.4",
+ "@radix-ui/react-direction": "1.1.2",
+ "@radix-ui/react-id": "1.1.2",
+ "@radix-ui/react-presence": "1.1.6",
+ "@radix-ui/react-primitive": "2.1.7",
+ "@radix-ui/react-roving-focus": "1.1.14",
+ "@radix-ui/react-use-controllable-state": "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-use-callback-ref": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.2.tgz",
@@ -2096,24 +2229,6 @@
}
}
},
- "node_modules/@radix-ui/react-use-escape-keydown": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.2.tgz",
- "integrity": "sha512-2uVLvLjgO7NZCWw01/FdqRwmA42J0BcjPMUCA+koFEOAb+zjqIP7SiFz/7zWPrKnVmSqr76Omq2ALyCuX4dhLw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-use-callback-ref": "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-use-layout-effect": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz",
@@ -2166,7 +2281,6 @@
"resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.85.3.tgz",
"integrity": "sha512-fD7fxEhkJB/aF57tWoXjaAWpklfrExYZS3k6aXPP3BQ77DZY7gvf/b7dbirwjID6NVnP1JDRJyTuPBGr0K/vlw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/core": "^7.25.2",
"@babel/plugin-proposal-export-default-from": "^7.24.7",
@@ -2344,7 +2458,6 @@
"resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.85.3.tgz",
"integrity": "sha512-omuKq+r7jM4XvCMIlNMPP7Up3SyB8o5EAdZtF7YXniKyq7UOMBqhYHFqgsdOXr0lT+3ADf7VCJG3sb82jlBrrQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/core": "^7.25.2",
"@react-native/babel-preset": "0.85.3",
@@ -2362,15 +2475,13 @@
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz",
"integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@react-native/metro-babel-transformer/node_modules/hermes-parser": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz",
"integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"hermes-estree": "0.33.3"
}
@@ -2380,7 +2491,6 @@
"resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.85.3.tgz",
"integrity": "sha512-sVo6HepUmCcpdfozEf91lA0FjpLNNZYu/Zi9FiYiAQTK8pzATXDVTqhvdxpFrQn435p5eUTSbllvbH/KN+bnyA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@react-native/js-polyfills": "0.85.3",
"@react-native/metro-babel-transformer": "0.85.3",
@@ -2431,7 +2541,6 @@
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
"integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
@@ -2451,7 +2560,6 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=10"
},
@@ -2464,7 +2572,6 @@
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
"integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
@@ -2478,8 +2585,7 @@
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@testing-library/jest-dom": {
"version": "6.9.1",
@@ -2523,8 +2629,7 @@
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
"integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
@@ -2564,6 +2669,7 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz",
"integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"csstype": "^3.2.2"
}
@@ -2573,7 +2679,6 @@
"resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-19.1.0.tgz",
"integrity": "sha512-XD0WZrHqjNrxA/MaR9O22w/RNidWR9YZmBdRGI7wcnWGrv/3dA8wKCJ8m63Sn+tLJhcjmuhOi629N66W6kgWzQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/react": "*"
}
@@ -2654,6 +2759,18 @@
"node": ">= 14"
}
},
+ "node_modules/agent-cli-detector": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/agent-cli-detector/-/agent-cli-detector-0.1.2.tgz",
+ "integrity": "sha512-qdZ/9JFORtTKJNhT/IczMeEfEUbUU0K5umYeiIQHX+AjHs+Y9SXVzSgaYlpZeyNMrvuh2HpZiOTpvS57iPfBkQ==",
+ "license": "MIT",
+ "bin": {
+ "agent-cli-detector": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=18.18"
+ }
+ },
"node_modules/anser": {
"version": "1.4.10",
"resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz",
@@ -2872,9 +2989,9 @@
}
},
"node_modules/babel-preset-expo": {
- "version": "56.0.15",
- "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-56.0.15.tgz",
- "integrity": "sha512-0MqbQoM6nBUbKvgu2xJ4VixZnUTGTq3HB2WwvOikdO4CiPxbQ+wGA25fOoHHSni5iEFW39wy6y1ookTWlq3wVw==",
+ "version": "56.0.16",
+ "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-56.0.16.tgz",
+ "integrity": "sha512-HkTZP+nWVGTibw+JCiy2yCXPPXhFUbqG6xdZRSnnAv+tZUdsCdvGnfEl14shS1mZWIY0VSf/rWpkzIEsZKyqhQ==",
"license": "MIT",
"dependencies": {
"@babel/generator": "^7.20.5",
@@ -2923,7 +3040,7 @@
"peerDependencies": {
"@babel/runtime": "^7.20.0",
"expo": "*",
- "expo-widgets": "^56.0.18",
+ "expo-widgets": "^56.0.20",
"react-refresh": ">=0.14.0 <1.0.0"
},
"peerDependenciesMeta": {
@@ -3016,9 +3133,9 @@
}
},
"node_modules/bplist-parser": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz",
- "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==",
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz",
+ "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==",
"license": "MIT",
"dependencies": {
"big-integer": "1.6.x"
@@ -3028,9 +3145,9 @@
}
},
"node_modules/brace-expansion": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
- "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
+ "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
"license": "MIT",
"dependencies": {
"balanced-match": "^4.0.2"
@@ -3070,6 +3187,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.10.38",
"caniuse-lite": "^1.0.30001799",
@@ -3625,8 +3743,7 @@
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
"integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/ee-first": {
"version": "1.1.1",
@@ -3732,31 +3849,32 @@
}
},
"node_modules/expo": {
- "version": "56.0.12",
- "resolved": "https://registry.npmjs.org/expo/-/expo-56.0.12.tgz",
- "integrity": "sha512-FxgdI/Yqva6iJOThZIHfvxlKPxs4EC4uScUnEswwSArR/Fj9k430O13R590LcOQTsdNsjIs+GBHwjfoAY6vmAQ==",
+ "version": "56.0.14",
+ "resolved": "https://registry.npmjs.org/expo/-/expo-56.0.14.tgz",
+ "integrity": "sha512-YfjXv/owsBhys0HS2K9kd5ONi+FYTNKzoMOCZB5sza0K7JjzjQ1dVC+KzUA27B3GN2RuAyeBoW8jItNr56EBGg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/runtime": "^7.20.0",
- "@expo/cli": "^56.1.16",
- "@expo/config": "~56.0.9",
- "@expo/config-plugins": "~56.0.9",
+ "@expo/cli": "^56.1.18",
+ "@expo/config": "~56.0.11",
+ "@expo/config-plugins": "~56.0.11",
"@expo/devtools": "~56.0.2",
- "@expo/dom-webview": "~56.0.5",
- "@expo/fingerprint": "^0.19.4",
- "@expo/local-build-cache-provider": "^56.0.8",
- "@expo/log-box": "^56.0.13",
+ "@expo/dom-webview": "~56.0.6",
+ "@expo/fingerprint": "^0.19.6",
+ "@expo/local-build-cache-provider": "^56.0.9",
+ "@expo/log-box": "^56.0.14",
"@expo/metro": "~56.0.0",
- "@expo/metro-config": "~56.0.14",
+ "@expo/metro-config": "~56.0.16",
"@ungap/structured-clone": "^1.3.0",
- "babel-preset-expo": "~56.0.15",
- "expo-asset": "~56.0.17",
- "expo-constants": "~56.0.18",
+ "babel-preset-expo": "~56.0.16",
+ "expo-asset": "~56.0.18",
+ "expo-constants": "~56.0.20",
"expo-file-system": "~56.0.8",
"expo-font": "~56.0.7",
"expo-keep-awake": "~56.0.3",
- "expo-modules-autolinking": "~56.0.16",
- "expo-modules-core": "~56.0.17",
+ "expo-modules-autolinking": "~56.0.18",
+ "expo-modules-core": "~56.0.19",
"pretty-format": "^29.7.0",
"react-refresh": "^0.14.2",
"whatwg-url-minimum": "^0.1.2"
@@ -3802,13 +3920,29 @@
"expo": "*"
}
},
- "node_modules/expo-constants": {
+ "node_modules/expo-asset": {
"version": "56.0.18",
- "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-56.0.18.tgz",
- "integrity": "sha512-8AMtbDGl/WVPnWlmbpGmvcdnNCy9E4PFnwdVwj600vljkMDPSxcAcjw8GVXEPk3PpZ+ngTqsrkltWyj0UKYAxw==",
+ "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-56.0.18.tgz",
+ "integrity": "sha512-koV8oOW/U4mPP+sWHhsSxk4GdYrO6s/vZU3/OMeDwiyjeqeNJWfjpVUS94HERzwvcthPiX419X3PNj0p9XKt+g==",
"license": "MIT",
"dependencies": {
- "@expo/env": "~2.3.0"
+ "@expo/image-utils": "^0.10.1",
+ "expo-constants": "~56.0.19"
+ },
+ "peerDependencies": {
+ "expo": "*",
+ "react": "*",
+ "react-native": "*"
+ }
+ },
+ "node_modules/expo-constants": {
+ "version": "56.0.20",
+ "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-56.0.20.tgz",
+ "integrity": "sha512-4HgoVvUiMvcqujr/CUj7L1tumLWj8WX0PLM77OriDPoaJrMEwUHd841m4o4IoUyMPVT8XTiTiPFwJtGali8+9Q==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@expo/env": "~2.3.1"
},
"peerDependencies": {
"expo": "*",
@@ -3839,6 +3973,7 @@
"resolved": "https://registry.npmjs.org/expo-font/-/expo-font-56.0.7.tgz",
"integrity": "sha512-hpU/vRwPzsby9lPGkA4blDqLIIXYzoWnCZHr6PxvcWbY/uPObAiyhh6q+e0WYsB65SthK+PLH95jEnVag7fwEg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"fontfaceobserver": "^2.1.0"
},
@@ -3859,13 +3994,24 @@
"react-native": "*"
}
},
- "node_modules/expo-linking": {
- "version": "56.0.14",
- "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-56.0.14.tgz",
- "integrity": "sha512-IvVQHWC+Cj4fK5qD3iEVYqpU2a4rLW0IpAAlGJ4MH+H1fyZiHh3eN6qg2WmoclOEPfYATSuEa+dQT6wfgVpXlQ==",
+ "node_modules/expo-keep-awake": {
+ "version": "56.0.3",
+ "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-56.0.3.tgz",
+ "integrity": "sha512-CLMJXtEiMKknD3Rpm8CRwE6ZJUzu2yCEmRk1sgfHAJ1zIbuEWY3dpPDubtsnuzWm+2k6Sru+yaFbYsvPWmTiBA==",
"license": "MIT",
+ "peerDependencies": {
+ "expo": "*",
+ "react": "*"
+ }
+ },
+ "node_modules/expo-linking": {
+ "version": "56.0.15",
+ "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-56.0.15.tgz",
+ "integrity": "sha512-V3tkCxHIWO624ayw2L5Nfi0/bPgYy/0MgmoQR7g3FAKF4nyAayK8IhgAInz4MZ5Ao5Bb+5uZWDdUaS4yyEb+Gw==",
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "expo-constants": "~56.0.18",
+ "expo-constants": "~56.0.20",
"invariant": "^2.2.4"
},
"peerDependencies": {
@@ -3874,12 +4020,12 @@
}
},
"node_modules/expo-modules-autolinking": {
- "version": "56.0.16",
- "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-56.0.16.tgz",
- "integrity": "sha512-9JnL4N46P8ubDpDIfWolDn7nxU2j1rY67xY/dNVuyH0m+HG+r/JI16VYtjIf4COpZtEuFo4D3h3MBeFzGucMnw==",
+ "version": "56.0.18",
+ "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-56.0.18.tgz",
+ "integrity": "sha512-8+NyEpTKjrUpHRFw+WihXXnLa/nqPlUpFz4SdtzPovW24rJikyw160gVSCbuILp+AgC8yasjHT+C6xuqRSdiew==",
"license": "MIT",
"dependencies": {
- "@expo/require-utils": "^56.1.3",
+ "@expo/require-utils": "^56.1.4",
"@expo/spawn-async": "^1.8.0",
"chalk": "^4.1.0",
"commander": "^7.2.0"
@@ -3889,13 +4035,13 @@
}
},
"node_modules/expo-modules-core": {
- "version": "56.0.17",
- "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-56.0.17.tgz",
- "integrity": "sha512-5J8whnT7Ccp+BrFClLmpF76omBqn95VZExroTm01Dgjm4vpty1Rb7U3we+ZUceNHtRd07Lw30u7FNfDgIhEbRQ==",
+ "version": "56.0.19",
+ "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-56.0.19.tgz",
+ "integrity": "sha512-nJCXHNK4y7X8/Z40zssp8hRpxzwEEpWGtA4b9b3gf67aaj4Z7l5PDstfv+8d5QnsAcOM+Vxum9E+itqNB27qXQ==",
"license": "MIT",
"dependencies": {
"@expo/expo-modules-macros-plugin": "0.2.2",
- "expo-modules-jsi": "~56.0.10",
+ "expo-modules-jsi": "~56.0.11",
"invariant": "^2.2.4"
},
"peerDependencies": {
@@ -3910,25 +4056,25 @@
}
},
"node_modules/expo-modules-jsi": {
- "version": "56.0.10",
- "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-56.0.10.tgz",
- "integrity": "sha512-fHZcFpYO/o62GYa6fJyAQJZcAShzhoN0iMMDzbr7vD3ewET6e1vAlTonbEakN9F0VHEgBFJ4NREy87uwVcpCuA==",
+ "version": "56.0.11",
+ "resolved": "https://registry.npmjs.org/expo-modules-jsi/-/expo-modules-jsi-56.0.11.tgz",
+ "integrity": "sha512-vhjaTb63ekITnSz8ah+k+GOUDRB9TB8NmY8Iq7cj5O8iKXcqJi/3ZyHyhiFSu0Pjb+UXEeFX+42KZ/a3XZDd4Q==",
"license": "MIT",
"peerDependencies": {
"react-native": "*"
}
},
"node_modules/expo-notifications": {
- "version": "56.0.18",
- "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-56.0.18.tgz",
- "integrity": "sha512-HHnrwyCLC5srFojcHYS2KskbNroy9o2fwPKdyhjrdjjrBu4sNRKm4LepcuZjDy98cZKEm89WIPW8O45vut8Rgw==",
+ "version": "56.0.19",
+ "resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-56.0.19.tgz",
+ "integrity": "sha512-3sTegn8Wwu84TLIAxAqC725kqQ412U2NG9qUH4k3gQzBU49vROhvsslj7gARgvOJY8KohuJz82csuZfZnHDDHw==",
"license": "MIT",
"dependencies": {
"@expo/image-utils": "^0.10.1",
"abort-controller": "^3.0.0",
"badgin": "^1.1.5",
"expo-application": "~56.0.3",
- "expo-constants": "~56.0.18"
+ "expo-constants": "~56.0.19"
},
"peerDependencies": {
"expo": "*",
@@ -3937,15 +4083,15 @@
}
},
"node_modules/expo-router": {
- "version": "56.2.11",
- "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-56.2.11.tgz",
- "integrity": "sha512-08DBTrKv3QanOc9u1JNxSEChW9c/qNFbQ0dO28OLvufWWfdSRkSdHmh365D2FgoZg1qaOzZPCDuL3tM6nGSfkQ==",
+ "version": "56.2.13",
+ "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-56.2.13.tgz",
+ "integrity": "sha512-Iln0473krRnI8m1EnZ29Sg1kWRgQ2W9a8bsDkslPPnpdAHQee28HajkQHXZsNPxD1t4hii1lajRRHKNmJs37rA==",
"license": "MIT",
"dependencies": {
- "@expo/log-box": "^56.0.13",
- "@expo/metro-runtime": "^56.0.15",
- "@expo/schema-utils": "^56.0.0",
- "@expo/ui": "^56.0.18",
+ "@expo/log-box": "^56.0.14",
+ "@expo/metro-runtime": "^56.0.16",
+ "@expo/schema-utils": "^56.0.2",
+ "@expo/ui": "^56.0.20",
"@radix-ui/react-slot": "^1.2.0",
"@radix-ui/react-tabs": "^1.1.12",
"@react-native-masked-view/masked-view": "^0.3.2",
@@ -3973,12 +4119,12 @@
"vaul": "^1.1.2"
},
"peerDependencies": {
- "@expo/log-box": "^56.0.13",
- "@expo/metro-runtime": "^56.0.15",
+ "@expo/log-box": "^56.0.14",
+ "@expo/metro-runtime": "^56.0.16",
"@testing-library/react-native": ">= 13.2.0",
"expo": "*",
- "expo-constants": "^56.0.18",
- "expo-linking": "^56.0.14",
+ "expo-constants": "^56.0.20",
+ "expo-linking": "^56.0.15",
"react": "*",
"react-dom": "*",
"react-native": "*",
@@ -4010,69 +4156,6 @@
}
}
},
- "node_modules/expo-router/node_modules/@expo/ui": {
- "version": "56.0.18",
- "resolved": "https://registry.npmjs.org/@expo/ui/-/ui-56.0.18.tgz",
- "integrity": "sha512-2XgH5obigGtXm8zlb/V3g87NSiIcBcJ1xoQOEQYPoExL1DCNsHzaIecTh1XG/f/45ardo4OZNJwpbfYJ9X3qrQ==",
- "license": "MIT",
- "dependencies": {
- "sf-symbols-typescript": "^2.1.0",
- "vaul": "^1.1.2"
- },
- "peerDependencies": {
- "@babel/core": "*",
- "expo": "*",
- "react": "*",
- "react-dom": "*",
- "react-native": "*",
- "react-native-reanimated": "*",
- "react-native-worklets": "*"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- },
- "react-native-reanimated": {
- "optional": true
- },
- "react-native-worklets": {
- "optional": true
- }
- }
- },
- "node_modules/expo-router/node_modules/@radix-ui/react-tabs": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.15.tgz",
- "integrity": "sha512-kxc9gI6/HfcU4nfMMVS3AmQK414kbU1IE6UCJmMmxjhO3cRPXOyYnmvyKD+ODt7q56nRq9l7Wovi6uaGwKgMlg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.4",
- "@radix-ui/react-context": "1.1.4",
- "@radix-ui/react-direction": "1.1.2",
- "@radix-ui/react-id": "1.1.2",
- "@radix-ui/react-presence": "1.1.6",
- "@radix-ui/react-primitive": "2.1.6",
- "@radix-ui/react-roving-focus": "1.1.13",
- "@radix-ui/react-use-controllable-state": "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/react-is": {
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz",
@@ -4093,18 +4176,19 @@
"resolved": "https://registry.npmjs.org/expo-server/-/expo-server-56.0.5.tgz",
"integrity": "sha512-SmM2p2g3Jrktpiazcst+OxhjSzOHXKAY4BPURHYHXvApzzoybMmrNF4IEZ8DKZ145BhSe4ydAmlEFCRTsdtgUQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=20.16.0"
}
},
"node_modules/expo-splash-screen": {
- "version": "56.0.10",
- "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-56.0.10.tgz",
- "integrity": "sha512-vDIlo8hzt9HlCZQ0kSY66v83D1WEXOJbVMeyPDfXDu9tbDdPMNUyDpi4WGJXikAjxnAKfbt5Mv5NnEbxINy+VA==",
+ "version": "56.0.12",
+ "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-56.0.12.tgz",
+ "integrity": "sha512-RvEtJ78aNpuxdVD8TCe9viKtlYGzS9hW20fbvqvkeXDN6WAaYo1CRitPdjWNkaNNSPKOolp3zfha4EGdhXOtxg==",
"license": "MIT",
"dependencies": {
- "@expo/config-plugins": "~56.0.8",
- "@expo/image-utils": "^0.10.1",
+ "@expo/config-plugins": "~56.0.11",
+ "@expo/image-utils": "^0.10.2",
"xml2js": "0.6.0"
},
"peerDependencies": {
@@ -4159,35 +4243,36 @@
}
},
"node_modules/expo/node_modules/@expo/cli": {
- "version": "56.1.16",
- "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-56.1.16.tgz",
- "integrity": "sha512-VBQn0mqAwc67b9Cn0RVXyeodghomAx5xGRhA/bXaQzuxDjMQk0zIOb6pXMZX7yiIwJW66UZt/zQiJNSv6aWJYw==",
+ "version": "56.1.18",
+ "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-56.1.18.tgz",
+ "integrity": "sha512-ACzbK2mLPevgjdJ7EeDyjPem+WU9oDcCLD2Ajwrl6dVvN9xP5wchGrwRQvVx55TU3bdTCEXpiHC2AGRXfXVc6g==",
"license": "MIT",
"dependencies": {
"@expo/code-signing-certificates": "^0.0.6",
- "@expo/config": "~56.0.9",
- "@expo/config-plugins": "~56.0.9",
+ "@expo/config": "~56.0.11",
+ "@expo/config-plugins": "~56.0.11",
"@expo/devcert": "^1.2.1",
- "@expo/env": "~2.3.0",
- "@expo/image-utils": "^0.10.1",
- "@expo/inline-modules": "^0.0.12",
+ "@expo/env": "~2.3.1",
+ "@expo/image-utils": "^0.10.2",
+ "@expo/inline-modules": "^0.0.13",
"@expo/json-file": "^10.2.0",
- "@expo/log-box": "^56.0.13",
+ "@expo/log-box": "^56.0.14",
"@expo/metro": "~56.0.0",
- "@expo/metro-config": "~56.0.14",
+ "@expo/metro-config": "~56.0.16",
"@expo/metro-file-map": "^56.0.3",
"@expo/osascript": "^2.6.0",
"@expo/package-manager": "^1.12.1",
"@expo/plist": "^0.7.0",
- "@expo/prebuild-config": "^56.0.16",
- "@expo/require-utils": "^56.1.3",
- "@expo/router-server": "^56.0.14",
- "@expo/schema-utils": "^56.0.0",
+ "@expo/prebuild-config": "^56.0.18",
+ "@expo/require-utils": "^56.1.4",
+ "@expo/router-server": "^56.0.15",
+ "@expo/schema-utils": "^56.0.2",
"@expo/spawn-async": "^1.8.0",
"@expo/ws-tunnel": "^2.0.0",
"@expo/xcpretty": "^4.4.4",
"@react-native/dev-middleware": "0.85.3",
"accepts": "^1.3.8",
+ "agent-cli-detector": "^0.1.2",
"arg": "^5.0.2",
"bplist-creator": "0.1.0",
"bplist-parser": "^0.3.1",
@@ -4196,7 +4281,7 @@
"compression": "^1.7.4",
"connect": "^3.7.0",
"debug": "^4.3.4",
- "dnssd-advertise": "^1.1.4",
+ "dnssd-advertise": "^1.1.6",
"expo-server": "^56.0.5",
"fetch-nodeshim": "^0.4.10",
"getenv": "^2.0.0",
@@ -4240,18 +4325,18 @@
}
},
"node_modules/expo/node_modules/@expo/cli/node_modules/@expo/router-server": {
- "version": "56.0.14",
- "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-56.0.14.tgz",
- "integrity": "sha512-2UCTtZfcq1ZPgp3wk8/+sq9DvFI9UxrPr1jcEKMAF2DGAJLosnpc8GWNNg2hkjt6SHUOdFHIPxujWPYyho2y3A==",
+ "version": "56.0.15",
+ "resolved": "https://registry.npmjs.org/@expo/router-server/-/router-server-56.0.15.tgz",
+ "integrity": "sha512-eXTwUEKR6MPeoJVwyGOX5eIvUUKCGL0mItTXBMTb2TIr9M6IH7ORVo8yHB70RVSLVXo8AuwsCtDfKFKZ3rUZ5w==",
"license": "MIT",
"dependencies": {
"debug": "^4.3.4"
},
"peerDependencies": {
- "@expo/metro-runtime": "^56.0.15",
+ "@expo/metro-runtime": "^56.0.16",
"expo": "*",
- "expo-constants": "^56.0.18",
- "expo-font": "^56.0.6",
+ "expo-constants": "^56.0.19",
+ "expo-font": "^56.0.7",
"expo-router": "*",
"expo-server": "^56.0.5",
"react": "*",
@@ -4273,45 +4358,6 @@
}
}
},
- "node_modules/expo/node_modules/@expo/metro-config": {
- "version": "56.0.14",
- "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-56.0.14.tgz",
- "integrity": "sha512-O3CIHruaTJhswPAf/nf3i8QQ3f2jl+mEwSea1eb3khuplabdy/wTQz+JvHN8VGUFyg7JKwUGU1QfO6T3JiSQqA==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.20.0",
- "@babel/core": "^7.20.0",
- "@babel/generator": "^7.20.5",
- "@expo/config": "~56.0.9",
- "@expo/env": "~2.3.0",
- "@expo/json-file": "~10.2.0",
- "@expo/metro": "~56.0.0",
- "@expo/require-utils": "^56.1.3",
- "@expo/spawn-async": "^1.8.0",
- "@jridgewell/gen-mapping": "^0.3.13",
- "@jridgewell/remapping": "^2.3.5",
- "@jridgewell/sourcemap-codec": "^1.5.5",
- "browserslist": "^4.25.0",
- "chalk": "^4.1.0",
- "debug": "^4.3.2",
- "getenv": "^2.0.0",
- "glob": "^13.0.0",
- "hermes-parser": "^0.33.3",
- "jsc-safe-url": "^0.2.4",
- "lightningcss": "^1.30.1",
- "picomatch": "^4.0.4",
- "postcss": "^8.5.14",
- "resolve-from": "^5.0.0"
- },
- "peerDependencies": {
- "expo": "*"
- },
- "peerDependenciesMeta": {
- "expo": {
- "optional": true
- }
- }
- },
"node_modules/expo/node_modules/@expo/ws-tunnel": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-2.0.0.tgz",
@@ -4349,46 +4395,6 @@
"node": ">=8"
}
},
- "node_modules/expo/node_modules/expo-asset": {
- "version": "56.0.17",
- "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-56.0.17.tgz",
- "integrity": "sha512-GFN5j+8SPkyv0nfsiFHewmdB/D0tL237TsBE/gSfFOFy/J3a52py7IulcSqkA3sQE/u/UlD5BmvP5ssS4//nUg==",
- "license": "MIT",
- "dependencies": {
- "@expo/image-utils": "^0.10.1",
- "expo-constants": "~56.0.18"
- },
- "peerDependencies": {
- "expo": "*",
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/expo/node_modules/expo-keep-awake": {
- "version": "56.0.3",
- "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-56.0.3.tgz",
- "integrity": "sha512-CLMJXtEiMKknD3Rpm8CRwE6ZJUzu2yCEmRk1sgfHAJ1zIbuEWY3dpPDubtsnuzWm+2k6Sru+yaFbYsvPWmTiBA==",
- "license": "MIT",
- "peerDependencies": {
- "expo": "*",
- "react": "*"
- }
- },
- "node_modules/expo/node_modules/hermes-estree": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz",
- "integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==",
- "license": "MIT"
- },
- "node_modules/expo/node_modules/hermes-parser": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz",
- "integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==",
- "license": "MIT",
- "dependencies": {
- "hermes-estree": "0.33.3"
- }
- },
"node_modules/expo/node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
@@ -4420,9 +4426,9 @@
}
},
"node_modules/expo/node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -4436,6 +4442,7 @@
"resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
"integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10.0.0"
},
@@ -5096,6 +5103,7 @@
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"license": "MIT",
+ "peer": true,
"bin": {
"jiti": "bin/jiti.js"
}
@@ -5107,9 +5115,9 @@
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz",
- "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
+ "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==",
"funding": [
{
"type": "github",
@@ -5598,7 +5606,6 @@
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
"integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
"license": "MIT",
- "peer": true,
"bin": {
"lz-string": "bin/bin.js"
}
@@ -6488,6 +6495,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"nanoid": "^3.3.12",
"picocolors": "^1.1.1",
@@ -6752,6 +6760,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz",
"integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -6771,6 +6780,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz",
"integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -6807,6 +6817,7 @@
"resolved": "https://registry.npmjs.org/react-native/-/react-native-0.85.3.tgz",
"integrity": "sha512-HN/fGC+3nZVcDNcw7gfbM/DuqZAvI9Mz+/SxuhODaua4JY0BPzhfTzWXRyTR4mRgMHmShTPpH2PYMTxvZrsdZA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@react-native/assets-registry": "0.85.3",
"@react-native/codegen": "0.85.3",
@@ -7178,6 +7189,7 @@
"resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.3.1.tgz",
"integrity": "sha512-KhGsS0YkCA+gusgyzlf9hnqzVPIR398KTpqXyqq/+yYJJPAvyEEPKcxlB0xtOOXSMrR2A9uRKVARVQhZwrOh+Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"react-native-is-edge-to-edge": "^1.3.1",
"semver": "^7.7.3"
@@ -7193,6 +7205,7 @@
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.7.0.tgz",
"integrity": "sha512-/9/MtQz8ODphjsLdZ+GZAIcC/RtoqW9EeShf7Uvnfgm/pzYrJ75y3PV/J1wuAV1T5Dye5ygq4EAW20RoBq0ABQ==",
"license": "MIT",
+ "peer": true,
"peerDependencies": {
"react": "*",
"react-native": "*"
@@ -7217,6 +7230,7 @@
"resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.21.2.tgz",
"integrity": "sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/runtime": "^7.18.6",
"@react-native/normalize-colors": "^0.74.1",
@@ -7249,6 +7263,7 @@
"resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.8.3.tgz",
"integrity": "sha512-oCBJROyLU7yG/1R8s0INMflygTH71bx+5XcYkH0CM938TlhSoVbiunE1WVW5FZa51vwYqfLie/IXMX2s1Kh3eg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/plugin-transform-arrow-functions": "^7.27.1",
"@babel/plugin-transform-class-properties": "^7.27.1",
@@ -7283,6 +7298,7 @@
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
"integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -7772,6 +7788,18 @@
"plist": "^3.0.5"
}
},
+ "node_modules/simple-plist/node_modules/bplist-parser": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz",
+ "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==",
+ "license": "MIT",
+ "dependencies": {
+ "big-integer": "1.6.x"
+ },
+ "engines": {
+ "node": ">= 5.10.0"
+ }
+ },
"node_modules/simple-swizzle": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
@@ -8016,6 +8044,7 @@
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz",
"integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
@@ -8153,6 +8182,7 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -8226,6 +8256,7 @@
"integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
diff --git a/package.json b/package.json
index 1ec01d2..8d943d6 100644
--- a/package.json
+++ b/package.json
@@ -6,14 +6,14 @@
"@expo/metro-runtime": "~56.0.15",
"@expo/vector-icons": "^15.1.1",
"babel-preset-expo": "~56.0.0",
- "expo": "~56.0.12",
- "expo-constants": "~56.0.18",
+ "expo": "~56.0.14",
+ "expo-constants": "~56.0.20",
"expo-document-picker": "~56.0.4",
"expo-file-system": "~56.0.8",
"expo-font": "~56.0.7",
- "expo-linking": "~56.0.14",
- "expo-notifications": "~56.0.18",
- "expo-router": "~56.2.11",
+ "expo-linking": "~56.0.15",
+ "expo-notifications": "~56.0.19",
+ "expo-router": "~56.2.13",
"expo-secure-store": "~56.0.4",
"expo-splash-screen": "~56.0.10",
"expo-status-bar": "~56.0.4",
diff --git a/types/codex.ts b/types/codex.ts
index cc3b4d8..86a3c40 100644
--- a/types/codex.ts
+++ b/types/codex.ts
@@ -3,21 +3,55 @@ export interface CodexAuth {
accountId?: string;
}
-export interface UsageWindow {
- used_percent: number;
- reset_at: number;
- limit_window_seconds: number;
+export interface CodexUsageWindow {
+ usedPercent: number;
+ resetsAt: number;
+ windowMinutes: number;
+ windowSeconds: number;
}
-export interface CodexUsageResponse {
- plan_type: string;
- rate_limit: {
- primary_window: UsageWindow;
- secondary_window: UsageWindow;
- };
- credits: {
- has_credits: boolean;
- unlimited: boolean;
- balance: number;
- };
+export interface CodexCreditsSummary {
+ hasCredits: boolean;
+ unlimited: boolean;
+ balance: number;
+}
+
+export interface CodexResetCredit {
+ index: number;
+ status?: string;
+ grantedAt?: string | null;
+ grantedAtLocal?: string | null;
+ expiresAt?: string | null;
+ expiresAtLocal?: string | null;
+ timeUntilExpiry?: string | null;
+}
+
+export interface CodexResetCoupons {
+ source: "live_api" | "local_state_fallback" | "unavailable";
+ sourceDescription: string;
+ availableCount?: number | null;
+ totalEarnedCount?: number | null;
+ credits?: CodexResetCredit[];
+ nextExpiringCredit?: CodexResetCredit | null;
+ dismissedAtLocal?: string | null;
+ latestPossibleExpiryLocal?: string | null;
+ latestPossibleExpiryNote?: string | null;
+ fallbackReason?: string;
+ error?: string;
+}
+
+export interface CodexDesktopSnapshot {
+ sessionFile?: string;
+ threadId?: string | null;
+ snapshotTimestamp?: string | null;
+ limitId?: string | null;
+ planType?: string | null;
+ rateLimitReachedType?: string | null;
+ primary: CodexUsageWindow | null;
+ secondary: CodexUsageWindow | null;
+}
+
+export interface CodexUsageResponse extends CodexDesktopSnapshot {
+ credits: CodexCreditsSummary;
+ resetCoupons?: CodexResetCoupons | null;
}