- Current:
{formatSecretHint(privateValues.notionApiKeyHint)}
+
+
+ {/* Service Accounts */}
+
+
Service Accounts
+
+
+
RxResume
+
+
+
Email
+
+ {errors.rxresumeEmail &&
{errors.rxresumeEmail.message}
}
+
+
+
Password
+
+ {errors.rxresumePassword &&
{errors.rxresumePassword.message}
}
+
+ Current: {formatSecretHint(privateValues.rxresumePasswordHint)}
+
-
- Private values are write-only. Enter a new value to replace the stored secret.
+
+
+
UKVisaJobs
+
+
+
Email
+
+ {errors.ukvisajobsEmail &&
{errors.ukvisajobsEmail.message}
}
+
+
+
Password
+
+ {errors.ukvisajobsPassword &&
{errors.ukvisajobsPassword.message}
}
+
+ Current: {formatSecretHint(privateValues.ukvisajobsPasswordHint)}
+
+
+
+
+
+
+ {/* Security */}
+
+
Security
+
+
setIsBasicAuthEnabled(checked === true)}
+ disabled={isLoading || isSaving}
+ />
+
+
+
+ Require a username and password for write operations.
+
+
+
+
+ {isBasicAuthEnabled && (
+
+
+
Username
+
+ {errors.basicAuthUser &&
{errors.basicAuthUser.message}
}
+
+
+
+
Password
+
+ {errors.basicAuthPassword &&
{errors.basicAuthPassword.message}
}
+
+ Current: {formatSecretHint(privateValues.basicAuthPasswordHint)}
+
+
+
+ )}
+
)
}
+
diff --git a/orchestrator/src/client/pages/settings/types.ts b/orchestrator/src/client/pages/settings/types.ts
index e424a7d..a0b2555 100644
--- a/orchestrator/src/client/pages/settings/types.ts
+++ b/orchestrator/src/client/pages/settings/types.ts
@@ -37,6 +37,6 @@ export type EnvSettingsValues = {
ukvisajobsPasswordHint: string | null
basicAuthPasswordHint: string | null
webhookSecretHint: string | null
- notionApiKeyHint: string | null
}
+ basicAuthActive: boolean
}
diff --git a/orchestrator/src/server/api/routes/settings.test.ts b/orchestrator/src/server/api/routes/settings.test.ts
index 6d2006b..312216a 100644
--- a/orchestrator/src/server/api/routes/settings.test.ts
+++ b/orchestrator/src/server/api/routes/settings.test.ts
@@ -13,7 +13,6 @@ describe.sequential('Settings API routes', () => {
env: {
OPENROUTER_API_KEY: 'secret-key',
RXRESUME_EMAIL: 'resume@example.com',
- UKVISAJOBS_HEADLESS: 'false',
},
}));
});
@@ -30,7 +29,7 @@ describe.sequential('Settings API routes', () => {
expect(Array.isArray(body.data.searchTerms)).toBe(true);
expect(body.data.rxresumeEmail).toBe('resume@example.com');
expect(body.data.openrouterApiKeyHint).toBe('secr');
- expect(body.data.ukvisajobsHeadless).toBe(false);
+ expect(body.data.basicAuthActive).toBe(false);
});
it('rejects invalid settings updates and persists overrides', async () => {
@@ -48,7 +47,6 @@ describe.sequential('Settings API routes', () => {
searchTerms: ['engineer'],
rxresumeEmail: 'updated@example.com',
openrouterApiKey: 'updated-secret',
- ukvisajobsHeadless: true,
}),
});
const patchBody = await patchRes.json();
@@ -57,6 +55,5 @@ describe.sequential('Settings API routes', () => {
expect(patchBody.data.overrideSearchTerms).toEqual(['engineer']);
expect(patchBody.data.rxresumeEmail).toBe('updated@example.com');
expect(patchBody.data.openrouterApiKeyHint).toBe('upda');
- expect(patchBody.data.ukvisajobsHeadless).toBe(true);
});
});
diff --git a/orchestrator/src/server/api/routes/settings.ts b/orchestrator/src/server/api/routes/settings.ts
index 082c6dd..0f5d687 100644
--- a/orchestrator/src/server/api/routes/settings.ts
+++ b/orchestrator/src/server/api/routes/settings.ts
@@ -307,31 +307,12 @@ settingsRouter.patch('/', async (req: Request, res: Response) => {
applyEnvValue('UKVISAJOBS_PASSWORD', value);
}
- if ('ukvisajobsHeadless' in input) {
- const value = input.ukvisajobsHeadless ?? null;
- const serialized = serializeEnvBoolean(value);
- await settingsRepo.setSetting('ukvisajobsHeadless', serialized);
- applyEnvValue('UKVISAJOBS_HEADLESS', serialized);
- }
-
if ('webhookSecret' in input) {
const value = normalizeEnvInput(input.webhookSecret);
await settingsRepo.setSetting('webhookSecret', value);
applyEnvValue('WEBHOOK_SECRET', value);
}
- if ('notionApiKey' in input) {
- const value = normalizeEnvInput(input.notionApiKey);
- await settingsRepo.setSetting('notionApiKey', value);
- applyEnvValue('NOTION_API_KEY', value);
- }
-
- if ('notionDatabaseId' in input) {
- const value = normalizeEnvInput(input.notionDatabaseId);
- await settingsRepo.setSetting('notionDatabaseId', value);
- applyEnvValue('NOTION_DATABASE_ID', value);
- }
-
const overrideModel = await settingsRepo.getSetting('model');
const defaultModel = process.env.MODEL || 'openai/gpt-4o-mini';
const model = overrideModel || defaultModel;
diff --git a/orchestrator/src/server/repositories/settings.ts b/orchestrator/src/server/repositories/settings.ts
index 399581b..310c144 100644
--- a/orchestrator/src/server/repositories/settings.ts
+++ b/orchestrator/src/server/repositories/settings.ts
@@ -31,10 +31,7 @@ export type SettingKey = 'model'
| 'basicAuthPassword'
| 'ukvisajobsEmail'
| 'ukvisajobsPassword'
- | 'ukvisajobsHeadless'
| 'webhookSecret'
- | 'notionApiKey'
- | 'notionDatabaseId'
export async function getSetting(key: SettingKey): Promise
{
const [row] = await db.select().from(settings).where(eq(settings.key, key))
diff --git a/orchestrator/src/server/services/envSettings.ts b/orchestrator/src/server/services/envSettings.ts
index 201f209..45eb77d 100644
--- a/orchestrator/src/server/services/envSettings.ts
+++ b/orchestrator/src/server/services/envSettings.ts
@@ -7,12 +7,9 @@ const readableStringConfig: { settingKey: SettingKey, envKey: string }[] = [
{ settingKey: 'rxresumeEmail', envKey: 'RXRESUME_EMAIL' },
{ settingKey: 'ukvisajobsEmail', envKey: 'UKVISAJOBS_EMAIL' },
{ settingKey: 'basicAuthUser', envKey: 'BASIC_AUTH_USER' },
- { settingKey: 'notionDatabaseId', envKey: 'NOTION_DATABASE_ID' },
];
-const readableBooleanConfig: { settingKey: SettingKey, envKey: string, defaultValue: boolean }[] = [
- { settingKey: 'ukvisajobsHeadless', envKey: 'UKVISAJOBS_HEADLESS', defaultValue: true },
-];
+const readableBooleanConfig: { settingKey: SettingKey, envKey: string, defaultValue: boolean }[] = [];
const privateStringConfig: { settingKey: SettingKey, envKey: string, hintKey: string }[] = [
{ settingKey: 'openrouterApiKey', envKey: 'OPENROUTER_API_KEY', hintKey: 'openrouterApiKeyHint' },
@@ -20,7 +17,6 @@ const privateStringConfig: { settingKey: SettingKey, envKey: string, hintKey: st
{ settingKey: 'ukvisajobsPassword', envKey: 'UKVISAJOBS_PASSWORD', hintKey: 'ukvisajobsPasswordHint' },
{ settingKey: 'basicAuthPassword', envKey: 'BASIC_AUTH_PASSWORD', hintKey: 'basicAuthPasswordHint' },
{ settingKey: 'webhookSecret', envKey: 'WEBHOOK_SECRET', hintKey: 'webhookSecretHint' },
- { settingKey: 'notionApiKey', envKey: 'NOTION_API_KEY', hintKey: 'notionApiKeyHint' },
];
export function normalizeEnvInput(value: string | null | undefined): string | null {
@@ -96,9 +92,13 @@ export async function getEnvSettingsData(): Promise;
diff --git a/orchestrator/src/shared/types.ts b/orchestrator/src/shared/types.ts
index 16d7bb0..fbafbf6 100644
--- a/orchestrator/src/shared/types.ts
+++ b/orchestrator/src/shared/types.ts
@@ -390,8 +390,6 @@ export interface AppSettings {
basicAuthPasswordHint: string | null;
ukvisajobsEmail: string | null;
ukvisajobsPasswordHint: string | null;
- ukvisajobsHeadless: boolean;
webhookSecretHint: string | null;
- notionApiKeyHint: string | null;
- notionDatabaseId: string | null;
+ basicAuthActive: boolean;
}