Skip to content
This repository was archived by the owner on Apr 6, 2026. It is now read-only.

Commit 7c13572

Browse files
committed
auth tweaks
1 parent 8d0d248 commit 7c13572

2 files changed

Lines changed: 53 additions & 20 deletions

File tree

src/lib/components/auth/AuthFlow.svelte

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,21 @@
5555
tempKeys = { mnemonic: '', publicKey, privateKey };
5656
await authStore.setKeys(publicKey, privateKey);
5757
saveKeysToStorage(publicKey, privateKey);
58+
59+
// Check if user is already approved or admin - skip pending approval
60+
try {
61+
const { checkWhitelistStatus } = await import('$lib/nostr/whitelist');
62+
const status = await checkWhitelistStatus(publicKey);
63+
if (status.isApproved || status.isAdmin) {
64+
// Already approved - go directly to chat
65+
await goto(`${base}/chat`);
66+
return;
67+
}
68+
} catch (e) {
69+
console.warn('[AuthFlow] Failed to check whitelist status:', e);
70+
// Fall through to pending approval
71+
}
72+
5873
currentStep = 'pending-approval';
5974
} else {
6075
currentStep = 'signup';

src/lib/stores/reactions.ts

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,11 @@ function createReactionStore() {
8080
/**
8181
* Convert NostrEvent to NDKEvent
8282
*/
83-
function nostrEventToNDK(event: NostrEvent): NDKEvent {
83+
function nostrEventToNDK(event: NostrEvent): NDKEvent | null {
8484
const ndkInstance = ndk();
8585
if (!ndkInstance) {
86-
throw new Error('NDK not initialized');
86+
console.debug('[Reactions] NDK not initialized, skipping event conversion');
87+
return null;
8788
}
8889

8990
const ndkEvent = new NDKEvent(ndkInstance);
@@ -149,7 +150,9 @@ function createReactionStore() {
149150

150151
if (!isDuplicate) {
151152
const updated = [...existing, reactionData];
152-
state.reactionsByMessage.set(reactionData.eventId, updated);
153+
const reactionsByMessage = new Map(state.reactionsByMessage);
154+
reactionsByMessage.set(reactionData.eventId, updated);
155+
return { ...state, reactionsByMessage, loading: false };
153156
}
154157

155158
return { ...state, loading: false };
@@ -198,10 +201,12 @@ function createReactionStore() {
198201
r => r.reactorPubkey !== optimisticReaction.reactorPubkey
199202
);
200203

201-
state.reactionsByMessage.set(messageId, [...filtered, optimisticReaction]);
202-
state.optimisticReactions.set(optimisticId, optimisticReaction);
204+
const reactionsByMessage = new Map(state.reactionsByMessage);
205+
reactionsByMessage.set(messageId, [...filtered, optimisticReaction]);
206+
const optimisticReactions = new Map(state.optimisticReactions);
207+
optimisticReactions.set(optimisticId, optimisticReaction);
203208

204-
return { ...state };
209+
return { ...state, reactionsByMessage, optimisticReactions };
205210
});
206211

207212
try {
@@ -214,6 +219,9 @@ function createReactionStore() {
214219
);
215220

216221
const ndkEvent = nostrEventToNDK(event);
222+
if (!ndkEvent) {
223+
throw new Error('NDK not connected');
224+
}
217225
await publishEvent(ndkEvent);
218226

219227
// Replace optimistic with real reaction
@@ -228,10 +236,12 @@ function createReactionStore() {
228236
r => r.reactionEventId !== optimisticId
229237
);
230238

231-
state.reactionsByMessage.set(messageId, [...withoutOptimistic, realReaction]);
232-
state.optimisticReactions.delete(optimisticId);
239+
const reactionsByMessage = new Map(state.reactionsByMessage);
240+
reactionsByMessage.set(messageId, [...withoutOptimistic, realReaction]);
241+
const optimisticReactions = new Map(state.optimisticReactions);
242+
optimisticReactions.delete(optimisticId);
233243

234-
return { ...state };
244+
return { ...state, reactionsByMessage, optimisticReactions };
235245
});
236246

237247
} catch (error) {
@@ -240,11 +250,15 @@ function createReactionStore() {
240250
const existing = state.reactionsByMessage.get(messageId) || [];
241251
const filtered = existing.filter(r => r.reactionEventId !== optimisticId);
242252

243-
state.reactionsByMessage.set(messageId, filtered);
244-
state.optimisticReactions.delete(optimisticId);
253+
const reactionsByMessage = new Map(state.reactionsByMessage);
254+
reactionsByMessage.set(messageId, filtered);
255+
const optimisticReactions = new Map(state.optimisticReactions);
256+
optimisticReactions.delete(optimisticId);
245257

246258
return {
247259
...state,
260+
reactionsByMessage,
261+
optimisticReactions,
248262
error: error instanceof Error ? error.message : 'Failed to add reaction'
249263
};
250264
});
@@ -269,9 +283,10 @@ function createReactionStore() {
269283
const existing = state.reactionsByMessage.get(messageId) || [];
270284
const filtered = existing.filter(r => r.reactorPubkey !== auth.publicKey);
271285

272-
state.reactionsByMessage.set(messageId, filtered);
286+
const reactionsByMessage = new Map(state.reactionsByMessage);
287+
reactionsByMessage.set(messageId, filtered);
273288

274-
return { ...state };
289+
return { ...state, reactionsByMessage };
275290
});
276291

277292
// Note: NIP-25 doesn't specify reaction deletion
@@ -313,7 +328,9 @@ function createReactionStore() {
313328

314329
if (!isDuplicate) {
315330
const updated = [...existing, reactionData];
316-
state.reactionsByMessage.set(reactionData.eventId, updated);
331+
const reactionsByMessage = new Map(state.reactionsByMessage);
332+
reactionsByMessage.set(reactionData.eventId, updated);
333+
return { ...state, reactionsByMessage };
317334
}
318335

319336
return { ...state };
@@ -323,11 +340,12 @@ function createReactionStore() {
323340
// Track subscription
324341
update(state => {
325342
const subs = state.activeSubscriptions.get(relayUrl) || [];
326-
state.activeSubscriptions.set(relayUrl, [
343+
const activeSubscriptions = new Map(state.activeSubscriptions);
344+
activeSubscriptions.set(relayUrl, [
327345
...subs,
328346
{ subId, subscription }
329347
]);
330-
return { ...state };
348+
return { ...state, activeSubscriptions };
331349
});
332350
},
333351

@@ -344,8 +362,9 @@ function createReactionStore() {
344362
});
345363

346364
update(s => {
347-
s.activeSubscriptions.delete(relayUrl);
348-
return { ...s };
365+
const activeSubscriptions = new Map(s.activeSubscriptions);
366+
activeSubscriptions.delete(relayUrl);
367+
return { ...s, activeSubscriptions };
349368
});
350369
}
351370
},
@@ -408,8 +427,7 @@ function createReactionStore() {
408427
});
409428

410429
update(s => {
411-
s.activeSubscriptions.clear();
412-
return { ...s };
430+
return { ...s, activeSubscriptions: new Map() };
413431
});
414432
}
415433
};

0 commit comments

Comments
 (0)