54 lines
2.1 KiB
TypeScript
54 lines
2.1 KiB
TypeScript
|
|
|
|
import { bootstrapApplication } from '@angular/platform-browser';
|
|
import { provideRouter, withHashLocation } from '@angular/router';
|
|
import { provideHttpClient, withInterceptors } from '@angular/common/http';
|
|
import { provideZonelessChangeDetection, APP_INITIALIZER } from '@angular/core';
|
|
import { AppComponent } from './src/app.component';
|
|
import { APP_ROUTES } from './src/app.routes';
|
|
import { authInterceptor } from './src/interceptors/auth.interceptor';
|
|
import { AuthService } from './src/services/auth.service';
|
|
import { UserService } from './src/services/user.service';
|
|
import type { UserPreferences } from './src/services/user.service';
|
|
import { InstanceService } from './src/services/instance.service';
|
|
import { firstValueFrom } from 'rxjs';
|
|
|
|
function applyTheme(theme?: string | null) {
|
|
const t = theme || 'system';
|
|
try {
|
|
document.documentElement.setAttribute('data-theme', t);
|
|
} catch {}
|
|
}
|
|
|
|
function appInitializerFactory(auth: AuthService, user: UserService, instances: InstanceService) {
|
|
return async () => {
|
|
try {
|
|
// Attempt refresh on startup (if cookies present)
|
|
const ok = await firstValueFrom(auth.refresh());
|
|
if (ok) {
|
|
// Load user profile for header greeting
|
|
try {
|
|
const me = await firstValueFrom(user.loadMe());
|
|
if (me) auth.setCurrentUser(me);
|
|
} catch {}
|
|
const prefs: UserPreferences = await firstValueFrom(user.loadPreferences());
|
|
if (prefs) {
|
|
if (prefs.defaultProvider) instances.setSelectedProvider(prefs.defaultProvider as any);
|
|
if (prefs.region) instances.setRegion(prefs.region);
|
|
applyTheme(prefs.theme);
|
|
}
|
|
}
|
|
} catch {}
|
|
};
|
|
}
|
|
|
|
bootstrapApplication(AppComponent, {
|
|
providers: [
|
|
provideZonelessChangeDetection(),
|
|
provideRouter(APP_ROUTES, withHashLocation()),
|
|
provideHttpClient(withInterceptors([authInterceptor])),
|
|
{ provide: APP_INITIALIZER, useFactory: appInitializerFactory, deps: [AuthService, UserService, InstanceService], multi: true },
|
|
],
|
|
}).catch((err) => console.error(err));
|
|
|
|
// AI Studio always uses an `index.tsx` file for all project types.
|