From 844b1ae3347460f2153a3ca8847c11318967521a Mon Sep 17 00:00:00 2001 From: Anselm Eickhoff Date: Fri, 6 Sep 2024 21:11:43 +0100 Subject: [PATCH] feat: guest auth (#141) * feat: Start using guest auth * feat: Implement more functionality to work as guest * chore: update package and tweak public route * chore: update root package json * chore: update web package json --------- Co-authored-by: Aslam H --- bun.lockb | Bin 404552 -> 398912 bytes package.json | 2 +- web/app/(pages)/layout.tsx | 42 ++++--- web/app/layout.tsx | 3 +- web/components/custom/sidebar/sidebar.tsx | 19 +++- web/components/routes/public/Autocomplete.tsx | 13 +-- .../routes/public/PublicHomeRoute.tsx | 16 +-- .../routes/topics/detail/Header.tsx | 27 +++-- .../routes/topics/detail/TopicDetailRoute.tsx | 13 +-- .../topics/detail/partials/link-item.tsx | 26 +++-- .../routes/topics/detail/partials/section.tsx | 19 +--- .../topics/detail/partials/topic-sections.tsx | 10 -- web/hooks/use-topic-data.ts | 15 +++ web/lib/providers/jazz-provider.tsx | 103 +++--------------- web/middleware.ts | 28 +++-- web/package.json | 7 +- 16 files changed, 138 insertions(+), 205 deletions(-) create mode 100644 web/hooks/use-topic-data.ts diff --git a/bun.lockb b/bun.lockb index 033042b27ffa78e3a4fca159ab68d26fae342e74..90ac2ee464e5bca91b6c2337559c607c526491a6 100755 GIT binary patch delta 79368 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 QdWC(z{%@p{3VUw-KWIhgk^lez delta 82339 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 diff --git a/package.json b/package.json index 900ca126..7c66e8cf 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "@tauri-apps/cli": "^2.0.0-rc.12", "@tauri-apps/plugin-fs": "^2.0.0-rc.2", - "jazz-nodejs": "0.7.35-unique.2", + "jazz-nodejs": "0.7.35-guest-auth.5", "react-icons": "^5.3.0" }, "devDependencies": { diff --git a/web/app/(pages)/layout.tsx b/web/app/(pages)/layout.tsx index c4d3ec97..ef9144e7 100644 --- a/web/app/(pages)/layout.tsx +++ b/web/app/(pages)/layout.tsx @@ -1,32 +1,30 @@ -import { SignedInClient } from "@/components/custom/clerk/signed-in-client" +"use client" + import { Sidebar } from "@/components/custom/sidebar/sidebar" -import { JazzClerkAuth, JazzProvider } from "@/lib/providers/jazz-provider" -import { currentUser } from "@clerk/nextjs/server" import { CommandPalette } from "@/components/custom/command-palette/command-palette" +import { useAccountOrGuest } from "@/lib/providers/jazz-provider" +import { usePathname } from "next/navigation" +import PublicHomeRoute from "@/components/routes/public/PublicHomeRoute" -export default async function PageLayout({ children }: { children: React.ReactNode }) { - const user = await currentUser() +export default function PageLayout({ children }: { children: React.ReactNode }) { + const { me } = useAccountOrGuest() + const pathname = usePathname() - if (!user) { - return children + if (me._type === "Anonymous" && pathname === "/") { + return } return ( - - - -
- - +
+ -
-
- {children} -
-
-
- - - + {me._type !== "Anonymous" && } + +
+
+ {children} +
+
+
) } diff --git a/web/app/layout.tsx b/web/app/layout.tsx index d2e3d43a..488b22b5 100644 --- a/web/app/layout.tsx +++ b/web/app/layout.tsx @@ -8,6 +8,7 @@ import { Toaster } from "@/components/ui/sonner" import { ConfirmProvider } from "@/lib/providers/confirm-provider" import { DeepLinkProvider } from "@/lib/providers/deep-link-provider" import { GeistMono, GeistSans } from "./fonts" +import { JazzAndAuth } from "@/lib/providers/jazz-provider" export const metadata: Metadata = { title: "Learn Anything", @@ -27,7 +28,7 @@ export default function RootLayout({ - {children} + {children} diff --git a/web/components/custom/sidebar/sidebar.tsx b/web/components/custom/sidebar/sidebar.tsx index ec947915..54c4d1c7 100644 --- a/web/components/custom/sidebar/sidebar.tsx +++ b/web/components/custom/sidebar/sidebar.tsx @@ -14,6 +14,8 @@ import { LinkSection } from "./partial/link-section" import { PageSection } from "./partial/page-section" import { TopicSection } from "./partial/topic-section" import { ProfileSection } from "./partial/profile-section" +import { useAccountOrGuest } from "@/lib/providers/jazz-provider" +import { SignInButton } from "@clerk/nextjs" interface SidebarContextType { isCollapsed: boolean @@ -109,7 +111,9 @@ const LogoAndSearch: React.FC = React.memo(() => { LogoAndSearch.displayName = "LogoAndSearch" const SidebarContent: React.FC = React.memo(() => { + const { me } = useAccountOrGuest() const pathname = usePathname() + return ( <> - + + {me._type === "Account" ? ( + + ) : ( +
+ Fake profile section +
+ )} ) }) diff --git a/web/components/routes/public/Autocomplete.tsx b/web/components/routes/public/Autocomplete.tsx index 4315cdbf..7c022a83 100644 --- a/web/components/routes/public/Autocomplete.tsx +++ b/web/components/routes/public/Autocomplete.tsx @@ -13,7 +13,7 @@ interface GraphNode { interface AutocompleteProps { topics: GraphNode[] - onSelect: (topic: GraphNode) => void + onSelect: (topic: string) => void onInputChange: (value: string) => void } @@ -46,18 +46,16 @@ export function Autocomplete({ topics = [], onSelect, onInputChange }: Autocompl const handleSelect = useCallback( (topic: GraphNode) => { - setInputValue(topic.prettyName) + // setInputValue(topicPrettyName) setOpen(false) - onSelect(topic) + onSelect(topic.name) }, [onSelect] ) const handleKeyDown = useCallback( (e: React.KeyboardEvent) => { - if (e.key === "Enter" && filteredTopics.length > 0) { - handleSelect(filteredTopics[0]) - } else if ((e.key === "Backspace" || e.key === "Delete") && inputRef.current?.value === "") { + if ((e.key === "Backspace" || e.key === "Delete") && inputRef.current?.value === "") { setOpen(true) setIsInitialOpen(true) } @@ -65,7 +63,7 @@ export function Autocomplete({ topics = [], onSelect, onInputChange }: Autocompl setHasInteracted(true) } }, - [filteredTopics, handleSelect, hasInteracted] + [hasInteracted] ) const handleInputChange = useCallback( @@ -143,6 +141,7 @@ export function Autocomplete({ topics = [], onSelect, onInputChange }: Autocompl {filteredTopics.map((topic, index) => ( handleSelect(topic)} className="min-h-10 rounded-none px-3 py-1.5" > diff --git a/web/components/routes/public/PublicHomeRoute.tsx b/web/components/routes/public/PublicHomeRoute.tsx index 8f9e6344..ed694a66 100644 --- a/web/components/routes/public/PublicHomeRoute.tsx +++ b/web/components/routes/public/PublicHomeRoute.tsx @@ -23,8 +23,8 @@ export function PublicHomeRoute() { const raw_graph_data = React.use(graph_data_promise) as GraphNode[] const [filterQuery, setFilterQuery] = React.useState("") - const handleTopicSelect = (topicName: string) => { - router.push(`/${topicName}`) + const handleTopicSelect = (topic: string) => { + router.replace(`/${topic}`) } const handleInputChange = (value: string) => { @@ -34,11 +34,7 @@ export function PublicHomeRoute() { return ( <>
- handleTopicSelect(val)} - filter_query={filterQuery} - /> +
@@ -53,11 +49,7 @@ export function PublicHomeRoute() { > I want to learn - handleTopicSelect(topic.name)} - onInputChange={handleInputChange} - /> +
diff --git a/web/components/routes/topics/detail/Header.tsx b/web/components/routes/topics/detail/Header.tsx index 0b9a9834..244dbc06 100644 --- a/web/components/routes/topics/detail/Header.tsx +++ b/web/components/routes/topics/detail/Header.tsx @@ -4,15 +4,16 @@ import * as React from "react" import { ContentHeader, SidebarToggleButton } from "@/components/custom/content-header" import { ListOfTopics, Topic } from "@/lib/schema" import { LearningStateSelector } from "@/components/custom/learning-state-selector" -import { useAccount } from "@/lib/providers/jazz-provider" +import { useAccountOrGuest } from "@/lib/providers/jazz-provider" import { LearningStateValue } from "@/lib/constants" +import { toast } from "sonner" interface TopicDetailHeaderProps { topic: Topic } export const TopicDetailHeader = React.memo(function TopicDetailHeader({ topic }: TopicDetailHeaderProps) { - const { me } = useAccount({ + const { me } = useAccountOrGuest({ root: { topicsWantToLearn: [], topicsLearning: [], @@ -26,34 +27,44 @@ export const TopicDetailHeader = React.memo(function TopicDetailHeader({ topic } learningState: LearningStateValue } | null = null - const wantToLearnIndex = me?.root.topicsWantToLearn.findIndex(t => t?.id === topic.id) ?? -1 + const wantToLearnIndex = + me?._type === "Anonymous" ? -1 : (me?.root.topicsWantToLearn.findIndex(t => t?.id === topic.id) ?? -1) if (wantToLearnIndex !== -1) { p = { index: wantToLearnIndex, - topic: me?.root.topicsWantToLearn[wantToLearnIndex], + // TODO: fix this type error by doing better conditionals on both index and p + topic: me && me._type !== "Anonymous" ? me.root.topicsWantToLearn[wantToLearnIndex] : undefined, learningState: "wantToLearn" } } - const learningIndex = me?.root.topicsLearning.findIndex(t => t?.id === topic.id) ?? -1 + const learningIndex = + me?._type === "Anonymous" ? -1 : (me?.root.topicsLearning.findIndex(t => t?.id === topic.id) ?? -1) if (learningIndex !== -1) { p = { index: learningIndex, - topic: me?.root.topicsLearning[learningIndex], + topic: me && me._type !== "Anonymous" ? me?.root.topicsLearning[learningIndex] : undefined, learningState: "learning" } } - const learnedIndex = me?.root.topicsLearned.findIndex(t => t?.id === topic.id) ?? -1 + const learnedIndex = + me?._type === "Anonymous" ? -1 : (me?.root.topicsLearned.findIndex(t => t?.id === topic.id) ?? -1) if (learnedIndex !== -1) { p = { index: learnedIndex, - topic: me?.root.topicsLearned[learnedIndex], + topic: me && me._type !== "Anonymous" ? me?.root.topicsLearned[learnedIndex] : undefined, learningState: "learned" } } const handleAddToProfile = (learningState: LearningStateValue) => { + if (me?._type === "Anonymous") { + // TODO: handle better + toast.error("You need to sign in to add links to your personal list.") + return + } + const topicLists: Record = { wantToLearn: me?.root.topicsWantToLearn, learning: me?.root.topicsLearning, diff --git a/web/components/routes/topics/detail/TopicDetailRoute.tsx b/web/components/routes/topics/detail/TopicDetailRoute.tsx index 8688ceea..1bd5f42c 100644 --- a/web/components/routes/topics/detail/TopicDetailRoute.tsx +++ b/web/components/routes/topics/detail/TopicDetailRoute.tsx @@ -4,9 +4,8 @@ import React, { useMemo, useRef } from "react" import { TopicDetailHeader } from "./Header" import { TopicSections } from "./partials/topic-sections" import { atom } from "jotai" -import { useAccount, useCoState } from "@/lib/providers/jazz-provider" -import { Topic } from "@/lib/schema" -import { JAZZ_GLOBAL_GROUP_ID } from "@/lib/constants" +import { useAccount, useAccountOrGuest } from "@/lib/providers/jazz-provider" +import { useTopicData } from "@/hooks/use-topic-data" interface TopicDetailRouteProps { topicName: string @@ -15,10 +14,8 @@ interface TopicDetailRouteProps { export const openPopoverForIdAtom = atom(null) export function TopicDetailRoute({ topicName }: TopicDetailRouteProps) { - const { me } = useAccount({ root: { personalLinks: [] } }) - - const topicID = useMemo(() => me && Topic.findUnique({ topicName }, JAZZ_GLOBAL_GROUP_ID, me), [topicName, me]) - const topic = useCoState(Topic, topicID, { latestGlobalGuide: { sections: [{ links: [] }] } }) + const { me } = useAccountOrGuest({ root: { personalLinks: [] } }) + const { topic } = useTopicData(topicName, me) // const { activeIndex, setActiveIndex, containerRef, linkRefs } = useLinkNavigation(allLinks) const linksRefDummy = useRef<(HTMLLIElement | null)[]>([]) const containerRefDummy = useRef(null) @@ -37,8 +34,6 @@ export function TopicDetailRoute({ topicName }: TopicDetailRouteProps) { setActiveIndex={() => {}} linkRefs={linksRefDummy} containerRef={containerRefDummy} - me={me} - personalLinks={me.root.personalLinks} /> ) diff --git a/web/components/routes/topics/detail/partials/link-item.tsx b/web/components/routes/topics/detail/partials/link-item.tsx index 1e119bd3..4758f01e 100644 --- a/web/components/routes/topics/detail/partials/link-item.tsx +++ b/web/components/routes/topics/detail/partials/link-item.tsx @@ -13,6 +13,7 @@ import { cn, ensureUrlProtocol, generateUniqueSlug } from "@/lib/utils" import { LaAccount, Link as LinkSchema, PersonalLink, PersonalLinkLists, Topic, UserRoot } from "@/lib/schema" import { openPopoverForIdAtom } from "../TopicDetailRoute" import { LEARNING_STATES, LearningStateValue } from "@/lib/constants" +import { useAccountOrGuest } from "@/lib/providers/jazz-provider" interface LinkItemProps { topic: Topic @@ -20,23 +21,24 @@ interface LinkItemProps { isActive: boolean index: number setActiveIndex: (index: number) => void - me: { - root: { - personalLinks: PersonalLinkLists - } & UserRoot - } & LaAccount - personalLinks: PersonalLinkLists } export const LinkItem = React.memo( React.forwardRef( - ({ topic, link, isActive, index, setActiveIndex, me, personalLinks }, ref) => { + ({ topic, link, isActive, index, setActiveIndex }, ref) => { const router = useRouter() const [, setOpenPopoverForId] = useAtom(openPopoverForIdAtom) const [isPopoverOpen, setIsPopoverOpen] = useState(false) + const { me } = useAccountOrGuest({ root: { personalLinks: [] } }); + + const personalLinks = useMemo(() => { + if (!me || me._type === "Anonymous") return undefined; + return me?.root?.personalLinks || [] + }, [me]) + const personalLink = useMemo(() => { - return personalLinks.find(pl => pl?.link?.id === link.id) + return personalLinks?.find(pl => pl?.link?.id === link.id) }, [personalLinks, link.id]) const selectedLearningState = useMemo(() => { @@ -53,6 +55,14 @@ export const LinkItem = React.memo( const handleSelectLearningState = useCallback( (learningState: LearningStateValue) => { + if (!personalLinks || !me || me?._type === "Anonymous") { + if (me?._type === "Anonymous") { + // TODO: handle better + toast.error("You need to sign in to add links to your personal list.") + } + return + }; + const defaultToast = { duration: 5000, position: "bottom-right" as const, diff --git a/web/components/routes/topics/detail/partials/section.tsx b/web/components/routes/topics/detail/partials/section.tsx index f4b8398d..7f816432 100644 --- a/web/components/routes/topics/detail/partials/section.tsx +++ b/web/components/routes/topics/detail/partials/section.tsx @@ -11,24 +11,9 @@ interface SectionProps { startIndex: number linkRefs: React.MutableRefObject<(HTMLLIElement | null)[]> setActiveIndex: (index: number) => void - me: { - root: { - personalLinks: PersonalLinkLists - } & UserRoot - } & LaAccount - personalLinks: PersonalLinkLists } -export function Section({ - topic, - section, - activeIndex, - setActiveIndex, - startIndex, - linkRefs, - me, - personalLinks -}: SectionProps) { +export function Section({ topic, section, activeIndex, setActiveIndex, startIndex, linkRefs }: SectionProps) { const [nLinksToLoad, setNLinksToLoad] = useState(10) const linksToLoad = useMemo(() => { @@ -55,8 +40,6 @@ export function Section({ ref={el => { linkRefs.current[startIndex + index] = el }} - me={me} - personalLinks={personalLinks} /> ) : ( diff --git a/web/components/routes/topics/detail/partials/topic-sections.tsx b/web/components/routes/topics/detail/partials/topic-sections.tsx index b4c13dc7..a8b6ed5f 100644 --- a/web/components/routes/topics/detail/partials/topic-sections.tsx +++ b/web/components/routes/topics/detail/partials/topic-sections.tsx @@ -9,12 +9,6 @@ interface TopicSectionsProps { setActiveIndex: (index: number) => void linkRefs: React.MutableRefObject<(HTMLLIElement | null)[]> containerRef: React.RefObject - me: { - root: { - personalLinks: PersonalLinkLists - } & UserRoot - } & LaAccount - personalLinks: PersonalLinkLists } export function TopicSections({ @@ -24,8 +18,6 @@ export function TopicSections({ setActiveIndex, linkRefs, containerRef, - me, - personalLinks }: TopicSectionsProps) { return (
@@ -42,8 +34,6 @@ export function TopicSections({ setActiveIndex={setActiveIndex} startIndex={sections.slice(0, sectionIndex).reduce((acc, s) => acc + (s?.links?.length || 0), 0)} linkRefs={linkRefs} - me={me} - personalLinks={personalLinks} /> ) )} diff --git a/web/hooks/use-topic-data.ts b/web/hooks/use-topic-data.ts new file mode 100644 index 00000000..8280762b --- /dev/null +++ b/web/hooks/use-topic-data.ts @@ -0,0 +1,15 @@ +import { useMemo } from "react" +import { useCoState } from "@/lib/providers/jazz-provider" +import { PublicGlobalGroup } from "@/lib/schema/master/public-group" +import { Account, AnonymousJazzAgent, ID } from "jazz-tools" +import { Link, Topic } from "@/lib/schema" + +const GLOBAL_GROUP_ID = process.env.NEXT_PUBLIC_JAZZ_GLOBAL_GROUP as ID + +export function useTopicData(topicName: string, me: Account | AnonymousJazzAgent | undefined) { + const topicID = useMemo(() => me && Topic.findUnique({ topicName }, GLOBAL_GROUP_ID, me), [topicName, me]) + + const topic = useCoState(Topic, topicID, { latestGlobalGuide: { sections: [{ links: [] }] } }) + + return { topic } +} diff --git a/web/lib/providers/jazz-provider.tsx b/web/lib/providers/jazz-provider.tsx index e5b8fb80..3ca9ca9a 100644 --- a/web/lib/providers/jazz-provider.tsx +++ b/web/lib/providers/jazz-provider.tsx @@ -3,104 +3,27 @@ import { createJazzReactApp } from "jazz-react" import { LaAccount } from "@/lib/schema" import { useClerk } from "@clerk/nextjs" -import { createContext, useMemo, useState } from "react" -import { AuthMethodCtx } from "jazz-react" +import { useJazzClerkAuth } from "jazz-react-auth-clerk" const Jazz = createJazzReactApp({ AccountSchema: LaAccount }) -export const { useAccount, useCoState, useAcceptInvite } = Jazz +export const { useAccount, useAccountOrGuest, useCoState, useAcceptInvite } = Jazz -export function JazzProvider({ children }: { children: React.ReactNode }) { - return {children} -} - -export const JazzClerkAuthCtx = createContext<{ - errors: string[] -}>({ - errors: [] -}) - -export function JazzClerkAuth({ children }: { children: React.ReactNode }) { +export function JazzAndAuth({ children }: { children: React.ReactNode }) { const clerk = useClerk() - const [errors, setErrors] = useState([]) - const authMethod = useMemo(() => { - return new BrowserClerkAuth( - { - onError: error => { - void clerk.signOut() - setErrors(errors => [...errors, error.toString()]) - } - }, - clerk - ) - }, [clerk]) + const [auth, state] = useJazzClerkAuth(clerk) return ( - - {children} - + <> + {state.errors.map((error) => ( +
{error}
+ ))} + + {children} + + ) -} - -import { Account, AuthMethod, AuthResult, ID } from "jazz-tools" -import type { LoadedClerk } from "@clerk/types" -import { AgentSecret } from "cojson" - -export class BrowserClerkAuth implements AuthMethod { - constructor( - public driver: BrowserClerkAuth.Driver, - private readonly clerkClient: LoadedClerk - ) {} - - async start(): Promise { - if (this.clerkClient.user) { - const storedCredentials = this.clerkClient.user.unsafeMetadata - if (storedCredentials.jazzAccountID) { - if (!storedCredentials.jazzAccountSecret) { - throw new Error("No secret for existing user") - } - return { - type: "existing", - credentials: { - accountID: storedCredentials.jazzAccountID as ID, - secret: storedCredentials.jazzAccountSecret as AgentSecret - }, - onSuccess: () => {}, - onError: (error: string | Error) => { - this.driver.onError(error) - } - } - } else { - return { - type: "new", - creationProps: { - name: this.clerkClient.user.fullName || this.clerkClient.user.username || this.clerkClient.user.id - }, - saveCredentials: async (credentials: { accountID: ID; secret: AgentSecret }) => { - await this.clerkClient.user?.update({ - unsafeMetadata: { - jazzAccountID: credentials.accountID, - jazzAccountSecret: credentials.secret - } - }) - }, - onSuccess: () => {}, - onError: (error: string | Error) => { - this.driver.onError(error) - } - } - } - } else { - throw new Error("Not signed in") - } - } -} - -export namespace BrowserClerkAuth { - export interface Driver { - onError: (error: string | Error) => void - } -} +} \ No newline at end of file diff --git a/web/middleware.ts b/web/middleware.ts index 3059c4a8..92bdc125 100644 --- a/web/middleware.ts +++ b/web/middleware.ts @@ -1,19 +1,23 @@ -import { clerkMiddleware, createRouteMatcher } from "@clerk/nextjs/server" +import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server' -const publicRoutes = ["/", "/sign-in(.*)", "/sign-up(.*)"] -const isPublicRoute = createRouteMatcher(publicRoutes) +const isPublicRoute = createRouteMatcher([ + '/sign-in(.*)', + '/sign-up(.*)', + '/', + '/:topicName(.*)' +]) export default clerkMiddleware((auth, request) => { - if (!isPublicRoute(request)) { - auth().protect() - } + if (!isPublicRoute(request)) { + auth().protect() + } }) export const config = { - matcher: [ - // Skip Next.js internals and all static files, unless found in search params - "/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)", - // Always run for API routes - "/(api|trpc)(.*)" - ] + matcher: [ + // Skip Next.js internals and all static files, unless found in search params + '/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)', + // Always run for API routes + '/(api|trpc)(.*)' + ] } diff --git a/web/package.json b/web/package.json index 0009e03b..50c1db55 100644 --- a/web/package.json +++ b/web/package.json @@ -70,9 +70,10 @@ "date-fns": "^3.6.0", "framer-motion": "^11.5.4", "geist": "^1.3.1", - "jazz-react": "0.7.35-unique.2", - "jazz-react-auth-clerk": "0.7.33-new-auth.1", - "jazz-tools": "0.7.35-unique.2", + "jazz-react": "0.7.35-guest-auth.5", + "jazz-browser-auth-clerk": "0.7.35-guest-auth.5", + "jazz-react-auth-clerk": "0.7.35-guest-auth.5", + "jazz-tools": "0.7.35-guest-auth.5", "jotai": "^2.9.3", "lowlight": "^3.1.0", "lucide-react": "^0.429.0",