import { printBridgeFailureDiagnostics } from '../bridge-diagnostics' import { type BridgeTransportOption, createBridgeFromParsed, parseBridgeCliArgs, } from '../ws-bridge' import type { ResetResult } from '../../src/bridge-contract' function isResetResult(value: unknown): value is ResetResult { if (!value || typeof value !== 'object') return false const strategy = Reflect.get(value, 'strategy') return ( typeof Reflect.get(value, 'ok') === 'boolean' && (strategy === 'data' || strategy === 'full') && Array.isArray(Reflect.get(value, 'cleared')) && typeof Reflect.get(value, 'relaunched') === 'boolean' ) } function printHelp(): void { console.log(` rnx reset - clear the current guest app and relaunch it usage: rnx reset [--full] [--json] [--sim ] options: --full also clear keychain, user defaults, and permissions --json print the structured reset result --sim target a specific sim --port

WS bridge port `) } export async function runReset( args: string[], opts: { port?: number } & BridgeTransportOption = {}, ): Promise { if (args.includes('--help') || args.includes('-h')) { printHelp() return 0 } const parsed = parseBridgeCliArgs(args, { port: opts.port, stripBooleanFlags: ['--full', '--json'], }) if (parsed.positional.length > 0) { console.error(` unexpected reset argument: ${parsed.positional[0]}`) return 1 } const bridge = (opts.createBridge ?? createBridgeFromParsed)(parsed) try { const value: unknown = await bridge.send({ type: 'reset', resetOptions: { strategy: args.includes('--full') ? 'full' : 'data' }, }) if (!isResetResult(value)) { throw new Error('reset bridge returned an invalid result') } if (args.includes('--json')) { console.log(JSON.stringify(value)) } else { console.log(` ${value.strategy} reset ${value.ok ? 'complete' : 'failed'}`) console.log( value.cleared.length > 0 ? ` cleared: ${value.cleared.join(', ')}` : ' cleared: none', ) for (const skipped of value.skipped ?? []) { console.log(` skipped ${skipped.store}: ${skipped.reason}`) } console.log(` app: ${value.relaunched ? 'relaunched' : 'not relaunched'}`) console.log( ` worker: ${value.workerReloaded ? 'restarted' : 'preserved in place'}`, ) if (value.error) console.error(` error: ${value.error}`) } return value.ok ? 0 : 1 } catch (error) { console.error(` reset failed: ${error instanceof Error ? error.message : error}`) await printBridgeFailureDiagnostics(bridge) return 1 } finally { bridge.close() } }