diff --git a/src/lib/features/frontend-api/frontend-api-service.test.ts b/src/lib/features/frontend-api/frontend-api-service.test.ts index 5d7fe717a9..bb2ef69521 100644 --- a/src/lib/features/frontend-api/frontend-api-service.test.ts +++ b/src/lib/features/frontend-api/frontend-api-service.test.ts @@ -64,3 +64,39 @@ test('frontend api service fetching features from global cache', async () => { expect(features).toHaveLength(1); expect(createdFrontendRepositoriesCount).toBe(1); }); + +test('setFrontendCorsSettings updates cached frontend settings immediately', async () => { + let storedSettings: any = { + frontendApiOrigins: ['https://initial.example.com'], + }; + const settingService = { + getWithDefault: async () => storedSettings, + insert: async (_key: string, value: any) => { + storedSettings = value; + }, + }; + + const frontendApiService = new FrontendApiService( + { + getLogger: noLogger, + eventBus: new EventEmitter(), + frontendApiOrigins: [], + } as unknown as Config, + { settingService } as any, + {} as any, + ); + + // Populate initial cache + const initial = await frontendApiService.getFrontendSettings(true); + expect(initial.frontendApiOrigins).toEqual(['https://initial.example.com']); + + // Update CORS settings + await frontendApiService.setFrontendCorsSettings( + ['https://updated.example.com'], + { id: 1, username: 'test-user', ip: '127.0.0.1' }, + ); + + // Cached settings should immediately reflect updated settings + const cached = await frontendApiService.getFrontendSettings(true); + expect(cached.frontendApiOrigins).toEqual(['https://updated.example.com']); +}); diff --git a/src/lib/features/frontend-api/frontend-api-service.ts b/src/lib/features/frontend-api/frontend-api-service.ts index 13bca971ed..08a657ec80 100644 --- a/src/lib/features/frontend-api/frontend-api-service.ts +++ b/src/lib/features/frontend-api/frontend-api-service.ts @@ -249,12 +249,14 @@ export class FrontendApiService { throw new BadDataError(error); } const settings = (await this.getFrontendSettings(false)) || {}; + const updatedSettings = { ...settings, frontendApiOrigins: value }; await this.services.settingService.insert( frontendSettingsKey, - { ...settings, frontendApiOrigins: value }, + updatedSettings, auditUser, false, ); + this.cachedFrontendSettings = updatedSettings; } async fetchFrontendSettings(): Promise {