Verified the legacy relay held the same 115 events as the new one (0 diff) before removing it, so no data is lost. Drops wss://goskatespots.nostr1.com from the default pools, the DM/CVM/zap relay arrays, and the cvm-server + push-service defaults.
112 lines
4.1 KiB
TypeScript
112 lines
4.1 KiB
TypeScript
// NOTE: This file should normally not be modified unless you are adding a new provider.
|
|
// To add new routes, edit the AppRouter.tsx file.
|
|
|
|
import { QueryClient } from "@tanstack/react-query";
|
|
import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client';
|
|
import { createHead, UnheadProvider } from '@unhead/react/client';
|
|
import { InferSeoMetaPlugin } from '@unhead/addons';
|
|
import { Suspense } from 'react';
|
|
import {
|
|
createIDBPersister,
|
|
shouldDehydrateQuery,
|
|
PERSIST_BUSTER,
|
|
PERSIST_MAX_AGE,
|
|
} from '@/lib/queryPersister';
|
|
import NostrProvider from '@/components/NostrProvider';
|
|
import { NostrSync } from '@/components/NostrSync';
|
|
import { Toaster } from "@/components/ui/toaster";
|
|
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
import { NostrLoginProvider } from '@nostrify/react/login';
|
|
import { AppProvider } from '@/components/AppProvider';
|
|
import { NWCProvider } from '@/contexts/NWCContext';
|
|
import { LanguageProvider } from '@/contexts/LanguageContext';
|
|
import { AppConfig } from '@/contexts/AppContext';
|
|
import { PWAInstallPrompt } from '@/components/PWAInstallPrompt';
|
|
import { BetaDisclaimerDialog } from '@/components/BetaDisclaimerDialog';
|
|
import { SplashScreen } from '@/components/SplashScreen';
|
|
import { AmberCallbackHandler } from '@/components/auth/AmberCallbackHandler';
|
|
import AppRouter from './AppRouter';
|
|
|
|
const head = createHead({
|
|
plugins: [
|
|
InferSeoMetaPlugin(),
|
|
],
|
|
});
|
|
|
|
const queryClient = new QueryClient({
|
|
defaultOptions: {
|
|
queries: {
|
|
refetchOnWindowFocus: false,
|
|
staleTime: 60000, // 1 minute
|
|
gcTime: Infinity,
|
|
},
|
|
},
|
|
});
|
|
|
|
// IndexedDB-backed persistence so the app rehydrates the last-seen spots,
|
|
// shops, events and profiles instantly on a cold start (see lib/queryPersister).
|
|
const persister = createIDBPersister();
|
|
|
|
const defaultConfig: AppConfig = {
|
|
theme: "dark",
|
|
relayMetadata: {
|
|
relays: [
|
|
{ url: 'wss://auth.nostr1.com', read: true, write: true },
|
|
{ url: 'wss://relay.ditto.pub', read: true, write: true },
|
|
{ url: 'wss://relay.skate-spots.org', read: true, write: true },
|
|
{ url: 'wss://purplepag.es', read: true, write: false }, // Profile aggregator - read only
|
|
],
|
|
updatedAt: 0,
|
|
},
|
|
useSkateRelay: true, // Use community relay by default for skate content
|
|
};
|
|
|
|
export function App() {
|
|
return (
|
|
<UnheadProvider head={head}>
|
|
<LanguageProvider>
|
|
<AppProvider storageKey="nostr:app-config" defaultConfig={defaultConfig}>
|
|
<PersistQueryClientProvider
|
|
client={queryClient}
|
|
persistOptions={{
|
|
persister,
|
|
// Discard persisted content older than 24h so nothing stale lingers.
|
|
maxAge: PERSIST_MAX_AGE,
|
|
// Invalidate the whole cache when the persisted data shape changes.
|
|
buster: PERSIST_BUSTER,
|
|
dehydrateOptions: {
|
|
// Only persist public, cold-start-relevant queries — never
|
|
// private/encrypted data. See lib/queryPersister.
|
|
shouldDehydrateQuery,
|
|
},
|
|
}}
|
|
>
|
|
<NostrLoginProvider storageKey='nostr:login'>
|
|
<NostrProvider>
|
|
<SplashScreen />
|
|
<NostrSync />
|
|
<AmberCallbackHandler />
|
|
<NWCProvider>
|
|
<TooltipProvider>
|
|
<Toaster />
|
|
<PWAInstallPrompt />
|
|
<BetaDisclaimerDialog />
|
|
<Suspense>
|
|
{/* Gentle opacity reveal so content eases in under the
|
|
departing splash (pure opacity — never shifts the map). */}
|
|
<div className="animate-app-reveal motion-reduce:animate-none">
|
|
<AppRouter />
|
|
</div>
|
|
</Suspense>
|
|
</TooltipProvider>
|
|
</NWCProvider>
|
|
</NostrProvider>
|
|
</NostrLoginProvider>
|
|
</PersistQueryClientProvider>
|
|
</AppProvider>
|
|
</LanguageProvider>
|
|
</UnheadProvider>
|
|
);
|
|
}
|
|
|
|
export default App;
|