diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index b5d80b9a07..a9314ae4e3 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -238,6 +238,10 @@ jobs: extension: - 'surfsense_browser_extension/**' + - name: Install native build dependencies + if: steps.frontend-changes.outputs.web == 'true' + run: sudo apt-get install -y libreadline-dev + - name: Install dependencies for web if: steps.frontend-changes.outputs.web == 'true' working-directory: surfsense_web diff --git a/surfsense_backend/app/app.py b/surfsense_backend/app/app.py index 5130aa47e5..8a8c8ee8d9 100644 --- a/surfsense_backend/app/app.py +++ b/surfsense_backend/app/app.py @@ -43,6 +43,7 @@ from app.schemas import UserCreate, UserRead, UserUpdate from app.tasks.surfsense_docs_indexer import seed_surfsense_docs from app.users import ( + SECRET, auth_backend, current_active_user, fastapi_users, @@ -819,6 +820,7 @@ async def dispatch( tags=["auth"], ) + # Register /users/me BEFORE fastapi_users.get_users_router so our routes take # precedence (FastAPI first-match wins). fastapi-users' internal /users/me only # validates JWT — it does not check request.state.proxy_user set by the proxy @@ -842,6 +844,8 @@ async def update_current_user_me( # JWT-loaded one. user_manager.get() returns the session-attached instance. db_user = await user_manager.get(user.id) return await user_manager.update(user_update, db_user, safe=True, request=request) + + app.include_router( fastapi_users.get_users_router(UserRead, UserUpdate), prefix="/users", diff --git a/surfsense_web/atoms/user/user-query.atoms.ts b/surfsense_web/atoms/user/user-query.atoms.ts index 8792c4a962..4b6717440d 100644 --- a/surfsense_web/atoms/user/user-query.atoms.ts +++ b/surfsense_web/atoms/user/user-query.atoms.ts @@ -1,6 +1,6 @@ import { atomWithQuery } from "jotai-tanstack-query"; -import { getBearerToken } from "@/lib/auth-utils"; import { userApiService } from "@/lib/apis/user-api.service"; +import { getBearerToken } from "@/lib/auth-utils"; export const USER_QUERY_KEY = ["user", "me"] as const; const userQueryFn = () => userApiService.getMe(); diff --git a/surfsense_web/components/TokenHandler.tsx b/surfsense_web/components/TokenHandler.tsx index 88dd66550b..4d160aa402 100644 --- a/surfsense_web/components/TokenHandler.tsx +++ b/surfsense_web/components/TokenHandler.tsx @@ -6,7 +6,6 @@ // To restore native OAuth login, uncomment this file and re-register // the /auth/callback route. - // "use client"; // // import { useEffect } from "react"; diff --git a/surfsense_web/components/tool-ui/generate-image.tsx b/surfsense_web/components/tool-ui/generate-image.tsx index f077dcdadf..7fab2bf402 100644 --- a/surfsense_web/components/tool-ui/generate-image.tsx +++ b/surfsense_web/components/tool-ui/generate-image.tsx @@ -135,8 +135,8 @@ export const GenerateImageToolUI = ({ }; export { - GenerateImageArgsSchema, - GenerateImageResultSchema, type GenerateImageArgs, + GenerateImageArgsSchema, type GenerateImageResult, + GenerateImageResultSchema, }; diff --git a/surfsense_web/components/tool-ui/sandbox-execute.tsx b/surfsense_web/components/tool-ui/sandbox-execute.tsx index 3d309332e6..bf6595d24a 100644 --- a/surfsense_web/components/tool-ui/sandbox-execute.tsx +++ b/surfsense_web/components/tool-ui/sandbox-execute.tsx @@ -419,4 +419,4 @@ export const SandboxExecuteToolUI = ({ return ; }; -export { ExecuteArgsSchema, ExecuteResultSchema, type ExecuteArgs, type ExecuteResult }; +export { type ExecuteArgs, ExecuteArgsSchema, type ExecuteResult, ExecuteResultSchema }; diff --git a/surfsense_web/components/tool-ui/user-memory.tsx b/surfsense_web/components/tool-ui/user-memory.tsx index f7c446806e..0c8a0030db 100644 --- a/surfsense_web/components/tool-ui/user-memory.tsx +++ b/surfsense_web/components/tool-ui/user-memory.tsx @@ -90,8 +90,8 @@ export const UpdateMemoryToolUI = ({ // ============================================================================ export { - UpdateMemoryArgsSchema, - UpdateMemoryResultSchema, type UpdateMemoryArgs, + UpdateMemoryArgsSchema, type UpdateMemoryResult, + UpdateMemoryResultSchema, }; diff --git a/surfsense_web/components/tool-ui/write-todos.tsx b/surfsense_web/components/tool-ui/write-todos.tsx index 104cbcf44c..53c9083d8e 100644 --- a/surfsense_web/components/tool-ui/write-todos.tsx +++ b/surfsense_web/components/tool-ui/write-todos.tsx @@ -157,4 +157,4 @@ export const WriteTodosToolUI = ({ ); }; -export { WriteTodosSchema, type WriteTodosData }; +export { type WriteTodosData, WriteTodosSchema }; diff --git a/surfsense_web/components/ui/accordion.tsx b/surfsense_web/components/ui/accordion.tsx index 51ac3e849d..e4c64ef835 100644 --- a/surfsense_web/components/ui/accordion.tsx +++ b/surfsense_web/components/ui/accordion.tsx @@ -61,4 +61,4 @@ function AccordionContent({ ); } -export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }; +export { Accordion, AccordionContent, AccordionItem, AccordionTrigger }; diff --git a/surfsense_web/components/ui/alert-dialog.tsx b/surfsense_web/components/ui/alert-dialog.tsx index 4db90020f5..f3ffc88efb 100644 --- a/surfsense_web/components/ui/alert-dialog.tsx +++ b/surfsense_web/components/ui/alert-dialog.tsx @@ -121,14 +121,14 @@ function AlertDialogCancel({ export { AlertDialog, - AlertDialogPortal, - AlertDialogOverlay, - AlertDialogTrigger, + AlertDialogAction, + AlertDialogCancel, AlertDialogContent, - AlertDialogHeader, + AlertDialogDescription, AlertDialogFooter, + AlertDialogHeader, + AlertDialogOverlay, + AlertDialogPortal, AlertDialogTitle, - AlertDialogDescription, - AlertDialogAction, - AlertDialogCancel, + AlertDialogTrigger, }; diff --git a/surfsense_web/components/ui/alert.tsx b/surfsense_web/components/ui/alert.tsx index 2d777db67b..39123888e2 100644 --- a/surfsense_web/components/ui/alert.tsx +++ b/surfsense_web/components/ui/alert.tsx @@ -59,4 +59,4 @@ function AlertDescription({ className, ...props }: React.ComponentProps<"div">) ); } -export { Alert, AlertTitle, AlertDescription }; +export { Alert, AlertDescription, AlertTitle }; diff --git a/surfsense_web/components/ui/animated-tabs.tsx b/surfsense_web/components/ui/animated-tabs.tsx index 7bc12821f1..333c6d8ce8 100644 --- a/surfsense_web/components/ui/animated-tabs.tsx +++ b/surfsense_web/components/ui/animated-tabs.tsx @@ -556,4 +556,4 @@ const TabsContent = forwardRef< }); TabsContent.displayName = "TabsContent"; -export { Tabs, TabsList, TabsTrigger, TabsContent }; +export { Tabs, TabsContent, TabsList, TabsTrigger }; diff --git a/surfsense_web/components/ui/avatar.tsx b/surfsense_web/components/ui/avatar.tsx index 984a66e8ca..e0314c53d2 100644 --- a/surfsense_web/components/ui/avatar.tsx +++ b/surfsense_web/components/ui/avatar.tsx @@ -55,4 +55,4 @@ function AvatarGroupCount({ className, ...props }: React.ComponentProps<"span">) ); } -export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount }; +export { Avatar, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage }; diff --git a/surfsense_web/components/ui/card.tsx b/surfsense_web/components/ui/card.tsx index babb851b07..408aa5552b 100644 --- a/surfsense_web/components/ui/card.tsx +++ b/surfsense_web/components/ui/card.tsx @@ -52,4 +52,4 @@ const CardFooter = React.forwardRef; } -export { Collapsible, CollapsibleTrigger, CollapsibleContent }; +export { Collapsible, CollapsibleContent, CollapsibleTrigger }; diff --git a/surfsense_web/components/ui/command.tsx b/surfsense_web/components/ui/command.tsx index 034dbab5eb..9cf82113bb 100644 --- a/surfsense_web/components/ui/command.tsx +++ b/surfsense_web/components/ui/command.tsx @@ -150,11 +150,11 @@ function CommandShortcut({ className, ...props }: React.ComponentProps<"span">) export { Command, CommandDialog, - CommandInput, - CommandList, CommandEmpty, CommandGroup, + CommandInput, CommandItem, - CommandShortcut, + CommandList, CommandSeparator, + CommandShortcut, }; diff --git a/surfsense_web/components/ui/context-menu.tsx b/surfsense_web/components/ui/context-menu.tsx index 8fa7c6d1a3..f24e547f57 100644 --- a/surfsense_web/components/ui/context-menu.tsx +++ b/surfsense_web/components/ui/context-menu.tsx @@ -207,18 +207,18 @@ function ContextMenuShortcut({ className, ...props }: React.ComponentProps<"span export { ContextMenu, - ContextMenuTrigger, + ContextMenuCheckboxItem, ContextMenuContent, + ContextMenuGroup, ContextMenuItem, - ContextMenuCheckboxItem, - ContextMenuRadioItem, ContextMenuLabel, + ContextMenuPortal, + ContextMenuRadioGroup, + ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, - ContextMenuGroup, - ContextMenuPortal, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, - ContextMenuRadioGroup, + ContextMenuTrigger, }; diff --git a/surfsense_web/components/ui/dialog.tsx b/surfsense_web/components/ui/dialog.tsx index 90c8bf5383..a897379c3e 100644 --- a/surfsense_web/components/ui/dialog.tsx +++ b/surfsense_web/components/ui/dialog.tsx @@ -92,13 +92,13 @@ DialogDescription.displayName = DialogPrimitive.Description.displayName; export { Dialog, - DialogPortal, - DialogOverlay, DialogClose, - DialogTrigger, DialogContent, - DialogHeader, + DialogDescription, DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, DialogTitle, - DialogDescription, + DialogTrigger, }; diff --git a/surfsense_web/components/ui/drawer.tsx b/surfsense_web/components/ui/drawer.tsx index d02996d960..cbb5a471b9 100644 --- a/surfsense_web/components/ui/drawer.tsx +++ b/surfsense_web/components/ui/drawer.tsx @@ -102,14 +102,14 @@ DrawerHandle.displayName = "DrawerHandle"; export { Drawer, - DrawerPortal, - DrawerOverlay, - DrawerTrigger, DrawerClose, DrawerContent, - DrawerHeader, - DrawerFooter, - DrawerTitle, DrawerDescription, + DrawerFooter, DrawerHandle, + DrawerHeader, + DrawerOverlay, + DrawerPortal, + DrawerTitle, + DrawerTrigger, }; diff --git a/surfsense_web/components/ui/dropdown-menu.tsx b/surfsense_web/components/ui/dropdown-menu.tsx index 421bcfcd29..666cda0fc8 100644 --- a/surfsense_web/components/ui/dropdown-menu.tsx +++ b/surfsense_web/components/ui/dropdown-menu.tsx @@ -211,18 +211,18 @@ function DropdownMenuSubContent({ export { DropdownMenu, - DropdownMenuPortal, - DropdownMenuTrigger, + DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, - DropdownMenuLabel, DropdownMenuItem, - DropdownMenuCheckboxItem, + DropdownMenuLabel, + DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, - DropdownMenuSubTrigger, DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, }; diff --git a/surfsense_web/components/ui/expanded-gif-overlay.tsx b/surfsense_web/components/ui/expanded-gif-overlay.tsx index 532ba1d32f..33b40facf7 100644 --- a/surfsense_web/components/ui/expanded-gif-overlay.tsx +++ b/surfsense_web/components/ui/expanded-gif-overlay.tsx @@ -91,4 +91,4 @@ const ExpandedGifOverlay = ExpandedMediaOverlay; /** @deprecated Use useExpandedMedia instead */ const useExpandedGif = useExpandedMedia; -export { ExpandedMediaOverlay, useExpandedMedia, ExpandedGifOverlay, useExpandedGif }; +export { ExpandedGifOverlay, ExpandedMediaOverlay, useExpandedGif, useExpandedMedia }; diff --git a/surfsense_web/components/ui/form.tsx b/surfsense_web/components/ui/form.tsx index 55f0034456..2093a523cc 100644 --- a/surfsense_web/components/ui/form.tsx +++ b/surfsense_web/components/ui/form.tsx @@ -140,12 +140,12 @@ function FormMessage({ className, ...props }: React.ComponentProps<"p">) { } export { - useFormField, Form, - FormItem, - FormLabel, FormControl, FormDescription, - FormMessage, FormField, + FormItem, + FormLabel, + FormMessage, + useFormField, }; diff --git a/surfsense_web/components/ui/pagination.tsx b/surfsense_web/components/ui/pagination.tsx index d8cb16cc1a..613992d370 100644 --- a/surfsense_web/components/ui/pagination.tsx +++ b/surfsense_web/components/ui/pagination.tsx @@ -96,9 +96,9 @@ function PaginationEllipsis({ className, ...props }: React.ComponentProps<"span" export { Pagination, PaginationContent, - PaginationLink, + PaginationEllipsis, PaginationItem, - PaginationPrevious, + PaginationLink, PaginationNext, - PaginationEllipsis, + PaginationPrevious, }; diff --git a/surfsense_web/components/ui/popover.tsx b/surfsense_web/components/ui/popover.tsx index 0d2759543a..b3b92542d0 100644 --- a/surfsense_web/components/ui/popover.tsx +++ b/surfsense_web/components/ui/popover.tsx @@ -39,4 +39,4 @@ function PopoverAnchor({ ...props }: React.ComponentProps; } -export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }; +export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger }; diff --git a/surfsense_web/components/ui/sheet.tsx b/surfsense_web/components/ui/sheet.tsx index 6ba22350e4..58eb549652 100644 --- a/surfsense_web/components/ui/sheet.tsx +++ b/surfsense_web/components/ui/sheet.tsx @@ -122,11 +122,11 @@ function SheetDescription({ export { Sheet, - SheetTrigger, SheetClose, SheetContent, - SheetHeader, + SheetDescription, SheetFooter, + SheetHeader, SheetTitle, - SheetDescription, + SheetTrigger, }; diff --git a/surfsense_web/components/ui/table.tsx b/surfsense_web/components/ui/table.tsx index f88d2f5922..fa170ec86b 100644 --- a/surfsense_web/components/ui/table.tsx +++ b/surfsense_web/components/ui/table.tsx @@ -89,4 +89,4 @@ function TableCaption({ className, ...props }: React.ComponentProps<"caption">) ); } -export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }; +export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow }; diff --git a/surfsense_web/components/ui/tabs.tsx b/surfsense_web/components/ui/tabs.tsx index 5dbfc4bc5b..29c95eaf74 100644 --- a/surfsense_web/components/ui/tabs.tsx +++ b/surfsense_web/components/ui/tabs.tsx @@ -52,4 +52,4 @@ const TabsContent = React.forwardRef< )); TabsContent.displayName = TabsPrimitive.Content.displayName; -export { Tabs, TabsList, TabsTrigger, TabsContent }; +export { Tabs, TabsContent, TabsList, TabsTrigger }; diff --git a/surfsense_web/components/ui/tooltip.tsx b/surfsense_web/components/ui/tooltip.tsx index 4253c50d48..b21d5f005c 100644 --- a/surfsense_web/components/ui/tooltip.tsx +++ b/surfsense_web/components/ui/tooltip.tsx @@ -82,4 +82,4 @@ function TooltipContent({ ); } -export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }; +export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }; diff --git a/surfsense_web/lib/apis/connectors-api.service.ts b/surfsense_web/lib/apis/connectors-api.service.ts index 4b6d69883e..7067ee0254 100644 --- a/surfsense_web/lib/apis/connectors-api.service.ts +++ b/surfsense_web/lib/apis/connectors-api.service.ts @@ -426,6 +426,6 @@ export interface ObsidianStats { last_sync_at: string | null; } -export type { SlackChannel, DiscordChannel }; +export type { DiscordChannel, SlackChannel }; export const connectorsApiService = new ConnectorsApiService(); diff --git a/surfsense_web/svgr.d.ts b/surfsense_web/svgr.d.ts index ada7f47c59..2486ffa482 100644 --- a/surfsense_web/svgr.d.ts +++ b/surfsense_web/svgr.d.ts @@ -1,5 +1,6 @@ declare module "*.svg" { import type { FC, SVGProps } from "react"; + const content: FC>; export default content; }