diff --git a/packages/gitbook-v2/src/lib/data/index.ts b/packages/gitbook-v2/src/lib/data/index.ts index d79049684a..2e37e2fbb4 100644 --- a/packages/gitbook-v2/src/lib/data/index.ts +++ b/packages/gitbook-v2/src/lib/data/index.ts @@ -4,5 +4,4 @@ export * from './pages'; export * from './urls'; export * from './errors'; export * from './lookup'; -export * from './proxy'; export * from './visitor'; diff --git a/packages/gitbook-v2/src/lib/data/visitor.ts b/packages/gitbook-v2/src/lib/data/visitor.ts index f93f0afe87..e59e32365c 100644 --- a/packages/gitbook-v2/src/lib/data/visitor.ts +++ b/packages/gitbook-v2/src/lib/data/visitor.ts @@ -1,6 +1,6 @@ import { withLeadingSlash, withTrailingSlash } from '@/lib/paths'; import type { PublishedSiteContent } from '@gitbook/api'; -import { getProxyRequestIdentifier, isProxyRequest } from './proxy'; +import { getProxyRequestIdentifier, isProxyRequest } from '@v2/lib/proxy'; /** * Get the appropriate base path for the visitor authentication cookie. diff --git a/packages/gitbook-v2/src/lib/images/getImageResizingContextId.test.ts b/packages/gitbook-v2/src/lib/images/getImageResizingContextId.test.ts new file mode 100644 index 0000000000..eaba01663b --- /dev/null +++ b/packages/gitbook-v2/src/lib/images/getImageResizingContextId.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from 'bun:test'; +import { getImageResizingContextId } from './getImageResizingContextId'; + +describe('getImageResizingContextId', () => { + it('should return proxy identifier for proxy requests', () => { + const proxyRequestURL = new URL('https://proxy.gitbook.site/sites/site_foo/hello/world'); + expect(getImageResizingContextId(proxyRequestURL)).toBe('sites/site_foo'); + }); + + it('should return preview identifier for preview requests', () => { + const previewRequestURL = new URL('https://preview/site_foo/hello/world'); + expect(getImageResizingContextId(previewRequestURL)).toBe('site_foo'); + }); + + it('should return host for regular requests', () => { + const regularRequestURL = new URL('https://example.com/docs/foo/hello/world'); + expect(getImageResizingContextId(regularRequestURL)).toBe('example.com'); + }); +}); diff --git a/packages/gitbook-v2/src/lib/images/getImageResizingContextId.ts b/packages/gitbook-v2/src/lib/images/getImageResizingContextId.ts index 82f9225262..40594e2ae2 100644 --- a/packages/gitbook-v2/src/lib/images/getImageResizingContextId.ts +++ b/packages/gitbook-v2/src/lib/images/getImageResizingContextId.ts @@ -1,4 +1,5 @@ -import { getProxyRequestIdentifier, isProxyRequest } from '../data'; +import { getPreviewRequestIdentifier, isPreviewRequest } from '@v2/lib/preview'; +import { getProxyRequestIdentifier, isProxyRequest } from '@v2/lib/proxy'; /** * Get the site identifier to use for image resizing for an incoming request. @@ -8,6 +9,9 @@ export function getImageResizingContextId(url: URL): string { if (isProxyRequest(url)) { return getProxyRequestIdentifier(url); } + if (isPreviewRequest(url)) { + return getPreviewRequestIdentifier(url); + } return url.host; } diff --git a/packages/gitbook-v2/src/lib/preview.test.ts b/packages/gitbook-v2/src/lib/preview.test.ts new file mode 100644 index 0000000000..bbaf0402bd --- /dev/null +++ b/packages/gitbook-v2/src/lib/preview.test.ts @@ -0,0 +1,21 @@ +import { describe, expect, it } from 'bun:test'; +import { getPreviewRequestIdentifier, isPreviewRequest } from './preview'; + +describe('isPreviewRequest', () => { + it('should return true for preview requests', () => { + const previewRequestURL = new URL('https://preview/site_foo/hello/world'); + expect(isPreviewRequest(previewRequestURL)).toBe(true); + }); + + it('should return false for non-preview requests', () => { + const nonPreviewRequestURL = new URL('https://example.com/docs/foo/hello/world'); + expect(isPreviewRequest(nonPreviewRequestURL)).toBe(false); + }); +}); + +describe('getPreviewRequestIdentifier', () => { + it('should return the correct identifier for preview requests', () => { + const previewRequestURL = new URL('https://preview/site_foo/hello/world'); + expect(getPreviewRequestIdentifier(previewRequestURL)).toBe('site_foo'); + }); +}); diff --git a/packages/gitbook-v2/src/lib/preview.ts b/packages/gitbook-v2/src/lib/preview.ts new file mode 100644 index 0000000000..7094d11970 --- /dev/null +++ b/packages/gitbook-v2/src/lib/preview.ts @@ -0,0 +1,13 @@ +/** + * Check if the request to the site is a preview request. + */ +export function isPreviewRequest(requestURL: URL): boolean { + return requestURL.host === 'preview'; +} + +export function getPreviewRequestIdentifier(requestURL: URL): string { + // For preview requests, we extract the site ID from the pathname + // e.g. https://preview/site_id/... + const pathname = requestURL.pathname.slice(1).split('/'); + return pathname[0]; +} diff --git a/packages/gitbook-v2/src/lib/data/proxy.test.ts b/packages/gitbook-v2/src/lib/proxy.test.ts similarity index 100% rename from packages/gitbook-v2/src/lib/data/proxy.test.ts rename to packages/gitbook-v2/src/lib/proxy.test.ts diff --git a/packages/gitbook-v2/src/lib/data/proxy.ts b/packages/gitbook-v2/src/lib/proxy.ts similarity index 100% rename from packages/gitbook-v2/src/lib/data/proxy.ts rename to packages/gitbook-v2/src/lib/proxy.ts