Polish pass 8 — console → debug, sentence case, attachment button

- core.ts, feed.ts, user.ts: replace all console.log/warn/error with
  debug.log/warn/error (silent in production builds)
- ArticleFeed: "write article" → "Write article"
- ComposeBox: attachment remove x → ×, add aria-label
This commit is contained in:
Jure
2026-04-09 19:20:47 +02:00
parent f2546b5af7
commit d6287fc240
5 changed files with 22 additions and 18 deletions
+1 -1
View File
@@ -70,7 +70,7 @@ export function ArticleFeed() {
onClick={() => setView("article-editor")}
className="text-[11px] px-3 py-1 border border-accent/60 text-accent hover:bg-accent hover:text-accent-text transition-colors"
>
write article
Write article
</button>
</header>
+2 -1
View File
@@ -272,8 +272,9 @@ export function ComposeBox({ onPublished, onNoteInjected }: { onPublished?: () =
onClick={() => removeAttachment(i)}
className="absolute -top-1.5 -right-1.5 w-4 h-4 bg-danger text-white text-[10px] rounded-full flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity"
title="Remove"
aria-label="Remove attachment"
>
x
×
</button>
</div>
))}
+8 -7
View File
@@ -1,4 +1,5 @@
import NDK, { NDKEvent, NDKFilter, NDKRelay, NDKRelaySet, NDKSubscriptionCacheUsage } from "@nostr-dev-kit/ndk";
import { debug } from "../debug";
// ─── Fetch timeout helper ───────────────────────────────────────────
@@ -7,7 +8,7 @@ export function withTimeout<T>(promise: Promise<T>, ms: number, fallback: T): Pr
return Promise.race([
promise,
new Promise<T>((resolve) => setTimeout(() => {
console.warn(`[Vega] Fetch timed out after ${ms}ms`);
debug.warn(`[Vega] Fetch timed out after ${ms}ms`);
resolve(fallback);
}, ms)),
]);
@@ -147,7 +148,7 @@ export async function resetNDK(): Promise<void> {
}
// Connect fresh
console.log("[Vega] NDK instance reset — connecting fresh relays");
debug.log("[Vega] NDK instance reset — connecting fresh relays");
await ndk.connect();
await waitForConnectedRelay(ndk, 5000);
@@ -160,7 +161,7 @@ export async function resetNDK(): Promise<void> {
const relays = Array.from(ndk.pool?.relays?.values() ?? []);
const connected = relays.filter((r) => r.connected).length;
console.log(`[Vega] Fresh connection: ${connected}/${relays.length} relays connected`);
debug.log(`[Vega] Fresh connection: ${connected}/${relays.length} relays connected`);
}
export function addRelay(url: string): void {
@@ -195,7 +196,7 @@ function waitForConnectedRelay(instance: NDK, timeoutMs = 10000): Promise<void>
return new Promise((resolve, _reject) => {
const timer = setTimeout(() => {
// Even on timeout, continue — some relays may connect later
console.warn("Relay connection timeout, continuing anyway");
debug.warn("Relay connection timeout, continuing anyway");
resolve();
}, timeoutMs);
@@ -233,17 +234,17 @@ export async function ensureConnected(): Promise<boolean> {
return true; // Trust relay.connected — don't probe or disconnect
}
console.warn(`[Vega] No relays connected (${relays.length} in pool) — attempting reconnect`);
debug.warn(`[Vega] No relays connected (${relays.length} in pool) — attempting reconnect`);
try {
await withTimeout(instance.connect(), 4000, undefined);
await waitForConnectedRelay(instance, 3000);
const after = Array.from(instance.pool?.relays?.values() ?? []);
const nowConnected = after.some((r) => r.connected);
console.log(`[Vega] Reconnect ${nowConnected ? "succeeded" : "failed"}`);
debug.log(`[Vega] Reconnect ${nowConnected ? "succeeded" : "failed"}`);
return nowConnected;
} catch {
console.error("[Vega] Reconnect failed");
debug.error("[Vega] Reconnect failed");
return false;
}
}
+4 -3
View File
@@ -5,6 +5,7 @@ import { seedReactionsCache } from "../hooks/useReactions";
import { useToastStore } from "./toast";
import { dbLoadFeed, dbSaveNotes } from "../lib/db";
import { diagWrapFetch, logDiag, startRelaySnapshots, getRelayStates } from "../lib/feedDiagnostics";
import { debug } from "../lib/debug";
// Local relay imports deferred to avoid circular dependency
// import { isLocalRelayEnabled, connectLocalRelay } from "../lib/localRelay";
@@ -68,12 +69,12 @@ export const useFeedStore = create<FeedState>((set, get) => ({
const { pubkey, follows } = useUserStore.getState();
if (pubkey) {
syncToLocalRelay(pubkey, follows).catch((err) =>
console.warn("[Vega] Local relay sync failed:", err),
debug.warn("[Vega] Local relay sync failed:", err),
);
}
}
} catch (err) {
console.warn("[Vega] Local relay setup failed:", err);
debug.warn("[Vega] Local relay setup failed:", err);
}
const connectMs = Math.round(performance.now() - connectStart);
@@ -226,7 +227,7 @@ export const useFeedStore = create<FeedState>((set, get) => ({
});
liveSub = sub;
console.log("[Vega] Live feed subscription started");
debug.log("[Vega] Live feed subscription started");
},
loadTrendingFeed: async (force?: boolean) => {
+7 -6
View File
@@ -10,6 +10,7 @@ import { useNotificationsStore } from "./notifications";
import { useFeedStore } from "./feed";
import { startNotificationPoller, stopNotificationPoller } from "../lib/notificationPoller";
import { dbLoadProfile } from "../lib/db";
import { debug } from "../lib/debug";
export interface SavedAccount {
pubkey: string;
@@ -116,7 +117,7 @@ export const useUserStore = create<UserState>((set, get) => ({
// Store nsec in OS keychain
invoke<void>("store_nsec", { pubkey, nsec: nsecInput }).catch((err) => {
console.warn("Failed to store nsec in OS keychain:", err);
debug.warn("Failed to store nsec in OS keychain:", err);
});
// Load per-account NWC wallet
@@ -253,7 +254,7 @@ export const useUserStore = create<UserState>((set, get) => ({
_signerCache.set(acct.pubkey, new NDKPrivateKeySigner(privkey));
}
} catch (err) {
console.warn(`Failed to load nsec for ${acct.npub} from keychain:`, err);
debug.warn(`Failed to load nsec for ${acct.npub} from keychain:`, err);
}
}
@@ -264,7 +265,7 @@ export const useUserStore = create<UserState>((set, get) => ({
const signer = await NDKNip46Signer.fromPayload(acct.signerPayload, getNDK());
_nip46SignerCache.set(acct.pubkey, signer);
} catch (err) {
console.warn(`Failed to restore NIP-46 session for ${acct.npub}:`, err);
debug.warn(`Failed to restore NIP-46 session for ${acct.npub}:`, err);
}
}
@@ -295,7 +296,7 @@ export const useUserStore = create<UserState>((set, get) => ({
useNotificationsStore.getState().fetchNotifications(savedPubkey);
startNotificationPoller(savedPubkey);
} catch (err) {
console.warn("Failed to restore NIP-46 session:", err);
debug.warn("Failed to restore NIP-46 session:", err);
}
}
return;
@@ -343,7 +344,7 @@ export const useUserStore = create<UserState>((set, get) => ({
useUIStore.getState().setView("feed");
return;
} catch (err) {
console.warn("NIP-46 signer reconnect failed during switch:", err);
debug.warn("NIP-46 signer reconnect failed during switch:", err);
}
}
@@ -376,7 +377,7 @@ export const useUserStore = create<UserState>((set, get) => ({
succeeded = !!getNDK().signer;
}
} catch (err) {
console.warn("Keychain load failed during account switch:", err);
debug.warn("Keychain load failed during account switch:", err);
}
if (!succeeded) {
const account = get().accounts.find((a) => a.pubkey === pubkey);