Major changes: - Restructure plugin architecture: moved federation logic into a dedicated `federation` plugin with Better Auth integration, defining schemas for server registry, key rotation, and blacklist management - Extract encryption layer: new `oven` plugin handles end-to-end encryption (E2EE) with OLM client/server implementations - Reorganize social features: consolidated social endpoints (posts, follows, blocks, mutes) and removed legacy plugin patterns in favor of unified plugin structure - Decentralized key management: refactored `keytools` and `keygen` to support federation key rotation with challenge tokens and health checks Infrastructure updates: - Upgrade dependencies: bump Better Auth to 1.6.9, React to 19.2.5, Next.js to 16.2.3, Tailwind to 4.2.4 - Add cryptographic libraries: @scure/bip39, @signalapp/libsignal-client, @matrix-org/matrix-sdk-crypto-wasm for enhanced federation security - Add utilities: base58-js, uuid for federation identifier handling - Update database schema with new federation tables (serverRegistry, rotateChallengeTokens, blacklistedServers) Minor updates: test suite alignment, storage client cleanup, PostFederationSchema refinements Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
No EOL
1.3 KiB
TypeScript
58 lines
No EOL
1.3 KiB
TypeScript
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
import type { Metadata } from "next";
|
|
import { ThemeProvider } from "next-themes";
|
|
import { Bebas_Neue, DM_Sans, Space_Mono } from "next/font/google";
|
|
import { Toaster } from "sonner";
|
|
import "./globals.css";
|
|
|
|
const fontSans = DM_Sans({
|
|
subsets: ["latin"],
|
|
weight: ["300", "400", "500"],
|
|
variable: "--font-sans",
|
|
});
|
|
|
|
const fontMono = Space_Mono({
|
|
subsets: ["latin"],
|
|
weight: ["400", "700"],
|
|
style: ["normal", "italic"],
|
|
variable: "--font-mono",
|
|
});
|
|
|
|
const fontDisplay = Bebas_Neue({
|
|
subsets: ["latin"],
|
|
weight: "400",
|
|
variable: "--font-display",
|
|
});
|
|
|
|
export const metadata: Metadata = {
|
|
title: "Sipher",
|
|
description: "A federated social media platform for the modern age.",
|
|
icons: {
|
|
icon: "/logo/sipher.svg",
|
|
},
|
|
manifest: "/manifest.json"
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
return (
|
|
<html suppressHydrationWarning>
|
|
<body className={`${fontSans.variable} ${fontMono.variable} ${fontDisplay.variable} antialiased`}>
|
|
<ThemeProvider
|
|
attribute="class"
|
|
defaultTheme="dark"
|
|
enableSystem
|
|
disableTransitionOnChange
|
|
>
|
|
<TooltipProvider>
|
|
<Toaster />
|
|
{children}
|
|
</TooltipProvider>
|
|
</ThemeProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
} |