Compare commits

..

1 Commits

Author SHA1 Message Date
yyh
c39861b33e fix: configure server console api url 2026-06-02 22:48:11 +08:00
6 changed files with 51 additions and 2 deletions

View File

@ -13,6 +13,7 @@
# Core service URLs
CONSOLE_API_URL=
SERVER_CONSOLE_API_URL=http://api:5001
CONSOLE_WEB_URL=
SERVICE_API_URL=
TRIGGER_URL=http://localhost

View File

@ -376,6 +376,7 @@ services:
- ./.env
environment:
CONSOLE_API_URL: ${CONSOLE_API_URL:-}
SERVER_CONSOLE_API_URL: ${SERVER_CONSOLE_API_URL:-http://api:5001}
APP_API_URL: ${APP_API_URL:-}
AMPLITUDE_API_KEY: ${AMPLITUDE_API_KEY:-}
NEXT_PUBLIC_COOKIE_DOMAIN: ${NEXT_PUBLIC_COOKIE_DOMAIN:-}

View File

@ -382,6 +382,7 @@ services:
- ./.env
environment:
CONSOLE_API_URL: ${CONSOLE_API_URL:-}
SERVER_CONSOLE_API_URL: ${SERVER_CONSOLE_API_URL:-http://api:5001}
APP_API_URL: ${APP_API_URL:-}
AMPLITUDE_API_KEY: ${AMPLITUDE_API_KEY:-}
NEXT_PUBLIC_COOKIE_DOMAIN: ${NEXT_PUBLIC_COOKIE_DOMAIN:-}

View File

@ -0,0 +1,43 @@
// @vitest-environment node
import { afterEach, describe, expect, it, vi } from 'vitest'
vi.mock('server-only', () => ({}))
const importServerConfig = async () => {
vi.resetModules()
return import('../server')
}
describe('server config', () => {
afterEach(() => {
vi.unstubAllEnvs()
})
it('should prefer the server-only console API URL for server requests', async () => {
vi.stubEnv('SERVER_CONSOLE_API_URL', 'http://api:5001')
vi.stubEnv('CONSOLE_API_URL', 'https://console.example.com')
const { SERVER_CONSOLE_API_PREFIX } = await importServerConfig()
expect(SERVER_CONSOLE_API_PREFIX).toBe('http://api:5001/console/api')
})
it('should fall back to the public console API URL when no server-only URL is configured', async () => {
vi.stubEnv('SERVER_CONSOLE_API_URL', '')
vi.stubEnv('CONSOLE_API_URL', 'https://console.example.com')
const { SERVER_CONSOLE_API_PREFIX } = await importServerConfig()
expect(SERVER_CONSOLE_API_PREFIX).toBe('https://console.example.com/console/api')
})
it('should remain unconfigured when both server URLs are empty', async () => {
vi.stubEnv('SERVER_CONSOLE_API_URL', '')
vi.stubEnv('CONSOLE_API_URL', '')
const { SERVER_CONSOLE_API_PREFIX } = await importServerConfig()
expect(SERVER_CONSOLE_API_PREFIX).toBeUndefined()
})
})

View File

@ -5,6 +5,8 @@ import 'server-only'
const withoutTrailingSlash = (value: string) => value.endsWith('/') ? value.slice(0, -1) : value
// Server-side requests need the origin; browser requests should keep using NEXT_PUBLIC_API_PREFIX.
export const SERVER_CONSOLE_API_PREFIX = env.CONSOLE_API_URL
? `${withoutTrailingSlash(env.CONSOLE_API_URL)}/console/api`
const serverConsoleApiUrl = env.SERVER_CONSOLE_API_URL || env.CONSOLE_API_URL
export const SERVER_CONSOLE_API_PREFIX = serverConsoleApiUrl
? `${withoutTrailingSlash(serverConsoleApiUrl)}/console/api`
: undefined

View File

@ -161,6 +161,7 @@ const clientSchema = {
export const env = createEnv({
server: {
CONSOLE_API_URL: z.string().optional(),
SERVER_CONSOLE_API_URL: z.string().optional(),
/**
* Maximum length of segmentation tokens for indexing
*/