feat(auth): add username sign-in mode and recovery kits (#3215)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-05 14:10:07 +02:00
1 parent bf3d73a5f7
commit e1eecc3b6c
355 files changed
+52138 -24097

No files matched your search

@@ -280,6 +280,8 @@ const NAMED_FLUXER_ENV_OVERRIDES: Record<string, NamedEnvOverride> = {
FLUXER_APP_STATUS_PAGE_URL: {path: ['instance', 'branding', 'status_page_url']},
FLUXER_APP_STATUS_PAGE_INCIDENT_HISTORY_URL: {path: ['instance', 'branding', 'status_page_incident_history_url']},
FLUXER_INSTANCE_SETUP_CONFIGURED: {path: ['instance', 'setup', 'configured'], parse: parseBoolean},
FLUXER_ACCOUNT_IDENTITY: {path: ['instance', 'account_identity'], parse: parseAccountIdentity},
FLUXER_TAG_STYLE: {path: ['instance', 'tag_style'], parse: parseTagStyle},
FLUXER_DISCOVERY_ENABLED: {path: ['discovery', 'enabled'], parse: parseBoolean},
FLUXER_DISCOVERY_MIN_MEMBER_COUNT: {path: ['discovery', 'min_member_count'], parse: parseInteger},
FLUXER_DELETION_GRACE_PERIOD_HOURS: {path: ['deletion_grace_period_hours'], parse: parseInteger},
@@ -326,6 +328,18 @@ function parseBoolean(raw: string): boolean {
}
}
function parseAccountIdentity(raw: string): string {
const value = raw.trim().toLowerCase();
if (value === 'email' || value === 'username') return value;
throw new Error('must be email or username');
}
function parseTagStyle(raw: string): string {
const value = raw.trim().toLowerCase();
if (value === 'none' || value === 'random') return value;
throw new Error('must be none or random');
}
function parseJson(raw: string): unknown {
try {
return JSON.parse(raw);