Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions apps/desktop/src/lib/trpc/routers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { createMenuRouter } from "./menu";
import { createMigrationRouter } from "./migration";
import { createNotificationsRouter } from "./notifications";
import { createPageContentRouter } from "./page-content";
import { createPageThumbnailRouter } from "./page-thumbnail";
import { createPermissionsRouter } from "./permissions";
import { createPluginsRouter } from "./plugins";
import { createPortsRouter } from "./ports";
Expand Down Expand Up @@ -51,6 +52,7 @@ export const createAppRouter = (getWindow: () => BrowserWindow | null) => {
filesystem: createFilesystemRouter(),
notifications: createNotificationsRouter(getWindow),
pageContent: createPageContentRouter(),
pageThumbnail: createPageThumbnailRouter(),
permissions: createPermissionsRouter(),
plugins: createPluginsRouter(),
ports: createPortsRouter(),
Expand Down
1 change: 1 addition & 0 deletions apps/desktop/src/lib/trpc/routers/page-thumbnail/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { createPageThumbnailRouter } from "./page-thumbnail";
21 changes: 21 additions & 0 deletions apps/desktop/src/lib/trpc/routers/page-thumbnail/page-thumbnail.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { ensureThumbnail, peekThumbnail } from "main/lib/pageThumbnails";
import { z } from "zod";
import { publicProcedure, router } from "../..";

const thumbnailKey = z.object({
accountId: z.string(),
pageId: z.string(),
version: z.string(),
});

export const createPageThumbnailRouter = () => {
return router({
peek: publicProcedure
.input(thumbnailKey)
.query(({ input }) => peekThumbnail(input)),

ensure: publicProcedure
.input(thumbnailKey.extend({ html: z.string() }))
.mutation(({ input }) => ensureThumbnail(input)),
});
};
18 changes: 18 additions & 0 deletions apps/desktop/src/main/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ import { localDb } from "./lib/local-db";
import { requestLocalNetworkAccess } from "./lib/local-network-permission";
import { menuEmitter } from "./lib/menu-events";
import { PAGE_SCHEME, pageProtocolHandler } from "./lib/pageContent";
import {
THUMBNAIL_SCHEME,
thumbnailProtocolHandler,
} from "./lib/pageThumbnails";
import {
initTanstackDbPersistence,
shutdownTanstackDbPersistence,
Expand Down Expand Up @@ -350,6 +354,15 @@ protocol.registerSchemesAsPrivileged([
secure: true,
},
},
{
scheme: THUMBNAIL_SCHEME,
privileges: {
standard: true,
secure: true,
bypassCSP: true,
supportFetchAPI: true,
},
},
]);

const gotTheLock = app.requestSingleInstanceLock();
Expand Down Expand Up @@ -413,6 +426,11 @@ if (!gotTheLock) {
.fromPartition("persist:superset")
.protocol.handle(PAGE_SCHEME, pageProtocolHandler);

protocol.handle(THUMBNAIL_SCHEME, thumbnailProtocolHandler);
session
.fromPartition("persist:superset")
.protocol.handle(THUMBNAIL_SCHEME, thumbnailProtocolHandler);

// Serve system fonts (e.g. SF Mono on macOS) via custom protocol
// so the renderer can use @font-face with font-src 'self' CSP
if (process.platform === "darwin") {
Expand Down
8 changes: 8 additions & 0 deletions apps/desktop/src/main/lib/pageThumbnails/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export {
ensureThumbnail,
peekThumbnail,
THUMBNAIL_SCHEME,
type ThumbnailKey,
thumbnailProtocolHandler,
thumbnailUrl,
} from "./pageThumbnails";
Loading