import { inject, Injectable, Signal } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { OidcSecurityService } from 'angular-auth-oidc-client'; import { map } from 'rxjs'; import { AuthService } from './auth.service'; /** DigiD-backed AuthService over angular-auth-oidc-client (Keycloak `digid` realm). */ @Injectable() export class DigiadAuthService extends AuthService { private readonly oidc = inject(OidcSecurityService); readonly isAuthenticated: Signal = toSignal( this.oidc.isAuthenticated$.pipe(map((result) => result.isAuthenticated)), { initialValue: false }, ); readonly bsn: Signal = toSignal( this.oidc.userData$.pipe(map((data) => (data.userData as { bsn?: string } | null)?.bsn)), { initialValue: undefined }, ); override login(): void { this.oidc.authorize(); } override logout(): void { this.oidc.logoff().subscribe(); } }