From 9695bba2e993b48ae333da622fa459dbaacb9349 Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Sat, 31 May 2025 18:46:04 +0100 Subject: feat: Generate RSS feeds from lists (#1507) * refactor: Move bookmark utils from shared-react to shared * Expose RSS feeds for lists * Add e2e tests * Slightly improve the look of the share dialog * allow specifying a limit in the rss endpoint --- packages/shared/config.ts | 5 +++++ packages/shared/types/bookmarks.ts | 29 +++++++++++++++++++++++++++++ packages/shared/types/pagination.ts | 2 ++ 3 files changed, 36 insertions(+) (limited to 'packages/shared') diff --git a/packages/shared/config.ts b/packages/shared/config.ts index c355f9db..218b46b0 100644 --- a/packages/shared/config.ts +++ b/packages/shared/config.ts @@ -17,6 +17,7 @@ const optionalStringBool = () => const allEnv = z.object({ API_URL: z.string().url().default("http://localhost:3000"), + NEXTAUTH_URL: z.string().url().default("http://localhost:3000"), DISABLE_SIGNUPS: stringBool("false"), DISABLE_PASSWORD_AUTH: stringBool("false"), OAUTH_ALLOW_DANGEROUS_EMAIL_ACCOUNT_LINKING: stringBool("false"), @@ -91,6 +92,8 @@ const allEnv = z.object({ const serverConfigSchema = allEnv.transform((val) => { return { apiUrl: val.API_URL, + publicUrl: val.NEXTAUTH_URL, + publicApiUrl: `${val.NEXTAUTH_URL}/api`, auth: { disableSignups: val.DISABLE_SIGNUPS, disablePasswordAuth: val.DISABLE_PASSWORD_AUTH, @@ -181,6 +184,8 @@ const serverConfigSchema = allEnv.transform((val) => { const serverConfig = serverConfigSchema.parse(process.env); // Always explicitly pick up stuff from server config to avoid accidentally leaking stuff export const clientConfig = { + publicUrl: serverConfig.publicUrl, + publicApiUrl: serverConfig.publicApiUrl, demoMode: serverConfig.demoMode, auth: { disableSignups: serverConfig.auth.disableSignups, diff --git a/packages/shared/types/bookmarks.ts b/packages/shared/types/bookmarks.ts index 5fe77278..3522fad3 100644 --- a/packages/shared/types/bookmarks.ts +++ b/packages/shared/types/bookmarks.ts @@ -242,3 +242,32 @@ export const zSearchBookmarksRequestSchema = z.object({ sortOrder: zSortOrder.optional().default("relevance"), includeContent: z.boolean().optional().default(false), }); + +export const zPublicBookmarkSchema = z.object({ + id: z.string(), + createdAt: z.date(), + modifiedAt: z.date().nullable(), + title: z.string().nullish(), + tags: z.array(z.string()), + description: z.string().nullish(), + content: z.discriminatedUnion("type", [ + z.object({ + type: z.literal(BookmarkTypes.LINK), + url: z.string(), + author: z.string().nullish(), + }), + z.object({ + type: z.literal(BookmarkTypes.TEXT), + text: z.string(), + }), + z.object({ + type: z.literal(BookmarkTypes.ASSET), + assetType: z.enum(["image", "pdf"]), + assetId: z.string(), + fileName: z.string().nullish(), + sourceUrl: z.string().nullish(), + }), + ]), +}); + +export type ZPublicBookmark = z.infer; diff --git a/packages/shared/types/pagination.ts b/packages/shared/types/pagination.ts index d2312982..3b9dead4 100644 --- a/packages/shared/types/pagination.ts +++ b/packages/shared/types/pagination.ts @@ -4,3 +4,5 @@ export const zCursorV2 = z.object({ createdAt: z.date(), id: z.string(), }); + +export type ZCursor = z.infer; -- cgit v1.2.3-70-g09d2