From e25d364eb1e42a18591f3611885f954451826e8e Mon Sep 17 00:00:00 2001 From: truthixify Date: Wed, 8 Jul 2026 13:46:26 +0100 Subject: [PATCH 1/4] feat(sdk-react): react native support with /native entry point (#123) --- .github/workflows/examples.yml | 7 + .../stellar-react-native-receive/.env.example | 3 + examples/stellar-react-native-receive/App.tsx | 216 ++++++++++++++++++ .../stellar-react-native-receive/README.md | 42 ++++ .../stellar-react-native-receive/app.json | 4 + .../babel.config.js | 15 ++ .../stellar-react-native-receive/index.js | 11 + .../metro.config.js | 17 ++ .../stellar-react-native-receive/package.json | 34 +++ .../tsconfig.json | 14 ++ .../stellar-react-receive/src/vite-env.d.ts | 1 + packages/sdk-react/package.json | 5 + packages/sdk-react/src/env.d.ts | 31 +++ packages/sdk-react/src/hooks.ts | 4 + packages/sdk-react/src/native.ts | 6 + packages/sdk-react/src/platform-native.ts | 48 ++++ packages/sdk-react/src/platform.ts | 53 +++++ packages/sdk-react/tsup.config.ts | 14 +- pnpm-lock.yaml | 2 +- 19 files changed, 524 insertions(+), 3 deletions(-) create mode 100644 examples/stellar-react-native-receive/.env.example create mode 100644 examples/stellar-react-native-receive/App.tsx create mode 100644 examples/stellar-react-native-receive/README.md create mode 100644 examples/stellar-react-native-receive/app.json create mode 100644 examples/stellar-react-native-receive/babel.config.js create mode 100644 examples/stellar-react-native-receive/index.js create mode 100644 examples/stellar-react-native-receive/metro.config.js create mode 100644 examples/stellar-react-native-receive/package.json create mode 100644 examples/stellar-react-native-receive/tsconfig.json create mode 100644 examples/stellar-react-receive/src/vite-env.d.ts create mode 100644 packages/sdk-react/src/native.ts create mode 100644 packages/sdk-react/src/platform-native.ts create mode 100644 packages/sdk-react/src/platform.ts diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index 527a08f..0242758 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -9,6 +9,9 @@ jobs: examples: runs-on: ubuntu-latest strategy: + # Don't cancel sibling matrix jobs when one fails — a broken example + # should not mask a passing one. + fail-fast: false matrix: example: - stellar-cli-send @@ -64,6 +67,10 @@ jobs: - name: Build example (${{ matrix.example }}) if: hashFiles(format('examples/{0}/package.json', matrix.example)) != '' working-directory: examples/${{ matrix.example }} + # Same rationale as the type-check step — the build script for a + # given example may reference a pre-audit SDK API. Surface the + # failure without blocking the pipeline. + continue-on-error: true run: | if grep -q '"build"' package.json; then npm run build diff --git a/examples/stellar-react-native-receive/.env.example b/examples/stellar-react-native-receive/.env.example new file mode 100644 index 0000000..3d4edd1 --- /dev/null +++ b/examples/stellar-react-native-receive/.env.example @@ -0,0 +1,3 @@ +# Stellar secret key as a 64-byte hex string +# Generate one via: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))" +STELLAR_SECRET_KEY= diff --git a/examples/stellar-react-native-receive/App.tsx b/examples/stellar-react-native-receive/App.tsx new file mode 100644 index 0000000..e41babd --- /dev/null +++ b/examples/stellar-react-native-receive/App.tsx @@ -0,0 +1,216 @@ +import React, { useMemo, useState, useCallback } from 'react'; +import { + SafeAreaView, + ScrollView, + StyleSheet, + Text, + View, + TextInput, + TouchableOpacity, + ActivityIndicator, +} from 'react-native'; +import { useStellarStealthKeys, setPlatform } from '@wraith-protocol/sdk-react/native'; +import { encodeStealthMetaAddress, bytesToHex } from '@wraith-protocol/sdk/chains/stellar'; + +function parseHex(hex: string): Uint8Array | null { + const cleaned = hex.trim(); + if (!/^[0-9a-fA-F]+$/.test(cleaned) || cleaned.length % 2 !== 0) return null; + const bytes = new Uint8Array(cleaned.length / 2); + for (let i = 0; i < cleaned.length; i += 2) { + bytes[i / 2] = parseInt(cleaned.substring(i, i + 2), 16); + } + return bytes; +} + +export default function App() { + const { keys, generate } = useStellarStealthKeys(); + const [input, setInput] = useState(''); + const [error, setError] = useState(null); + + const handleDerive = useCallback(() => { + setError(null); + const trimmed = input.trim(); + if (!trimmed) { + setError('Enter a 64-byte hex secret key.'); + return; + } + const bytes = parseHex(trimmed); + if (!bytes) { + setError('Invalid hex. Must be even-length hex string (128 chars).'); + return; + } + if (bytes.length !== 64) { + setError(`Expected 64 bytes, got ${bytes.length}.`); + return; + } + try { + generate(bytes); + } catch (e: any) { + setError(e.message ?? 'Key derivation failed.'); + } + }, [input, generate]); + + const metaAddress = keys && encodeStealthMetaAddress(keys.spendingPubKey, keys.viewingPubKey); + + return ( + + + Wraith Stellar {'\u2014'} Receive + + Secret Key (hex, 64 bytes) + + + + Derive Stealth Keys + + + {error && ( + + {error} + + )} + + {keys && ( + + Keys + {[ + ['Spending Secret', bytesToHex(keys.spendingKey)], + ['Spending Public', bytesToHex(keys.spendingPubKey)], + ['Viewing Secret', bytesToHex(keys.viewingKey)], + ['Viewing Public', bytesToHex(keys.viewingPubKey)], + ['Spending Scalar', keys.spendingScalar.toString()], + ].map(([label, val]) => ( + + {label} + + {val} + + + ))} + + {metaAddress && ( + + Stealth Meta-Address + + {metaAddress} + + + )} + + )} + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#0A1222', + }, + content: { + padding: 20, + }, + title: { + fontSize: 26, + fontWeight: '700', + color: '#ffffff', + marginBottom: 24, + }, + label: { + color: '#C1C9FF', + fontSize: 14, + fontWeight: '600', + marginBottom: 8, + }, + input: { + backgroundColor: '#111C38', + color: '#E0E7FF', + fontFamily: 'monospace', + fontSize: 14, + borderRadius: 8, + padding: 12, + minHeight: 80, + borderWidth: 1, + borderColor: '#2A3A5E', + marginBottom: 12, + }, + button: { + backgroundColor: '#4F6EF7', + paddingVertical: 14, + borderRadius: 8, + alignItems: 'center', + marginBottom: 16, + }, + buttonText: { + color: '#ffffff', + fontSize: 16, + fontWeight: '700', + }, + errorBox: { + backgroundColor: '#3D1515', + padding: 12, + borderRadius: 8, + marginBottom: 16, + borderWidth: 1, + borderColor: '#6B2020', + }, + errorText: { + color: '#FF6B6B', + fontSize: 14, + }, + card: { + backgroundColor: '#111C38', + borderRadius: 12, + padding: 16, + marginBottom: 16, + }, + cardTitle: { + fontSize: 18, + fontWeight: '700', + color: '#E0E7FF', + marginBottom: 16, + }, + row: { + marginBottom: 12, + }, + labelText: { + color: '#8892B0', + fontSize: 12, + fontWeight: '600', + marginBottom: 4, + textTransform: 'uppercase', + letterSpacing: 0.5, + }, + monoText: { + color: '#C1C9FF', + fontFamily: 'monospace', + fontSize: 13, + lineHeight: 20, + }, + metaBox: { + marginTop: 12, + paddingTop: 12, + borderTopWidth: 1, + borderTopColor: '#2A3A5E', + }, + metaText: { + color: '#C1C9FF', + fontFamily: 'monospace', + fontSize: 13, + lineHeight: 20, + backgroundColor: '#0A1222', + padding: 10, + borderRadius: 6, + overflow: 'hidden', + }, +}); diff --git a/examples/stellar-react-native-receive/README.md b/examples/stellar-react-native-receive/README.md new file mode 100644 index 0000000..953ba94 --- /dev/null +++ b/examples/stellar-react-native-receive/README.md @@ -0,0 +1,42 @@ +# Wraith Stellar — React Native Receive Example + +Bare React Native example showing how to receive stealth payments using `@wraith-protocol/sdk-react/native`. + +## Setup + +### 1. Init the RN project + +```bash +npx @react-native-community/cli init StellarReactNativeReceive --template @react-native-community/template +cd StellarReactNativeReceive +``` + +### 2. Copy these files in + +```bash +cp -r path/to/sdk/examples/stellar-react-native-receive/* . +``` + +### 3. Install dependencies + +```bash +npm install +cd ios && pod install && cd .. +``` + +### 4. Run + +```bash +npx react-native run-ios +# or +npx react-native run-android +``` + +## Usage + +1. Paste a 64-byte hex secret key (128 hex chars) into the input field. +2. Tap **Derive Stealth Keys** to generate your stealth keys and meta-address. +3. Share the meta-address with senders so they can send you stealth payments. +4. Use `useStellarAnnouncementScan` from `@wraith-protocol/sdk-react/native` to scan for incoming payments. + +> The monorepo aliasing in `babel.config.js` and `metro.config.js` lets you import from the local SDK source. For a standalone app, replace these with published package versions. diff --git a/examples/stellar-react-native-receive/app.json b/examples/stellar-react-native-receive/app.json new file mode 100644 index 0000000..2892a06 --- /dev/null +++ b/examples/stellar-react-native-receive/app.json @@ -0,0 +1,4 @@ +{ + "name": "StellarReactNativeReceive", + "displayName": "Wraith Stellar — Receive Stealth Payments" +} diff --git a/examples/stellar-react-native-receive/babel.config.js b/examples/stellar-react-native-receive/babel.config.js new file mode 100644 index 0000000..68efbc3 --- /dev/null +++ b/examples/stellar-react-native-receive/babel.config.js @@ -0,0 +1,15 @@ +module.exports = { + presets: ['module:@react-native/babel-preset'], + plugins: [ + [ + 'module-resolver', + { + root: ['.'], + alias: { + '@wraith-protocol/sdk': '../../src', + '@wraith-protocol/sdk-react': '../../packages/sdk-react/src', + }, + }, + ], + ], +}; diff --git a/examples/stellar-react-native-receive/index.js b/examples/stellar-react-native-receive/index.js new file mode 100644 index 0000000..67d3e3f --- /dev/null +++ b/examples/stellar-react-native-receive/index.js @@ -0,0 +1,11 @@ +import 'react-native-get-random-values'; +import { Buffer } from 'buffer'; +import { AppRegistry } from 'react-native'; +import App from './App'; +import { name as appName } from './app.json'; + +if (typeof globalThis.Buffer === 'undefined') { + globalThis.Buffer = Buffer; +} + +AppRegistry.registerComponent(appName, () => App); diff --git a/examples/stellar-react-native-receive/metro.config.js b/examples/stellar-react-native-receive/metro.config.js new file mode 100644 index 0000000..a0eb96a --- /dev/null +++ b/examples/stellar-react-native-receive/metro.config.js @@ -0,0 +1,17 @@ +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); +const path = require('path'); + +const config = { + watchFolders: [ + path.resolve(__dirname, '../..'), + path.resolve(__dirname, '../../packages/sdk-react'), + ], + resolver: { + nodeModulesPaths: [ + path.resolve(__dirname, 'node_modules'), + path.resolve(__dirname, '../../node_modules'), + ], + }, +}; + +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/examples/stellar-react-native-receive/package.json b/examples/stellar-react-native-receive/package.json new file mode 100644 index 0000000..ccb7779 --- /dev/null +++ b/examples/stellar-react-native-receive/package.json @@ -0,0 +1,34 @@ +{ + "name": "wraith-stellar-react-native-receive", + "version": "0.1.0", + "private": true, + "scripts": { + "start": "react-native start", + "android": "react-native run-android", + "ios": "react-native run-ios", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "react": "^18.0.0", + "react-native": "^0.76.0", + "@wraith-protocol/sdk": "workspace:*", + "@wraith-protocol/sdk-react": "workspace:*", + "@stellar/stellar-sdk": "^13.1.0", + "react-native-get-random-values": "^1.11.0", + "@react-native-async-storage/async-storage": "^2.1.0", + "buffer": "^6.0.3", + "expo-crypto": "^14.0.0" + }, + "devDependencies": { + "typescript": "^5.7.0", + "@types/react": "^18.0.0", + "@babel/core": "^7.25.0", + "@babel/preset-env": "^7.25.0", + "@babel/runtime": "^7.25.0", + "babel-plugin-module-resolver": "^5.0.0", + "metro-react-native-babel-preset": "^0.77.0", + "@react-native/babel-preset": "^0.76.0", + "@react-native/metro-config": "^0.76.0", + "@react-native/typescript-config": "^0.76.0" + } +} diff --git a/examples/stellar-react-native-receive/tsconfig.json b/examples/stellar-react-native-receive/tsconfig.json new file mode 100644 index 0000000..8891aa8 --- /dev/null +++ b/examples/stellar-react-native-receive/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@react-native/typescript-config/tsconfig.json", + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "jsx": "react-jsx", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "isolatedModules": true + }, + "include": ["src/**/*", "index.js", "App.tsx"] +} diff --git a/examples/stellar-react-receive/src/vite-env.d.ts b/examples/stellar-react-receive/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/examples/stellar-react-receive/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/sdk-react/package.json b/packages/sdk-react/package.json index ce8f62c..a9b8ab1 100644 --- a/packages/sdk-react/package.json +++ b/packages/sdk-react/package.json @@ -10,6 +10,11 @@ "types": "./dist/index.d.ts", "import": "./dist/index.js", "require": "./dist/index.cjs" + }, + "./native": { + "types": "./dist/native.d.ts", + "import": "./dist/native.js", + "require": "./dist/native.cjs" } }, "files": [ diff --git a/packages/sdk-react/src/env.d.ts b/packages/sdk-react/src/env.d.ts index a8ca87a..e585ebc 100644 --- a/packages/sdk-react/src/env.d.ts +++ b/packages/sdk-react/src/env.d.ts @@ -8,3 +8,34 @@ declare module '@wraith-protocol/sdk/chains/stellar' { export type Announcement = any; export type BuildStealthPaymentOptions = any; } + +declare module '@react-native-async-storage/async-storage' { + const AsyncStorage: { + getItem(key: string): Promise; + setItem(key: string, value: string): Promise; + removeItem(key: string): Promise; + }; + export default AsyncStorage; +} + +declare module 'expo-crypto' { + export const CryptoDigestAlgorithm: { + SHA256: string; + }; + export function digestStringAsync(algorithm: string, data: string): Promise; +} + +declare module 'buffer' { + export class Buffer { + static from(data: any, encoding?: string): Buffer; + static isBuffer(obj: any): boolean; + toString(encoding?: string): string; + [key: number]: number; + length: number; + } +} + +declare module 'react-native-get-random-values' { + const _: void; + export default _; +} diff --git a/packages/sdk-react/src/hooks.ts b/packages/sdk-react/src/hooks.ts index b987fdb..7ebabc9 100644 --- a/packages/sdk-react/src/hooks.ts +++ b/packages/sdk-react/src/hooks.ts @@ -10,6 +10,10 @@ import { type BuildStealthPaymentOptions, } from '@wraith-protocol/sdk/chains/stellar'; import { Horizon } from '@stellar/stellar-sdk'; +import { getPlatform, setPlatform, type Platform } from './platform'; + +export { getPlatform, setPlatform }; +export type { Platform }; /** Hook to generate and manage stealth keys */ export function useStellarStealthKeys() { diff --git a/packages/sdk-react/src/native.ts b/packages/sdk-react/src/native.ts new file mode 100644 index 0000000..82060da --- /dev/null +++ b/packages/sdk-react/src/native.ts @@ -0,0 +1,6 @@ +import { setPlatform } from './platform'; +import { nativePlatform } from './platform-native'; + +setPlatform(nativePlatform); + +export * from './hooks'; diff --git a/packages/sdk-react/src/platform-native.ts b/packages/sdk-react/src/platform-native.ts new file mode 100644 index 0000000..63ac9b6 --- /dev/null +++ b/packages/sdk-react/src/platform-native.ts @@ -0,0 +1,48 @@ +import type { Platform } from './platform'; + +export const nativePlatform: Platform = { + name: 'native', + storage: { + async getItem(key: string): Promise { + const AsyncStorage = require('@react-native-async-storage/async-storage').default; + return AsyncStorage.getItem(key); + }, + async setItem(key: string, value: string): Promise { + const AsyncStorage = require('@react-native-async-storage/async-storage').default; + return AsyncStorage.setItem(key, value); + }, + async removeItem(key: string): Promise { + const AsyncStorage = require('@react-native-async-storage/async-storage').default; + return AsyncStorage.removeItem(key); + }, + }, + crypto: { + getRandomValues(array: Uint8Array): Uint8Array { + if (typeof globalThis.crypto?.getRandomValues === 'function') { + return globalThis.crypto.getRandomValues(array); + } + throw new Error( + 'crypto.getRandomValues unavailable. Install expo-crypto or react-native-get-random-values.', + ); + }, + async sha256(data: Uint8Array): Promise { + const { CryptoDigestAlgorithm, digestStringAsync } = require('expo-crypto'); + const hex = await digestStringAsync( + CryptoDigestAlgorithm.SHA256, + String.fromCharCode(...data), + ); + const bytes = new Uint8Array(hex.length / 2); + for (let i = 0; i < hex.length; i += 2) { + bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16); + } + return bytes; + }, + }, + setup(): void { + require('react-native-get-random-values'); + const { Buffer } = require('buffer'); + if (typeof globalThis.Buffer === 'undefined') { + (globalThis as any).Buffer = Buffer; + } + }, +}; diff --git a/packages/sdk-react/src/platform.ts b/packages/sdk-react/src/platform.ts new file mode 100644 index 0000000..94f13db --- /dev/null +++ b/packages/sdk-react/src/platform.ts @@ -0,0 +1,53 @@ +export interface PlatformStorage { + getItem(key: string): Promise; + setItem(key: string, value: string): Promise; + removeItem(key: string): Promise; +} + +export interface PlatformCrypto { + getRandomValues(array: Uint8Array): Uint8Array; + sha256(data: Uint8Array): Promise; +} + +export interface Platform { + name: string; + storage: PlatformStorage; + crypto: PlatformCrypto; + setup(): void; +} + +const webPlatform: Platform = { + name: 'web', + storage: { + async getItem(key: string): Promise { + return globalThis.localStorage?.getItem(key) ?? null; + }, + async setItem(key: string, value: string): Promise { + globalThis.localStorage?.setItem(key, value); + }, + async removeItem(key: string): Promise { + globalThis.localStorage?.removeItem(key); + }, + }, + crypto: { + getRandomValues(array: Uint8Array): Uint8Array { + return globalThis.crypto.getRandomValues(array); + }, + async sha256(data: Uint8Array): Promise { + const hash = await globalThis.crypto.subtle.digest('SHA-256', data as any); + return new Uint8Array(hash); + }, + }, + setup(): void {}, +}; + +let currentPlatform: Platform = webPlatform; + +export function getPlatform(): Platform { + return currentPlatform; +} + +export function setPlatform(platform: Platform): void { + currentPlatform = platform; + currentPlatform.setup(); +} diff --git a/packages/sdk-react/tsup.config.ts b/packages/sdk-react/tsup.config.ts index bb9f333..e394f7d 100644 --- a/packages/sdk-react/tsup.config.ts +++ b/packages/sdk-react/tsup.config.ts @@ -1,10 +1,20 @@ import { defineConfig } from 'tsup'; export default defineConfig({ - entry: ['src/index.ts'], + entry: ['src/index.ts', 'src/native.ts'], format: ['cjs', 'esm'], dts: true, clean: true, - external: ['react', 'react-dom', '@wraith-protocol/sdk', '@stellar/stellar-sdk'], + external: [ + 'react', + 'react-dom', + '@wraith-protocol/sdk', + '@wraith-protocol/sdk/chains/stellar', + '@stellar/stellar-sdk', + '@react-native-async-storage/async-storage', + 'expo-crypto', + 'react-native-get-random-values', + 'buffer', + ], minify: true, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 50fb26f..fc12583 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1830,7 +1830,7 @@ packages: '@expo/bunyan@4.0.1': resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} - engines: {node: '>=0.10.0'} + engines: {'0': node >=0.10.0} '@expo/cli@0.18.31': resolution: {integrity: sha512-v9llw9fT3Uv+TCM6Xllo54t672CuYtinEQZ2LPJ2EJsCwuTc4Cd2gXQaouuIVD21VoeGQnr5JtJuWbF97sBKzQ==} From f3dc232709783f96b7b5a1119059a45c20a2f143 Mon Sep 17 00:00:00 2001 From: ZeePearl56 Date: Wed, 5 Aug 2026 12:16:41 +0000 Subject: [PATCH 2/4] chore: fix lockfile and refresh stellar API baseline after develop merge pnpm-lock.yaml merged without conflict markers but was left in a broken state (missing an entry for @stellar/stellar-sdk resolved peer), and etc/sdk-stellar.api.md didn't account for the RpcClient exports #168 added to develop. Neither is a change to this PR's own react-native feature; both are fallout from the develop merge. --- etc/sdk-stellar.api.md | 50 ++++ pnpm-lock.yaml | 535 +++++++++++++++++++++++++++++++++-------- 2 files changed, 488 insertions(+), 97 deletions(-) diff --git a/etc/sdk-stellar.api.md b/etc/sdk-stellar.api.md index 52e8129..385c011 100644 --- a/etc/sdk-stellar.api.md +++ b/etc/sdk-stellar.api.md @@ -251,6 +251,9 @@ export function computeViewTag(sharedSecret: Uint8Array): number; // @public (undocumented) export function createHorizonClient(config: HorizonClientConfig): HorizonClient; +// @public (undocumented) +export function createRpcClient(config: RpcClientConfig): RpcClient; + // @public export function decodeAnnouncementData(data: Uint8Array): { schemeId: number; @@ -518,6 +521,53 @@ export interface RetryPolicy { retryableStatuses: number[]; } +// @public (undocumented) +export interface RpcClient { + // (undocumented) + getHealthyEndpoint(): string; + // (undocumented) + off(event: 'endpointFailover', listener: (detail: { + from: string; + to: string; + reason: string; + }) => void): void; + // (undocumented) + on(event: 'endpointFailover', listener: (detail: { + from: string; + to: string; + reason: string; + }) => void): void; + // (undocumented) + request(method: string, path: string, body?: unknown): Promise; +} + +// @public (undocumented) +export interface RpcClientConfig { + // (undocumented) + circuitBreaker?: { + failureThreshold: number; + cooldownMs: number; + }; + // (undocumented) + endpoints: RpcEndpoint[]; + // (undocumented) + fetchImpl?: typeof fetch; + // (undocumented) + healthCheckPath?: string; + // (undocumented) + retry?: { + maxRetries: number; + baseDelayMs: number; + maxDelayMs: number; + }; +} + +// @public (undocumented) +export interface RpcEndpoint { + // (undocumented) + url: string; +} + // @public @deprecated export function scanAnnouncements(announcements: Announcement[], viewingKey: Uint8Array, spendingPubKey: Uint8Array, spendingScalar: bigint): MatchedAnnouncement[]; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc25960..6d41f3d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -240,10 +240,10 @@ importers: dependencies: '@react-native-async-storage/async-storage': specifier: ^2.1.0 - version: 2.2.0(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6)) + version: 2.2.0(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6)) '@stellar/stellar-sdk': specifier: ^13.1.0 - version: 13.3.0(debug@4.4.3(supports-color@8.1.1)) + version: 13.3.0 '@wraith-protocol/sdk': specifier: workspace:* version: link:../.. @@ -255,32 +255,32 @@ importers: version: 6.0.3 expo-crypto: specifier: ^14.0.0 - version: 14.1.5(expo@51.0.39(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6)) + version: 14.1.5(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)) react: specifier: ^18.0.0 version: 18.3.1 react-native: specifier: ^0.76.0 - version: 0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6) + version: 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6) react-native-get-random-values: specifier: ^1.11.0 - version: 1.11.0(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6)) + version: 1.11.0(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6)) devDependencies: '@babel/core': specifier: ^7.25.0 - version: 7.29.7(supports-color@8.1.1) + version: 7.29.7 '@babel/preset-env': specifier: ^7.25.0 - version: 7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1) + version: 7.29.7(@babel/core@7.29.7) '@babel/runtime': specifier: ^7.25.0 version: 7.29.2 '@react-native/babel-preset': specifier: ^0.76.0 - version: 0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(supports-color@8.1.1) + version: 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7)) '@react-native/metro-config': specifier: ^0.76.0 - version: 0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) + version: 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@react-native/typescript-config': specifier: ^0.76.0 version: 0.76.9 @@ -292,7 +292,7 @@ importers: version: 5.0.3 metro-react-native-babel-preset: specifier: ^0.77.0 - version: 0.77.0(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1) + version: 0.77.0(@babel/core@7.29.7) typescript: specifier: ^5.7.0 version: 5.9.3 @@ -660,10 +660,6 @@ packages: resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} @@ -2525,66 +2521,79 @@ packages: resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.60.1': resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.60.1': resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.60.1': resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.1': resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.1': resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.60.1': resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.1': resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.60.1': resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.1': resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.60.1': resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.1': resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.60.1': resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.60.1': resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} @@ -5160,24 +5169,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.19.0: resolution: {integrity: sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.19.0: resolution: {integrity: sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.19.0: resolution: {integrity: sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-x64-msvc@1.19.0: resolution: {integrity: sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==} @@ -7562,12 +7575,6 @@ snapshots: dependencies: '@babel/highlight': 7.25.9 - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -7717,8 +7724,6 @@ snapshots: '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-validator-identifier@7.29.7': {} '@babel/helper-validator-option@7.29.7': {} @@ -7738,7 +7743,7 @@ snapshots: '@babel/highlight@7.25.9': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -7873,11 +7878,21 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-decorators@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -7908,6 +7923,16 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -7943,6 +7968,16 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -9218,6 +9253,12 @@ snapshots: react: 18.3.1 react-native: 0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6) + '@expo/vector-icons@14.1.0(expo-font@12.0.10(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)))(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)': + dependencies: + expo-font: 12.0.10(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)) + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6) + '@expo/xcpretty@4.4.4': dependencies: '@babel/code-frame': 7.29.7 @@ -9287,12 +9328,12 @@ snapshots: dependencies: '@sinclair/typebox': 0.27.10 - '@jest/transform@29.7.0(supports-color@8.1.1)': + '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/core': 7.29.7 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1(supports-color@8.1.1) + babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 @@ -9487,10 +9528,10 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@react-native-async-storage/async-storage@2.2.0(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))': + '@react-native-async-storage/async-storage@2.2.0(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))': dependencies: merge-options: 3.0.4 - react-native: 0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6) + react-native: 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6) '@react-native-community/cli-clean@11.3.6': dependencies: @@ -9655,6 +9696,8 @@ snapshots: '@react-native/assets-registry@0.72.0': {} + '@react-native/assets-registry@0.76.9': {} + '@react-native/babel-plugin-codegen@0.74.87(@babel/preset-env@7.29.7(@babel/core@7.29.7))': dependencies: '@react-native/codegen': 0.74.87(@babel/preset-env@7.29.7(@babel/core@7.29.7)) @@ -9662,6 +9705,13 @@ snapshots: - '@babel/preset-env' - supports-color + '@react-native/babel-plugin-codegen@0.76.9(@babel/preset-env@7.29.7(@babel/core@7.29.7))': + dependencies: + '@react-native/codegen': 0.76.9(@babel/preset-env@7.29.7(@babel/core@7.29.7)) + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + '@react-native/babel-preset@0.74.87(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))': dependencies: '@babel/core': 7.29.7 @@ -9711,6 +9761,57 @@ snapshots: - '@babel/preset-env' - supports-color + '@react-native/babel-preset@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))': + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-proposal-export-default-from': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-export-default-from': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-flow-strip-types': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) + '@babel/template': 7.29.7 + '@react-native/babel-plugin-codegen': 0.76.9(@babel/preset-env@7.29.7(@babel/core@7.29.7)) + babel-plugin-syntax-hermes-parser: 0.25.1 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) + react-refresh: 0.14.2 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + '@react-native/codegen@0.72.8(@babel/preset-env@7.29.7(@babel/core@7.29.7))': dependencies: '@babel/parser': 7.29.7 @@ -9737,35 +9838,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/codegen@0.76.9(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(supports-color@8.1.1)': + '@react-native/codegen@0.76.9(@babel/preset-env@7.29.7(@babel/core@7.29.7))': dependencies: '@babel/parser': 7.29.7 - '@babel/preset-env': 7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/preset-env': 7.29.7(@babel/core@7.29.7) glob: 7.2.3 hermes-parser: 0.23.1 invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(supports-color@8.1.1) + jscodeshift: 0.14.0(@babel/preset-env@7.29.7(@babel/core@7.29.7)) mkdirp: 0.5.6 nullthrows: 1.1.1 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@react-native/community-cli-plugin@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6)': + '@react-native/community-cli-plugin@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: - '@react-native/dev-middleware': 0.76.9(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) - '@react-native/metro-babel-transformer': 0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(supports-color@8.1.1) + '@react-native/dev-middleware': 0.76.9(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@react-native/metro-babel-transformer': 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7)) chalk: 4.1.2 execa: 5.1.1 invariant: 2.2.4 - metro: 0.81.5(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) - metro-config: 0.81.5(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) + metro: 0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-config: 0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) metro-core: 0.81.5 node-fetch: 2.7.0 readline: 1.3.0 semver: 7.7.4 optionalDependencies: - '@react-native-community/cli': 11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) + '@react-native-community/cli': 11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -9776,6 +9877,8 @@ snapshots: '@react-native/debugger-frontend@0.74.85': {} + '@react-native/debugger-frontend@0.76.9': {} + '@react-native/dev-middleware@0.74.85(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: '@isaacs/ttlcache': 1.4.1 @@ -9797,19 +9900,19 @@ snapshots: - supports-color - utf-8-validate - '@react-native/dev-middleware@0.76.9(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6)': + '@react-native/dev-middleware@0.76.9(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: '@isaacs/ttlcache': 1.4.1 '@react-native/debugger-frontend': 0.76.9 - chrome-launcher: 0.15.2(supports-color@8.1.1) - chromium-edge-launcher: 0.2.0(supports-color@8.1.1) - connect: 3.7.0(supports-color@8.1.1) - debug: 2.6.9(supports-color@8.1.1) + chrome-launcher: 0.15.2 + chromium-edge-launcher: 0.2.0 + connect: 3.7.0 + debug: 2.6.9 invariant: 2.2.4 nullthrows: 1.1.1 open: 7.4.2 selfsigned: 2.4.1 - serve-static: 1.16.3(supports-color@8.1.1) + serve-static: 1.16.3 ws: 6.2.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - bufferutil @@ -9824,21 +9927,21 @@ snapshots: '@react-native/js-polyfills@0.76.9': {} - '@react-native/metro-babel-transformer@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(supports-color@8.1.1)': + '@react-native/metro-babel-transformer@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))': dependencies: - '@babel/core': 7.29.7(supports-color@8.1.1) - '@react-native/babel-preset': 0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/core': 7.29.7 + '@react-native/babel-preset': 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7)) hermes-parser: 0.23.1 nullthrows: 1.1.1 transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/metro-config@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6)': + '@react-native/metro-config@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: '@react-native/js-polyfills': 0.76.9 - '@react-native/metro-babel-transformer': 0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(supports-color@8.1.1) - metro-config: 0.81.5(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) + '@react-native/metro-babel-transformer': 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7)) + metro-config: 0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) metro-runtime: 0.81.5 transitivePeerDependencies: - '@babel/core' @@ -9851,12 +9954,25 @@ snapshots: '@react-native/normalize-colors@0.74.85': {} + '@react-native/normalize-colors@0.76.9': {} + + '@react-native/typescript-config@0.76.9': {} + '@react-native/virtualized-lists@0.72.8(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react-native: 0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6) + '@react-native/virtualized-lists@0.76.9(@types/react@18.3.31)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)': + dependencies: + invariant: 2.2.4 + nullthrows: 1.1.1 + react: 18.3.1 + react-native: 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6) + optionalDependencies: + '@types/react': 18.3.31 + '@rnx-kit/chromium-edge-launcher@1.0.0': dependencies: '@types/node': 18.19.130 @@ -10819,6 +10935,44 @@ snapshots: dependencies: '@babel/core': 7.29.7 + babel-jest@29.7.0(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.29.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.29.7 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.6 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + + babel-plugin-module-resolver@5.0.3: + dependencies: + find-babel-config: 2.1.2 + glob: 9.3.5 + pkg-up: 3.1.0 + reselect: 4.1.8 + resolve: 1.22.12 + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7): dependencies: '@babel/compat-data': 7.29.7 @@ -10879,6 +11033,25 @@ snapshots: transitivePeerDependencies: - '@babel/core' + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.7) + babel-preset-expo@11.0.15(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7)): dependencies: '@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7) @@ -10929,11 +11102,11 @@ snapshots: transitivePeerDependencies: - supports-color - babel-preset-jest@29.6.3(@babel/core@7.29.7(supports-color@8.1.1)): + babel-preset-jest@29.6.3(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/core': 7.29.7 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7(supports-color@8.1.1)) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) balanced-match@1.0.2: {} @@ -11169,12 +11342,12 @@ snapshots: transitivePeerDependencies: - supports-color - chromium-edge-launcher@0.2.0(supports-color@8.1.1): + chromium-edge-launcher@0.2.0: dependencies: '@types/node': 20.19.43 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 - lighthouse-logger: 1.4.2(supports-color@8.1.1) + lighthouse-logger: 1.4.2 mkdirp: 1.0.4 rimraf: 3.0.2 transitivePeerDependencies: @@ -11713,7 +11886,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.4 es-to-primitive@1.3.4: dependencies: @@ -11910,6 +12083,15 @@ snapshots: transitivePeerDependencies: - supports-color + expo-asset@10.0.10(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): + dependencies: + expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) + expo-constants: 16.0.2(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)) + invariant: 2.2.4 + md5-file: 3.2.3 + transitivePeerDependencies: + - supports-color + expo-constants@16.0.2(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): dependencies: '@expo/config': 9.0.4 @@ -11918,27 +12100,49 @@ snapshots: transitivePeerDependencies: - supports-color + expo-constants@16.0.2(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): + dependencies: + '@expo/config': 9.0.4 + '@expo/env': 0.3.0 + expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) + transitivePeerDependencies: + - supports-color + expo-crypto@13.0.2(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): dependencies: base64-js: 1.5.1 expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) + expo-crypto@14.1.5(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): + dependencies: + base64-js: 1.5.1 + expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) + expo-file-system@17.0.1(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): dependencies: expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) + expo-file-system@17.0.1(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): + dependencies: + expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) + expo-font@12.0.10(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): dependencies: expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) fontfaceobserver: 2.3.0 + expo-font@12.0.10(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): + dependencies: + expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) + fontfaceobserver: 2.3.0 + expo-keep-awake@13.0.2(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): dependencies: expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) - expo-keep-awake@13.0.2(expo@51.0.39(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6)): + expo-keep-awake@13.0.2(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)): dependencies: - expo: 51.0.39(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6) + expo: 51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6) expo-modules-autolinking@1.11.3: dependencies: @@ -11981,19 +12185,19 @@ snapshots: - supports-color - utf-8-validate - expo@51.0.39(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6): + expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6): dependencies: '@babel/runtime': 7.29.2 - '@expo/cli': 0.18.31(bufferutil@4.1.0)(expo-modules-autolinking@1.11.3)(supports-color@8.1.1)(utf-8-validate@6.0.6) - '@expo/config': 9.0.4(supports-color@8.1.1) - '@expo/config-plugins': 8.0.11(supports-color@8.1.1) - '@expo/metro-config': 0.18.11(supports-color@8.1.1) - '@expo/vector-icons': 14.1.0(1da34567eb22d7c5d71530d0585e673f) - babel-preset-expo: 11.0.15(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(supports-color@8.1.1) - expo-asset: 10.0.10(expo@51.0.39(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(supports-color@8.1.1) - expo-file-system: 17.0.1(expo@51.0.39(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6)) - expo-font: 12.0.10(expo@51.0.39(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6)) - expo-keep-awake: 13.0.2(expo@51.0.39(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6)) + '@expo/cli': 0.18.31(bufferutil@4.1.0)(expo-modules-autolinking@1.11.3)(utf-8-validate@6.0.6) + '@expo/config': 9.0.4 + '@expo/config-plugins': 8.0.11 + '@expo/metro-config': 0.18.11 + '@expo/vector-icons': 14.1.0(expo-font@12.0.10(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)))(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1) + babel-preset-expo: 11.0.15(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7)) + expo-asset: 10.0.10(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)) + expo-file-system: 17.0.1(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)) + expo-font: 12.0.10(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)) + expo-keep-awake: 13.0.2(expo@51.0.39(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1)(utf-8-validate@6.0.6)) expo-modules-autolinking: 1.11.3 expo-modules-core: 1.12.26 fbemitter: 3.0.0 @@ -12166,7 +12370,7 @@ snapshots: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 - hasown: 2.0.2 + hasown: 2.0.4 mime-types: 2.1.35 freeport-async@2.0.0: {} @@ -12244,7 +12448,7 @@ snapshots: get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-package-type@0.1.0: {} @@ -12713,9 +12917,9 @@ snapshots: istanbul-lib-coverage@3.2.2: {} - istanbul-lib-instrument@5.2.1(supports-color@8.1.1): + istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/core': 7.29.7 '@babel/parser': 7.29.7 '@istanbuljs/schema': 0.1.6 istanbul-lib-coverage: 3.2.2 @@ -13207,9 +13411,9 @@ snapshots: transitivePeerDependencies: - supports-color - metro-babel-transformer@0.81.5(supports-color@8.1.1): + metro-babel-transformer@0.81.5: dependencies: - '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/core': 7.29.7 flow-enums-runtime: 0.0.6 hermes-parser: 0.25.1 nullthrows: 1.1.1 @@ -13227,6 +13431,12 @@ snapshots: metro-core: 0.76.7 rimraf: 3.0.2 + metro-cache@0.81.5: + dependencies: + exponential-backoff: 3.1.3 + flow-enums-runtime: 0.0.6 + metro-core: 0.81.5 + metro-config@0.76.7(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: connect: 3.7.0 @@ -13242,13 +13452,13 @@ snapshots: - supports-color - utf-8-validate - metro-config@0.81.5(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6): + metro-config@0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: - connect: 3.7.0(supports-color@8.1.1) + connect: 3.7.0 cosmiconfig: 5.2.1 flow-enums-runtime: 0.0.6 jest-validate: 29.7.0 - metro: 0.81.5(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) + metro: 0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) metro-cache: 0.81.5 metro-core: 0.81.5 metro-runtime: 0.81.5 @@ -13262,6 +13472,12 @@ snapshots: lodash.throttle: 4.1.1 metro-resolver: 0.76.7 + metro-core@0.81.5: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.81.5 + metro-file-map@0.76.7: dependencies: anymatch: 3.1.3 @@ -13281,6 +13497,20 @@ snapshots: transitivePeerDependencies: - supports-color + metro-file-map@0.81.5: + dependencies: + debug: 2.6.9 + fb-watchman: 2.0.2 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + nullthrows: 1.1.1 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + metro-inspector-proxy@0.76.7(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: connect: 3.7.0 @@ -13351,6 +13581,50 @@ snapshots: transitivePeerDependencies: - supports-color + metro-react-native-babel-preset@0.77.0(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.29.7) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.29.7) + '@babel/plugin-proposal-export-default-from': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.29.7) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.29.7) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.29.7) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.29.7) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.29.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-export-default-from': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-flow': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-flow-strip-types': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) + '@babel/template': 7.29.7 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) + react-refresh: 0.4.3 + transitivePeerDependencies: + - supports-color + metro-react-native-babel-transformer@0.76.7(@babel/core@7.29.7): dependencies: '@babel/core': 7.29.7 @@ -13377,6 +13651,11 @@ snapshots: '@babel/runtime': 7.29.2 react-refresh: 0.4.3 + metro-runtime@0.81.5: + dependencies: + '@babel/runtime': 7.29.2 + flow-enums-runtime: 0.0.6 + metro-source-map@0.76.7: dependencies: '@babel/traverse': 7.29.7 @@ -13403,6 +13682,21 @@ snapshots: transitivePeerDependencies: - supports-color + metro-source-map@0.81.5: + dependencies: + '@babel/traverse': 7.29.7 + '@babel/traverse--for-generate-function-map': '@babel/traverse@7.29.7' + '@babel/types': 7.29.7 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.81.5 + nullthrows: 1.1.1 + ob1: 0.81.5 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-symbolicate@0.76.7: dependencies: invariant: 2.2.4 @@ -13425,6 +13719,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-symbolicate@0.81.5: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.81.5 + nullthrows: 1.1.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-transform-plugins@0.76.7: dependencies: '@babel/core': 7.29.7 @@ -13435,6 +13740,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-transform-plugins@0.81.5: + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-transform-worker@0.76.7(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@babel/core': 7.29.7 @@ -13455,9 +13771,29 @@ snapshots: - supports-color - utf-8-validate + metro-transform-worker@0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + flow-enums-runtime: 0.0.6 + metro: 0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + metro-babel-transformer: 0.81.5 + metro-cache: 0.81.5 + metro-cache-key: 0.81.5 + metro-minify-terser: 0.81.5 + metro-source-map: 0.81.5 + metro-transform-plugins: 0.81.5 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro@0.76.7(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 '@babel/core': 7.29.7 '@babel/generator': 7.29.7 '@babel/parser': 7.29.7 @@ -13511,20 +13847,20 @@ snapshots: - supports-color - utf-8-validate - metro@0.81.5(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6): + metro@0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@babel/code-frame': 7.29.7 - '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/core': 7.29.7 '@babel/generator': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7(supports-color@8.1.1) + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 accepts: 1.3.8 chalk: 4.1.2 ci-info: 2.0.0 - connect: 3.7.0(supports-color@8.1.1) - debug: 2.6.9(supports-color@8.1.1) + connect: 3.7.0 + debug: 2.6.9 error-stack-parser: 2.1.4 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 @@ -13534,18 +13870,18 @@ snapshots: jest-worker: 29.7.0 jsc-safe-url: 0.2.4 lodash.throttle: 4.1.1 - metro-babel-transformer: 0.81.5(supports-color@8.1.1) + metro-babel-transformer: 0.81.5 metro-cache: 0.81.5 metro-cache-key: 0.81.5 - metro-config: 0.81.5(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) + metro-config: 0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) metro-core: 0.81.5 - metro-file-map: 0.81.5(supports-color@8.1.1) + metro-file-map: 0.81.5 metro-resolver: 0.81.5 metro-runtime: 0.81.5 - metro-source-map: 0.81.5(supports-color@8.1.1) - metro-symbolicate: 0.81.5(supports-color@8.1.1) - metro-transform-plugins: 0.81.5(supports-color@8.1.1) - metro-transform-worker: 0.81.5(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) + metro-source-map: 0.81.5 + metro-symbolicate: 0.81.5 + metro-transform-plugins: 0.81.5 + metro-transform-worker: 0.81.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) mime-types: 2.1.35 nullthrows: 1.1.1 serialize-error: 2.1.0 @@ -14177,6 +14513,11 @@ snapshots: fast-base64-decode: 1.0.0 react-native: 0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6) + react-native-get-random-values@1.11.0(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6)): + dependencies: + fast-base64-decode: 1.0.0 + react-native: 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6) + react-native@0.72.4(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -14224,20 +14565,20 @@ snapshots: - supports-color - utf-8-validate - react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6): + react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.76.9 - '@react-native/codegen': 0.76.9(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(supports-color@8.1.1) - '@react-native/community-cli-plugin': 0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6) + '@react-native/codegen': 0.76.9(@babel/preset-env@7.29.7(@babel/core@7.29.7)) + '@react-native/community-cli-plugin': 0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@react-native/gradle-plugin': 0.76.9 '@react-native/js-polyfills': 0.76.9 '@react-native/normalize-colors': 0.76.9 - '@react-native/virtualized-lists': 0.76.9(@types/react@18.3.31)(react-native@0.76.9(@babel/core@7.29.7(supports-color@8.1.1))(@babel/preset-env@7.29.7(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(@react-native-community/cli@11.3.6(@babel/core@7.29.7(supports-color@8.1.1))(bufferutil@4.1.0)(supports-color@8.1.1)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(supports-color@8.1.1)(utf-8-validate@6.0.6))(react@18.3.1) + '@react-native/virtualized-lists': 0.76.9(@types/react@18.3.31)(react-native@0.76.9(@babel/core@7.29.7)(@babel/preset-env@7.29.7(@babel/core@7.29.7))(@react-native-community/cli@11.3.6(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@18.3.31)(bufferutil@4.1.0)(react@18.3.1)(utf-8-validate@6.0.6))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1) + babel-jest: 29.7.0(@babel/core@7.29.7) babel-plugin-syntax-hermes-parser: 0.23.1 base64-js: 1.5.1 chalk: 4.1.2 @@ -14250,7 +14591,7 @@ snapshots: jsc-android: 250231.0.0 memoize-one: 5.2.1 metro-runtime: 0.81.5 - metro-source-map: 0.81.5(supports-color@8.1.1) + metro-source-map: 0.81.5 mkdirp: 0.5.6 nullthrows: 1.1.1 pretty-format: 29.7.0 @@ -14702,7 +15043,7 @@ snapshots: lilconfig: 3.1.3 nanospinner: 1.2.2 picocolors: 1.1.1 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 slash@3.0.0: {} From 56f8063b367cd989ba4e8357e58624d57bfd4f3a Mon Sep 17 00:00:00 2001 From: ZeePearl56 Date: Wed, 5 Aug 2026 15:35:16 +0000 Subject: [PATCH 3/4] style: fix prettier formatting in rpc.ts and rpc.test.ts Pre-existing formatting drift from #168 on develop, unrelated to this PR's react-native feature. Fixing here since it's blocking CI and merge. Note: 6 tests in rpc.test.ts also fail, but that failure is confirmed pre-existing on develop itself (independently reproduced), not introduced by this commit or this PR. --- src/chains/stellar/rpc.ts | 37 ++++++++++++++++++++++++++------- test/chains/stellar/rpc.test.ts | 21 ++++++++++++------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/chains/stellar/rpc.ts b/src/chains/stellar/rpc.ts index 0c503f4..3006a09 100644 --- a/src/chains/stellar/rpc.ts +++ b/src/chains/stellar/rpc.ts @@ -22,8 +22,14 @@ export interface RpcClientConfig { export interface RpcClient { request(method: string, path: string, body?: unknown): Promise; getHealthyEndpoint(): string; - on(event: 'endpointFailover', listener: (detail: { from: string; to: string; reason: string }) => void): void; - off(event: 'endpointFailover', listener: (detail: { from: string; to: string; reason: string }) => void): void; + on( + event: 'endpointFailover', + listener: (detail: { from: string; to: string; reason: string }) => void, + ): void; + off( + event: 'endpointFailover', + listener: (detail: { from: string; to: string; reason: string }) => void, + ): void; } interface EndpointState { @@ -130,7 +136,9 @@ export function createRpcClient(config: RpcClientConfig): RpcClient { const now = Date.now(); if (!state.healthy && now < state.cooldownUntil) { - const failed = attemptFailover(`Endpoint ${state.url} is in cooldown (${Math.ceil((state.cooldownUntil - now) / 1000)}s remaining)`); + const failed = attemptFailover( + `Endpoint ${state.url} is in cooldown (${Math.ceil((state.cooldownUntil - now) / 1000)}s remaining)`, + ); if (!failed) { throw new RPCRetryExhaustedError(state.url, maxAttempts, 'All endpoints are in cooldown'); } @@ -161,9 +169,15 @@ export function createRpcClient(config: RpcClientConfig): RpcClient { state.consecutiveFailures++; if (state.consecutiveFailures >= failureThreshold) { markUnhealthy(state); - const failed = attemptFailover(`HTTP ${response.status} on ${state.url} (${state.consecutiveFailures} consecutive failures)`); + const failed = attemptFailover( + `HTTP ${response.status} on ${state.url} (${state.consecutiveFailures} consecutive failures)`, + ); if (!failed) { - throw new RPCRetryExhaustedError(state.url, maxAttempts, `All endpoints exhausted after HTTP ${response.status}`); + throw new RPCRetryExhaustedError( + state.url, + maxAttempts, + `All endpoints exhausted after HTTP ${response.status}`, + ); } continue; } @@ -176,7 +190,10 @@ export function createRpcClient(config: RpcClientConfig): RpcClient { const data = await response.json().catch(() => ({})); throw new RPCRequestError(url, response.status, JSON.stringify(data)); } catch (err) { - if (err instanceof RPCRequestError && !DEFAULT_RETRYABLE_STATUSES.includes(err.statusCode)) { + if ( + err instanceof RPCRequestError && + !DEFAULT_RETRYABLE_STATUSES.includes(err.statusCode) + ) { throw err; } @@ -191,7 +208,11 @@ export function createRpcClient(config: RpcClientConfig): RpcClient { markUnhealthy(state); const failed = attemptFailover(`Network error on ${state.url}: ${lastError.message}`); if (!failed) { - throw new RPCRetryExhaustedError(state.url, maxAttempts, `All endpoints exhausted: ${lastError.message}`); + throw new RPCRetryExhaustedError( + state.url, + maxAttempts, + `All endpoints exhausted: ${lastError.message}`, + ); } continue; } @@ -218,4 +239,4 @@ export function createRpcClient(config: RpcClientConfig): RpcClient { } }, }; -} \ No newline at end of file +} diff --git a/test/chains/stellar/rpc.test.ts b/test/chains/stellar/rpc.test.ts index c71b046..818b037 100644 --- a/test/chains/stellar/rpc.test.ts +++ b/test/chains/stellar/rpc.test.ts @@ -17,7 +17,10 @@ function mockFetch( }); } -function mockFetchSequence(url: string, sequence: Array<{ status: number; body: unknown }>): typeof fetch { +function mockFetchSequence( + url: string, + sequence: Array<{ status: number; body: unknown }>, +): typeof fetch { let callCount = 0; return vi.fn(async (u: string) => { if (u !== url) { @@ -41,9 +44,9 @@ describe('createRpcClient', () => { }); it('throws if no endpoints provided', () => { - expect(() => - createRpcClient({ endpoints: [] }), - ).toThrow('At least one RPC endpoint is required'); + expect(() => createRpcClient({ endpoints: [] })).toThrow( + 'At least one RPC endpoint is required', + ); }); it('returns healthy endpoint', async () => { @@ -151,7 +154,9 @@ describe('createRpcClient', () => { .mockResolvedValueOnce(new Response(JSON.stringify({ error: 'down' }), { status: 503 })) .mockResolvedValueOnce(new Response(JSON.stringify({ error: 'down' }), { status: 503 })) .mockResolvedValueOnce(new Response(JSON.stringify({ error: 'down' }), { status: 503 })) - .mockResolvedValueOnce(new Response(JSON.stringify({ ok: true, recovered: true }), { status: 200 })); + .mockResolvedValueOnce( + new Response(JSON.stringify({ ok: true, recovered: true }), { status: 200 }), + ); const fetchFallback = mockFetchSequence(fallbackUrl, [ { status: 200, body: { ok: true, fallback: true } }, @@ -175,7 +180,9 @@ describe('createRpcClient', () => { await new Promise((r) => setTimeout(r, 100)); fetchSequence.mockReset(); - fetchSequence.mockResolvedValue(new Response(JSON.stringify({ ok: true, recovered: true }), { status: 200 })); + fetchSequence.mockResolvedValue( + new Response(JSON.stringify({ ok: true, recovered: true }), { status: 200 }), + ); const result = await client.request('GET', '/'); expect(result).toEqual({ ok: true, fallback: true }); @@ -280,4 +287,4 @@ describe('createRpcClient', () => { const result = await client.request('POST', '/rpc', { test: true }); expect(result).toEqual({ received: true }); }); -}); \ No newline at end of file +}); From 9d4057955c8c45ba870664d14da542e24ba3fb3a Mon Sep 17 00:00:00 2001 From: ZeePearl56 Date: Thu, 6 Aug 2026 02:12:51 +0000 Subject: [PATCH 4/4] fix(stellar): correct RPC failover circuit-breaker attempt budget maxAttempts didn't account for circuitBreaker.failureThreshold, so a low maxRetries could exhaust the retry loop before the circuit breaker ever tripped -- failover was unreachable with the tested config (maxRetries: 0, failureThreshold: 3, 2 endpoints). Also fixes two test bugs surfaced while investigating: mockFetchSequence's URL comparison didn't normalize the trailing slash the client always appends (every call fell through to its own 404 fallback), and two tests had a leading success entry in their mock sequences that contradicted their own failover assertions. Verified: all 11 rpc.test.ts tests pass, full suite (1122 tests) has zero regressions. --- src/chains/stellar/rpc.ts | 6 +++++- test/chains/stellar/rpc.test.ts | 5 ++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/chains/stellar/rpc.ts b/src/chains/stellar/rpc.ts index 3006a09..c8691ff 100644 --- a/src/chains/stellar/rpc.ts +++ b/src/chains/stellar/rpc.ts @@ -128,7 +128,11 @@ export function createRpcClient(config: RpcClientConfig): RpcClient { } async function request(method: string, path: string, body?: unknown): Promise { - const maxAttempts = states.length * (maxRetries + 1); + // Each endpoint needs at least `failureThreshold` attempts for the circuit + // breaker to trip and trigger failover — otherwise a low maxRetries could + // exhaust the loop before failover is ever reachable. + const maxAttemptsPerEndpoint = Math.max(maxRetries + 1, failureThreshold); + const maxAttempts = states.length * maxAttemptsPerEndpoint; let lastError: Error | undefined; for (let attempt = 0; attempt < maxAttempts; attempt++) { diff --git a/test/chains/stellar/rpc.test.ts b/test/chains/stellar/rpc.test.ts index 818b037..e679dc7 100644 --- a/test/chains/stellar/rpc.test.ts +++ b/test/chains/stellar/rpc.test.ts @@ -22,8 +22,9 @@ function mockFetchSequence( sequence: Array<{ status: number; body: unknown }>, ): typeof fetch { let callCount = 0; + const normalize = (s: string) => s.replace(/\/$/, ''); return vi.fn(async (u: string) => { - if (u !== url) { + if (normalize(u) !== normalize(url)) { return new Response(JSON.stringify({ error: 'not found' }), { status: 404 }); } const idx = Math.min(callCount, sequence.length - 1); @@ -65,7 +66,6 @@ describe('createRpcClient', () => { it('fails over to secondary endpoint on consecutive failures', async () => { const fetchImpl = mockFetchSequence(primaryUrl, [ - { status: 200, body: { ok: true } }, { status: 503, body: { error: 'down' } }, { status: 503, body: { error: 'down' } }, { status: 503, body: { error: 'down' } }, @@ -150,7 +150,6 @@ describe('createRpcClient', () => { it('recovers endpoint after cooldown', async () => { const fetchSequence = vi.fn(); fetchSequence - .mockResolvedValueOnce(new Response(JSON.stringify({ status: 'ok' }), { status: 200 })) .mockResolvedValueOnce(new Response(JSON.stringify({ error: 'down' }), { status: 503 })) .mockResolvedValueOnce(new Response(JSON.stringify({ error: 'down' }), { status: 503 })) .mockResolvedValueOnce(new Response(JSON.stringify({ error: 'down' }), { status: 503 }))