diff --git a/blocksuite/affine/shared/src/adapters/middlewares/proxy.ts b/blocksuite/affine/shared/src/adapters/middlewares/proxy.ts index ebc463c683..da58918677 100644 --- a/blocksuite/affine/shared/src/adapters/middlewares/proxy.ts +++ b/blocksuite/affine/shared/src/adapters/middlewares/proxy.ts @@ -21,12 +21,24 @@ const imageProxyMiddlewareBuilder = () => { }; }; +const IMAGE_PROXY_PATH = '/api/worker/image-proxy'; + +export const isImageProxyURL = (imageUrl: string) => { + try { + const url = new URL(imageUrl, globalThis.location.origin); + return url.pathname === IMAGE_PROXY_PATH && url.searchParams.has('url'); + } catch { + return false; + } +}; + const defaultImageProxyMiddlewarBuilder = imageProxyMiddlewareBuilder(); export const setImageProxyMiddlewareURL = defaultImageProxyMiddlewarBuilder.set; -export const defaultImageProxyMiddleware = - defaultImageProxyMiddlewarBuilder.get(); +export const defaultImageProxyMiddleware: TransformerMiddleware = args => { + return defaultImageProxyMiddlewarBuilder.get()(args); +}; // TODO(@mirone): this should be configured when setup instead of runtime export class ImageProxyService extends StoreExtension { @@ -40,7 +52,7 @@ export class ImageProxyService extends StoreExtension { } buildUrl(imageUrl: string) { - if (imageUrl.startsWith(this.imageProxyURL)) { + if (imageUrl.startsWith(this.imageProxyURL) || isImageProxyURL(imageUrl)) { return imageUrl; } diff --git a/packages/backend/server/src/server.ts b/packages/backend/server/src/server.ts index e4186546f0..5734516bd9 100644 --- a/packages/backend/server/src/server.ts +++ b/packages/backend/server/src/server.ts @@ -60,10 +60,14 @@ export async function run() { corsOriginCallback( origin, finalAllowedOrigins, - blockedOrigin => - logger.warn(`Blocked CORS request from origin: ${blockedOrigin}`, { - requestPath, - }), + blockedOrigin => { + if (!appendedOrigins.length) { + logger.warn( + `Blocked CORS request from origin: ${blockedOrigin}`, + { requestPath } + ); + } + }, originCallback ); }, diff --git a/packages/frontend/core/src/blocksuite/ai/components/ai-tools/tool-result-card.ts b/packages/frontend/core/src/blocksuite/ai/components/ai-tools/tool-result-card.ts index f92c68e8b3..dd35489f06 100644 --- a/packages/frontend/core/src/blocksuite/ai/components/ai-tools/tool-result-card.ts +++ b/packages/frontend/core/src/blocksuite/ai/components/ai-tools/tool-result-card.ts @@ -1,7 +1,7 @@ import { SignalWatcher, WithDisposable } from '@blocksuite/affine/global/lit'; import { unsafeCSSVarV2 } from '@blocksuite/affine/shared/theme'; import { ShadowlessElement } from '@blocksuite/affine/std'; -import { DEFAULT_IMAGE_PROXY_ENDPOINT } from '@blocksuite/affine-shared/consts'; +import { isImageProxyURL } from '@blocksuite/affine-shared/adapters'; import { ToggleDownIcon, ToolIcon } from '@blocksuite/icons/lit'; import { type Signal } from '@preact/signals-core'; import { css, html, nothing, type TemplateResult } from 'lit'; @@ -250,7 +250,7 @@ export class ToolResultCard extends SignalWatcher( @state() private accessor isCollapsed = true; - private readonly imageProxyURL = DEFAULT_IMAGE_PROXY_ENDPOINT; + private readonly imageProxyURL = BUILD_CONFIG.imageProxyUrl; protected override render() { return html` @@ -323,7 +323,7 @@ export class ToolResultCard extends SignalWatcher( } buildUrl(imageUrl: string) { - if (imageUrl.startsWith(this.imageProxyURL)) { + if (imageUrl.startsWith(this.imageProxyURL) || isImageProxyURL(imageUrl)) { return imageUrl; } return `${this.imageProxyURL}?url=${encodeURIComponent(imageUrl)}`;