#!/usr/bin/env node // FAILING test: calling normalizeRelayUrl(undefined) crashes with // TypeError: can't access property "match", A is undefined // // The bug: main.ts called normalizeRelayUrl(import.meta.env.VITE_NOTIFIER_RELAY) // without guarding against the env var being undefined. When the env var is // not set, normalizeRelayUrl crashes because it calls url.match(...) on // undefined. // // The fix: replace the bare call with a ternary guard: // const NOTIFIER_RELAY = import.meta.env.VITE_NOTIFIER_RELAY // ? normalizeRelayUrl(import.meta.env.VITE_NOTIFIER_RELAY) // : undefined // // This test validates that the guard pattern works correctly: when the env var // is falsy (undefined, empty), the app gracefully sets NOTIFIER_RELAY to // undefined without crashing. When it's a valid URL, normalization works. import { normalizeRelayUrl } from '/home/gascity/mailship/node_modules/.pnpm/@welshman+util@0.6.3_typescript@5.9.2/node_modules/@welshman/util/dist/util/src/Relay.js'; let passed = 0; let failed = 0; function assert(label, ok, detail) { if (ok) { console.log(` ✓ ${label}`); passed++; } else { console.log(` ✗ ${label} — ${detail || ''}`); failed++; } } // Test 1: Guarded normalizeRelayUrl with undefined (the exact fix pattern) console.log('1. Guarded normalizeRelayUrl with undefined (the fix)'); const undefinedInput = undefined; const guarded1 = undefinedInput ? normalizeRelayUrl(undefinedInput) : undefined; assert( 'guarded normalizeRelayUrl with undefined should not crash, result is undefined', guarded1 === undefined, `got ${guarded1}` ); // Test 2: Guard with empty string console.log(''); console.log('2. Guarded normalizeRelayUrl with empty string'); const emptyInput = ''; const guarded2 = emptyInput ? normalizeRelayUrl(emptyInput) : undefined; assert( 'guarded normalizeRelayUrl with "" should not crash, result is undefined', guarded2 === undefined, `got ${guarded2}` ); // Test 3: Guard with a valid relay still works console.log(''); console.log('3. Guarded normalizeRelayUrl with valid relay'); const validInput = 'wss://relay.damus.io'; const guarded3 = validInput ? normalizeRelayUrl(validInput) : undefined; assert( 'guarded normalizeRelayUrl with valid input still normalizes correctly', guarded3 === 'wss://relay.damus.io/', `got ${guarded3}` ); console.log(''); console.log(`Results: ${passed} passed, ${failed} failed`); process.exit(failed > 0 ? 1 : 0);