Fixed API_URL handling.
This commit is contained in:
@@ -47,7 +47,7 @@ DATABASE_URL=connection-url
|
|||||||
```
|
```
|
||||||
|
|
||||||
Optional: set `API_URL` to change the base URL used by internal UI API calls.
|
Optional: set `API_URL` to change the base URL used by internal UI API calls.
|
||||||
Relative paths are served under `BASE_PATH`; absolute URLs are called directly by the browser.
|
Relative paths are served under `BASE_PATH`; absolute URLs are proxied through the local `/api` route.
|
||||||
For example, `API_URL=/internal-api` or `API_URL=https://api.example.com/api`.
|
For example, `API_URL=/internal-api` or `API_URL=https://api.example.com/api`.
|
||||||
|
|
||||||
The connection URL format:
|
The connection URL format:
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
import { describe, expect, test } from 'vitest';
|
||||||
|
import { getApiUrl } from './api-url';
|
||||||
|
|
||||||
|
describe('getApiUrl', () => {
|
||||||
|
test('uses the local api path when API_URL is absolute', () => {
|
||||||
|
expect(
|
||||||
|
getApiUrl('/websites', {
|
||||||
|
apiUrl: 'https://gateway-eu.umami.dev/api',
|
||||||
|
basePath: '/analytics',
|
||||||
|
}),
|
||||||
|
).toBe('/analytics/api/websites');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('uses a relative API_URL under the base path', () => {
|
||||||
|
expect(
|
||||||
|
getApiUrl('/websites', {
|
||||||
|
apiUrl: '/internal-api',
|
||||||
|
basePath: '/analytics',
|
||||||
|
}),
|
||||||
|
).toBe('/analytics/internal-api/websites');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('keeps app routes on the local api path', () => {
|
||||||
|
expect(
|
||||||
|
getApiUrl('/auth/verify', {
|
||||||
|
apiUrl: '/internal-api',
|
||||||
|
basePath: '/analytics',
|
||||||
|
}),
|
||||||
|
).toBe('/analytics/api/auth/verify');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('returns absolute input urls unchanged', () => {
|
||||||
|
expect(getApiUrl('https://example.com/api/websites')).toBe(
|
||||||
|
'https://example.com/api/websites',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
+2
-6
@@ -39,12 +39,8 @@ export function getApiUrl(url: string, options: ApiUrlOptions = {}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { apiUrl = process.env.apiUrl || '', basePath = process.env.basePath || '' } = options;
|
const { apiUrl = process.env.apiUrl || '', basePath = process.env.basePath || '' } = options;
|
||||||
const useApiUrl = apiUrl && !isAppRoute(url);
|
const useApiUrl = apiUrl && !isAbsoluteUrl(apiUrl) && !isAppRoute(url);
|
||||||
const baseUrl = useApiUrl
|
const baseUrl = useApiUrl ? joinPath(basePath, apiUrl) : joinPath(basePath, '/api');
|
||||||
? isAbsoluteUrl(apiUrl)
|
|
||||||
? apiUrl
|
|
||||||
: joinPath(basePath, apiUrl)
|
|
||||||
: joinPath(basePath, '/api');
|
|
||||||
|
|
||||||
return joinPath(baseUrl, url);
|
return joinPath(baseUrl, url);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user