@dereekb/dbx-firebase 13.3.1 → 13.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, computed, output, ChangeDetectionStrategy, Component, inject, Injectable, signal, effect, Directive, provideAppInitializer, makeEnvironmentProviders } from '@angular/core';
|
|
3
|
-
import { DbxFirebaseLoginComponent, DbxFirebaseAuthService, AbstractDbxFirebaseDocumentStore, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreUpdateFunction, firebaseDocumentStoreDeleteFunction, AbstractDbxFirebaseCollectionStore, DbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionStoreDirective, DbxFirebaseDocumentStoreDirective, provideDbxFirebaseDocumentStoreDirective } from '@dereekb/dbx-firebase';
|
|
4
3
|
import * as i1$1 from '@dereekb/dbx-web';
|
|
5
4
|
import { DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent, DbxAvatarComponent, DbxLoadingComponent, DbxButtonSpacerDirective, AbstractDbxSelectionListWrapperDirective, DbxListWrapperComponentImportsModule, provideDbxListViewWrapper, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, AbstractDbxSelectionListViewDirective, DbxSelectionValueListViewComponentImportsModule, provideDbxListView, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, AbstractDbxValueListViewItemComponent, DbxActionSnackbarErrorDirective, DbxContentPitDirective, DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxActionConfirmDirective } from '@dereekb/dbx-web';
|
|
6
5
|
import { readableError, SPACE_STRING_SPLIT_JOIN, separateValues } from '@dereekb/util';
|
|
7
6
|
import { DbxInjectionComponent, DBX_INJECTION_COMPONENT_DATA, DbxRouterService, dbxRouteParamReaderInstance, completeOnDestroy, DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionButtonDirective, DbxAppAuthRouterService } from '@dereekb/dbx-core';
|
|
8
7
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
8
|
+
import { DbxFirebaseAuthService, AbstractDbxFirebaseDocumentStore, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreUpdateFunction, firebaseDocumentStoreDeleteFunction, AbstractDbxFirebaseCollectionStore, DbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionStoreDirective, DbxFirebaseDocumentStoreDirective, provideDbxFirebaseDocumentStoreDirective } from '@dereekb/dbx-firebase';
|
|
9
9
|
import { HttpClient } from '@angular/common/http';
|
|
10
10
|
import { first, switchMap, of, map, BehaviorSubject, tap } from 'rxjs';
|
|
11
11
|
import * as i1 from '@dereekb/dbx-form';
|
|
@@ -61,7 +61,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
61
61
|
args: [{
|
|
62
62
|
selector: 'dbx-firebase-oauth-login-view',
|
|
63
63
|
standalone: true,
|
|
64
|
-
imports: [
|
|
64
|
+
imports: [DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent],
|
|
65
65
|
template: `
|
|
66
66
|
<div class="dbx-firebase-oauth-login-view">
|
|
67
67
|
@switch (loginStateCase()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dereekb-dbx-firebase-oidc.mjs","sources":["../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.login.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.list.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/service/oidc.configuration.service.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.default.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/service/oidc.interaction.service.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/containers/oauth.login.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/containers/oauth.consent.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.form.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.client.form.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.client.test.form.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.list.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.create.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/util/pkce.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.test.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.update.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.collection.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.collection.store.directive.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.directive.ts","../../../../packages/dbx-firebase/oidc/src/lib/oidc.providers.ts","../../../../packages/dbx-firebase/oidc/src/lib/index.ts","../../../../packages/dbx-firebase/oidc/src/dereekb-dbx-firebase-oidc.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DbxFirebaseLoginComponent } from '@dereekb/dbx-firebase';\nimport { DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent } from '@dereekb/dbx-web';\nimport { type ErrorInput, type Maybe, readableError } from '@dereekb/util';\n\n/**\n * State cases for the OIDC login interaction flow.\n */\nexport type OidcLoginStateCase = 'no_user' | 'user' | 'submitting' | 'error';\n\n/**\n * Presentational component for the OIDC OAuth login interaction.\n *\n * Renders the login UI based on the current state case. Supports ng-content\n * projection to allow apps to provide a custom login view for the `'no_user'` state,\n * falling back to the default `<dbx-firebase-login>` component.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-login-view [loginStateCase]=\"'no_user'\">\n * <my-custom-login />\n * </dbx-firebase-oauth-login-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-login-view',\n standalone: true,\n imports: [DbxFirebaseLoginComponent, DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent],\n template: `\n <div class=\"dbx-firebase-oauth-login-view\">\n @switch (loginStateCase()) {\n @case ('no_user') {\n <ng-content></ng-content>\n }\n @case ('user') {\n <dbx-basic-loading [loading]=\"true\" text=\"Signing in...\"></dbx-basic-loading>\n }\n @case ('submitting') {\n <dbx-basic-loading [loading]=\"true\" text=\"Submitting authentication...\"></dbx-basic-loading>\n }\n @case ('error') {\n <dbx-button text=\"Retry\" [raised]=\"true\" (buttonClick)=\"retryClick.emit()\"></dbx-button>\n <dbx-error [error]=\"resolvedError()\"></dbx-error>\n }\n }\n </div>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-login-view'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthLoginViewComponent {\n readonly loginStateCase = input.required<OidcLoginStateCase>();\n readonly error = input<Maybe<string | ErrorInput>>();\n\n readonly resolvedError = computed<Maybe<ErrorInput>>(() => {\n const error = this.error();\n return typeof error === 'string' ? readableError('ERROR', error) : error;\n });\n\n readonly retryClick = output<void>();\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAvatarComponent, DbxButtonComponent, DbxButtonSpacerDirective, DbxErrorComponent, DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { type ErrorInput, type Maybe, readableError, SPACE_STRING_SPLIT_JOIN } from '@dereekb/util';\nimport { type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type DbxFirebaseOAuthConsentScopesViewData } from './oauth.consent.scope.view.component';\n\n/**\n * Presentational component for the OIDC OAuth consent screen.\n *\n * Accepts an `OAuthInteractionLoginDetails` input that contains all client and scope\n * information. Renders the client name, logo, client URL, scopes (via `<dbx-injection>`),\n * error/loading states, and approve/deny action buttons.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-view\n * [details]=\"loginDetails\"\n * [loading]=\"false\"\n * [scopeInjectionConfig]=\"scopeConfig\"\n * (approveClick)=\"onApprove()\"\n * (denyClick)=\"onDeny()\">\n * </dbx-firebase-oauth-consent-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-view',\n standalone: true,\n imports: [DbxInjectionComponent, DbxAvatarComponent, DbxLoadingComponent, DbxErrorComponent, DbxButtonComponent, DbxButtonSpacerDirective],\n styleUrls: ['./oauth.consent.view.component.scss'],\n template: `\n <div class=\"dbx-firebase-oauth-consent-view\">\n @if (loading()) {\n <dbx-loading [loading]=\"true\" text=\"Processing...\"></dbx-loading>\n } @else {\n <div class=\"dbx-firebase-oauth-consent-header\">\n @if (clientName()) {\n <h2>You're signing in to {{ clientName() }}</h2>\n }\n <div class=\"dbx-firebase-oauth-consent-header-info dbx-flex\">\n <dbx-avatar [avatarUrl]=\"logoUri()\" [avatarStyle]=\"'square'\" avatarIcon=\"apps\"></dbx-avatar>\n <span>\n @if (clientUri()) {\n <a class=\"dbx-firebase-oauth-consent-client-uri\" [href]=\"clientUri()\" target=\"_blank\" rel=\"noopener noreferrer\">{{ clientUri() }}</a>\n }\n </span>\n </div>\n </div>\n <dbx-injection [config]=\"resolvedScopeInjectionConfig()\"></dbx-injection>\n <div class=\"dbx-pt3 dbx-pb3 dbx-firebase-oauth-consent-actions\">\n <dbx-button text=\"Approve\" [raised]=\"true\" color=\"primary\" (buttonClick)=\"approveClick.emit()\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button text=\"Deny\" [flat]=\"true\" color=\"warn\" (buttonClick)=\"denyClick.emit()\"></dbx-button>\n </div>\n @if (resolvedError()) {\n <dbx-error [error]=\"resolvedError()\"></dbx-error>\n }\n }\n </div>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-consent-view'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentViewComponent {\n readonly details = input<Maybe<OAuthInteractionLoginDetails>>();\n readonly loading = input<boolean>(false);\n readonly error = input<Maybe<string | ErrorInput>>();\n readonly scopeInjectionConfig = input.required<DbxInjectionComponentConfig>();\n\n readonly clientName = computed(() => this.details()?.client_name ?? '');\n readonly clientUri = computed(() => this.details()?.client_uri);\n readonly logoUri = computed(() => this.details()?.logo_uri);\n readonly scopes = computed<OidcScope[]>(() => SPACE_STRING_SPLIT_JOIN.splitStrings(this.details()?.scopes ?? ''));\n\n readonly resolvedError = computed<Maybe<ErrorInput>>(() => {\n const error = this.error();\n return typeof error === 'string' ? readableError('ERROR', error) : error;\n });\n\n readonly approveClick = output<void>();\n readonly denyClick = output<void>();\n\n readonly resolvedScopeInjectionConfig = computed<DbxInjectionComponentConfig>(() => {\n const data: DbxFirebaseOAuthConsentScopesViewData = {\n details: this.details(),\n scopes: this.scopes(),\n clientName: this.clientName()\n };\n\n return { ...this.scopeInjectionConfig(), data };\n });\n}\n","import { computed, inject } from '@angular/core';\nimport { DBX_INJECTION_COMPONENT_DATA } from '@dereekb/dbx-core';\nimport { type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\n\n/**\n * Data provided to consent scope view components via the `DBX_INJECTION_COMPONENT_DATA` token.\n *\n * Contains the scopes being requested and contextual information about the consent interaction.\n */\nexport interface DbxFirebaseOAuthConsentScopesViewData {\n readonly details?: Maybe<OAuthInteractionLoginDetails>;\n readonly scopes: OidcScope[];\n readonly clientName: string;\n}\n\n/**\n * Abstract base class for consent scope view components.\n *\n * Provides typed access to the `DbxFirebaseOAuthConsentScopesViewData` injected\n * via `DBX_INJECTION_COMPONENT_DATA`. Subclasses only need to define a template.\n *\n * @example\n * ```typescript\n * @Component({ template: `...` })\n * export class MyCustomScopesViewComponent extends AbstractDbxFirebaseOAuthConsentScopeViewComponent {}\n * ```\n */\nexport abstract class AbstractDbxFirebaseOAuthConsentScopeViewComponent {\n private readonly data = inject<DbxFirebaseOAuthConsentScopesViewData>(DBX_INJECTION_COMPONENT_DATA);\n\n readonly details = computed(() => this.data?.details);\n readonly scopes = computed(() => this.data?.scopes ?? []);\n readonly clientName = computed(() => this.data?.clientName ?? '');\n readonly clientUri = computed(() => this.data?.details?.client_uri);\n readonly logoUri = computed(() => this.data?.details?.logo_uri);\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\n\n/**\n * Standalone presentational component that renders a list of OAuth consent scopes.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-scope-list [scopes]=\"mappedScopes\"></dbx-firebase-oauth-consent-scope-list>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-list',\n standalone: true,\n styleUrls: ['./oauth.consent.scope.list.component.scss'],\n template: `\n @for (scope of scopes(); track scope.name) {\n <div class=\"dbx-firebase-oauth-consent-scope-list-item dbx-mb2\">\n <span class=\"dbx-firebase-oauth-consent-scope-name dbx-pb2\">{{ scope.name }}</span>\n @if (scope.description) {\n <span class=\"dbx-firebase-oauth-consent-scope-description\">{{ scope.description }}</span>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeListComponent {\n readonly scopes = input<OAuthConsentScope[]>([]);\n}\n","import { Injectable, inject, type Type } from '@angular/core';\nimport { type SegueRefOrSegueRefRouterLink } from '@dereekb/dbx-core';\nimport { type Maybe } from '@dereekb/util';\nimport { type OidcScopeDetails, type OidcTokenEndpointAuthMethod } from '@dereekb/firebase';\nimport { type AbstractDbxFirebaseOAuthConsentScopeViewComponent } from '../interaction/components/oauth.consent.scope.view.component';\n\nexport const DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH = '/oidc/auth';\nexport const DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH = '/interaction';\nexport const DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY = 'uid';\nexport const DEFAULT_OIDC_CLIENT_ID_PARAM_KEY = 'client_id';\nexport const DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY = 'client_name';\nexport const DEFAULT_OIDC_CLIENT_URI_PARAM_KEY = 'client_uri';\nexport const DEFAULT_OIDC_LOGO_URI_PARAM_KEY = 'logo_uri';\nexport const DEFAULT_OIDC_SCOPES_PARAM_KEY = 'scopes';\nexport const DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS: OidcTokenEndpointAuthMethod[] = ['client_secret_post', 'client_secret_basic'];\n\n/**\n * Abstract configuration class used as a DI token for app-level OIDC settings.\n *\n * Apps provide a concrete implementation via `provideDbxFirebaseOidc()`.\n */\nexport abstract class DbxFirebaseOidcConfig {\n /** Available scopes for the OIDC provider. Used in scope picker fields. */\n abstract readonly availableScopes: OidcScopeDetails[];\n /** Path to the authorization endpoint. Defaults to '/oidc/auth'. */\n readonly oidcAuthorizationEndpointApiPath?: Maybe<string>;\n /** Base path for interaction endpoints. Defaults to '/interaction'. */\n readonly oidcInteractionEndpointApiPath?: Maybe<string>;\n /**\n * Supported token endpoint authentication methods.\n *\n * Overrides the default methods (`client_secret_post`, `client_secret_basic`).\n * Used by forms and UI components that need to know which auth methods are available.\n */\n readonly tokenEndpointAuthMethods?: Maybe<OidcTokenEndpointAuthMethod[]>;\n /**\n * Frontend route ref for the OAuth interaction pages (login/consent).\n *\n * When provided, this route is registered with {@link DbxAppAuthRouterService} as an\n * ignored route, preventing auth effects from redirecting away during the OIDC flow.\n *\n * Uses hierarchical matching — a parent route ref (e.g., `'app.oauth'`) will cover\n * all child routes (e.g., `'app.oauth.login'`, `'app.oauth.consent'`).\n */\n readonly oauthInteractionRoute?: Maybe<SegueRefOrSegueRefRouterLink>;\n /**\n * Component class for rendering the consent scope list.\n *\n * When not provided, uses `DbxFirebaseOAuthConsentScopeDefaultViewComponent` which\n * maps scope names to descriptions from `availableScopes`.\n */\n readonly consentScopeListViewClass?: Maybe<Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>>;\n}\n\n/**\n * Service that exposes the app-level OIDC configuration.\n *\n * Inject this service in components to access centralized OIDC settings\n * (scopes, endpoint paths, param keys, etc.) without requiring explicit inputs.\n */\n@Injectable()\nexport class DbxFirebaseOidcConfigService {\n private readonly config = inject(DbxFirebaseOidcConfig);\n\n get availableScopes(): OidcScopeDetails[] {\n return this.config.availableScopes;\n }\n\n get oidcAuthorizationEndpointApiPath(): string {\n return this.config.oidcAuthorizationEndpointApiPath ?? DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH;\n }\n\n get oidcInteractionEndpointApiPath(): string {\n return this.config.oidcInteractionEndpointApiPath ?? DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH;\n }\n\n get tokenEndpointAuthMethods(): OidcTokenEndpointAuthMethod[] {\n return this.config.tokenEndpointAuthMethods ?? DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS;\n }\n\n get oauthInteractionRoute(): Maybe<SegueRefOrSegueRefRouterLink> {\n return this.config.oauthInteractionRoute;\n }\n\n get consentScopeListViewClass(): Maybe<Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>> {\n return this.config.consentScopeListViewClass;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { AbstractDbxFirebaseOAuthConsentScopeViewComponent } from './oauth.consent.scope.view.component';\nimport { DbxFirebaseOAuthConsentScopeListComponent } from './oauth.consent.scope.list.component';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\nimport { DbxFirebaseOidcConfigService } from '../../service/oidc.configuration.service';\nimport { separateValues } from '@dereekb/util';\n\n/**\n * Default consent scope view component that maps scope names to descriptions\n * using the `OidcScopeDetails` from the app-level OIDC configuration.\n *\n * Apps can override this by providing a custom `consentScopeListViewClass`\n * in `DbxFirebaseOidcConfig` or `DbxOAuthConsentComponentConfig`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-default-view',\n standalone: true,\n imports: [DbxFirebaseOAuthConsentScopeListComponent],\n template: `\n <p>\n <strong>{{ clientName() }}</strong>\n is requesting these permissions:\n </p>\n <dbx-firebase-oauth-consent-scope-list [scopes]=\"mappedScopes()\"></dbx-firebase-oauth-consent-scope-list>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeDefaultViewComponent extends AbstractDbxFirebaseOAuthConsentScopeViewComponent {\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n readonly mappedScopes = computed<OAuthConsentScope[]>(() => {\n const availableScopes = this.oidcConfigService.availableScopes;\n const availableScopeValues = new Set(availableScopes.map((s) => s.value));\n const { included: knownScopes, excluded: unknownScopes } = separateValues(this.scopes(), (name) => availableScopeValues.has(name));\n\n return [\n ...knownScopes.map((name) => {\n const details = availableScopes.find((s) => s.value === name)!;\n return { name, description: details.description ?? '' };\n }),\n ...unknownScopes.map((name) => ({ name, description: 'unknown' }))\n ];\n });\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { type Observable, switchMap, first } from 'rxjs';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { DbxFirebaseOidcConfigService } from './oidc.configuration.service';\nimport { type OAuthInteractionLoginRequest, type OAuthInteractionConsentRequest, type OidcInteractionUid, type OAuthInteractionLoginResponse, type OAuthInteractionConsentResponse } from '@dereekb/firebase';\n\n// MARK: Service\n/**\n * Service for communicating with the backend OIDC interaction endpoints.\n *\n * Automatically includes the current user's Firebase Auth ID token\n * with each request for server-side verification.\n *\n * After successful login/consent submission, the server returns a redirect URL.\n * The component is responsible for navigating to it (e.g., via `window.location.href`).\n */\n@Injectable({ providedIn: 'root' })\nexport class DbxFirebaseOidcInteractionService {\n private readonly http = inject(HttpClient);\n private readonly _authService = inject(DbxFirebaseAuthService);\n private readonly _oidcConfig = inject(DbxFirebaseOidcConfigService);\n\n /**\n * Base URL for the interaction API, derived from the OIDC config service.\n */\n get baseUrl(): string {\n return this._oidcConfig.oidcInteractionEndpointApiPath;\n }\n\n /**\n * Submit login to complete the login interaction.\n *\n * Automatically attaches the current user's Firebase ID token.\n *\n * @returns Observable that emits the redirect URL from the server response.\n */\n submitLogin(uid: OidcInteractionUid): Observable<OAuthInteractionLoginResponse> {\n return this._authService.idTokenString$.pipe(\n first(),\n switchMap((idToken) => this.http.post<OAuthInteractionLoginResponse>(`${this.baseUrl}/${uid}/login`, { idToken } as OAuthInteractionLoginRequest))\n );\n }\n\n /**\n * Submit consent decision to complete the consent interaction.\n *\n * Automatically attaches the current user's Firebase ID token.\n *\n * @returns Observable that emits the redirect URL from the server response.\n */\n submitConsent(uid: OidcInteractionUid, approved: boolean): Observable<OAuthInteractionConsentResponse> {\n return this._authService.idTokenString$.pipe(\n first(),\n switchMap((idToken) => this.http.post<OAuthInteractionConsentResponse>(`${this.baseUrl}/${uid}/consent`, { idToken, approved } as OAuthInteractionConsentRequest))\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, computed, signal, effect, type OnDestroy, type Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { DbxFirebaseOidcInteractionService } from '../../service/oidc.interaction.service';\nimport { DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY } from '../../service/oidc.configuration.service';\nimport { type OidcInteractionUid } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { type OidcLoginStateCase, DbxFirebaseOAuthLoginViewComponent } from '../components/oauth.login.view.component';\n\n/**\n * Container component for the OIDC OAuth login interaction flow.\n *\n * Manages all state: route param reading, Firebase Auth observation, ID token\n * submission, and error handling. Delegates visual rendering to\n * `DbxFirebaseOAuthLoginViewComponent`.\n *\n * Supports ng-content projection — any content provided is passed through to\n * the view component, replacing the default `<dbx-firebase-login>` for the\n * `'no_user'` state.\n *\n * Usage: Route to this component with `?uid=<interaction-uid>` query param.\n */\n@Component({\n selector: 'dbx-firebase-oauth-login',\n standalone: true,\n imports: [DbxFirebaseOAuthLoginViewComponent],\n template: `\n <dbx-firebase-oauth-login-view [loginStateCase]=\"loginStateCase()\" [error]=\"errorMessage()\" (retryClick)=\"retry()\">\n <ng-content />\n </dbx-firebase-oauth-login-view>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-login'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthLoginComponent implements OnDestroy {\n private readonly dbxRouterService = inject(DbxRouterService);\n private readonly dbxFirebaseAuthService = inject(DbxFirebaseAuthService);\n private readonly interactionService = inject(DbxFirebaseOidcInteractionService);\n readonly uidParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY);\n\n readonly interactionUid: Signal<Maybe<OidcInteractionUid>> = toSignal(this.uidParamReader.value$);\n readonly isLoggedIn = toSignal(this.dbxFirebaseAuthService.isLoggedIn$, { initialValue: false });\n\n readonly submitting = signal(false);\n readonly errorMessage = signal<string | null>(null);\n\n readonly loginStateCase = computed<OidcLoginStateCase>(() => {\n if (this.submitting()) {\n return 'submitting';\n }\n\n if (this.errorMessage()) {\n return 'error';\n }\n\n if (!this.isLoggedIn()) {\n return 'no_user';\n }\n\n return 'user';\n });\n\n constructor() {\n // Auto-submit when user is logged in\n effect(() => {\n if (this.loginStateCase() === 'user') {\n this._submitIdToken();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.uidParamReader.destroy();\n }\n\n retry(): void {\n this.errorMessage.set(null);\n this._submitIdToken();\n }\n\n private _submitIdToken(): void {\n const uid = this.interactionUid();\n\n if (!uid) {\n this.errorMessage.set('Missing interaction UID from route parameters.');\n return;\n }\n\n this.submitting.set(true);\n this.errorMessage.set(null);\n\n this.interactionService.submitLogin(uid).subscribe({\n next: (response) => {\n this.submitting.set(false);\n\n if (response.redirectTo) {\n window.location.href = response.redirectTo;\n }\n },\n error: () => {\n this.submitting.set(false);\n this.errorMessage.set('Failed to complete login. Please try again.');\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input, computed, signal, type OnDestroy, type Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxFirebaseOidcInteractionService } from '../../service/oidc.interaction.service';\nimport { DbxFirebaseOidcConfigService, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY } from '../../service/oidc.configuration.service';\nimport { type OAuthInteractionLoginDetails } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxFirebaseOAuthConsentViewComponent } from '../components/oauth.consent.view.component';\nimport { type AbstractDbxFirebaseOAuthConsentScopeViewComponent } from '../components/oauth.consent.scope.view.component';\nimport { DbxFirebaseOAuthConsentScopeDefaultViewComponent } from '../components/oauth.consent.scope.default.view.component';\n\n/**\n * Configuration for `DbxOAuthConsentComponent`.\n */\nexport interface DbxOAuthConsentComponentConfig {\n /**\n * Component class for rendering the consent scope list.\n *\n * When not provided, falls back to the class configured in `DbxFirebaseOidcConfig`,\n * which itself defaults to `DbxFirebaseOAuthConsentScopeDefaultViewComponent`.\n */\n readonly consentScopeListViewClass?: Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>;\n}\n\n/**\n * Container component for the OIDC OAuth consent screen.\n *\n * Manages all state: route param reading, consent submission, and error handling.\n * Delegates visual rendering to `DbxFirebaseOAuthConsentViewComponent`.\n *\n * Reads interaction UID and client details from route params (populated by\n * the server redirect), then assembles them into `OAuthInteractionLoginDetails`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent',\n standalone: true,\n imports: [DbxFirebaseOAuthConsentViewComponent],\n template: `\n <dbx-firebase-oauth-consent-view [details]=\"resolvedDetails()\" [loading]=\"loading()\" [error]=\"error()\" [scopeInjectionConfig]=\"scopeInjectionConfig()\" (approveClick)=\"approve()\" (denyClick)=\"deny()\"></dbx-firebase-oauth-consent-view>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-consent'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxOAuthConsentComponent implements OnDestroy {\n private readonly dbxRouterService = inject(DbxRouterService);\n private readonly interactionService = inject(DbxFirebaseOidcInteractionService);\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n // Config input\n readonly config = input<Maybe<DbxOAuthConsentComponentConfig>>();\n\n // Route param readers\n readonly interactionUidParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY);\n readonly clientIdParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY);\n readonly clientNameParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY);\n readonly clientUriParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY);\n readonly logoUriParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_LOGO_URI_PARAM_KEY);\n readonly scopesParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_SCOPES_PARAM_KEY);\n\n // Signals from route params\n private readonly routeUid = toSignal(this.interactionUidParamReader.value$);\n private readonly routeClientId = toSignal(this.clientIdParamReader.value$);\n private readonly routeClientName = toSignal(this.clientNameParamReader.value$);\n private readonly routeClientUri = toSignal(this.clientUriParamReader.value$);\n private readonly routeLogoUri = toSignal(this.logoUriParamReader.value$);\n private readonly routeScopes = toSignal(this.scopesParamReader.value$);\n\n // Resolved values\n readonly resolvedInteractionUid = computed(() => this.routeUid());\n readonly resolvedDetails = computed<Maybe<OAuthInteractionLoginDetails>>(() => {\n const client_id = this.routeClientId() ?? '';\n const client_name = this.routeClientName();\n const client_uri = this.routeClientUri();\n const logo_uri = this.routeLogoUri();\n const scopes = this.routeScopes() ?? '';\n\n return {\n client_id,\n client_name,\n client_uri,\n logo_uri,\n scopes\n };\n });\n\n // Scope injection config: built from the configured scope list view class, falling back to config service, then the default\n readonly scopeInjectionConfig = computed<DbxInjectionComponentConfig>(() => ({\n componentClass: this.config()?.consentScopeListViewClass ?? this.oidcConfigService.consentScopeListViewClass ?? DbxFirebaseOAuthConsentScopeDefaultViewComponent\n }));\n\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n\n ngOnDestroy(): void {\n this.interactionUidParamReader.destroy();\n this.clientIdParamReader.destroy();\n this.clientNameParamReader.destroy();\n this.clientUriParamReader.destroy();\n this.logoUriParamReader.destroy();\n this.scopesParamReader.destroy();\n }\n\n approve(): void {\n this._submitConsent(true);\n }\n\n deny(): void {\n this._submitConsent(false);\n }\n\n private _submitConsent(approved: boolean): void {\n const uid = this.resolvedInteractionUid();\n\n if (!uid) {\n this.error.set('Missing interaction UID');\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n this.interactionService.submitConsent(uid, approved).subscribe({\n next: (response) => {\n this.loading.set(false);\n\n if (response.redirectTo) {\n window.location.href = response.redirectTo;\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set('Failed to process consent. Please try again.');\n }\n });\n }\n}\n","import { textField, valueSelectionField, isWebsiteUrlValidator, searchableStringChipField, pickableItemChipField, pickableValueFieldValuesConfigForStaticLabeledValues } from '@dereekb/dbx-form';\nimport { ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHOD_OPTIONS, PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD, type OidcRedirectUri, type OidcScopeDetails, type OidcTokenEndpointAuthMethod } from '@dereekb/firebase';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { of } from 'rxjs';\n\n// MARK: OidcClient Form Fields\n\nexport interface OidcEntryClientFormFieldsConfig {\n /**\n * Mode to show. Defaults to 'create'.\n */\n readonly mode: 'create' | 'update';\n /**\n * Token endpoint auth methods available for selection.\n *\n * Provided by the {@link DbxFirebaseOidcConfigService}.\n */\n readonly tokenEndpointAuthMethods: OidcTokenEndpointAuthMethod[];\n}\n\n/**\n * Creates fields for the OAuth client create form.\n *\n * Includes `token_endpoint_auth_method` which is immutable after creation.\n */\nexport function oidcEntryClientFormFields(config?: OidcEntryClientFormFieldsConfig): FormlyFieldConfig[] {\n const fields = [];\n\n if (config?.mode === 'create') {\n fields.push(oidcClientTokenEndpointAuthMethodField(config));\n }\n\n fields.push(...oidcEntryClientUpdateFormFields());\n\n return fields;\n}\n\nexport function oidcClientTokenEndpointAuthMethodField(config?: OidcEntryClientFormFieldsConfig): FormlyFieldConfig {\n const allowedAuthMethods = config?.tokenEndpointAuthMethods;\n const options = allowedAuthMethods?.length ? ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHOD_OPTIONS.filter((o) => allowedAuthMethods.includes(o.value)) : ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHOD_OPTIONS;\n\n return valueSelectionField({\n key: 'token_endpoint_auth_method',\n label: 'Token Endpoint Auth Method',\n description: 'How the client authenticates when exchanging tokens. Cannot be changed after creation.',\n required: true,\n options\n });\n}\n\n/**\n * Creates fields for updating an existing OAuth client.\n *\n * Excludes `token_endpoint_auth_method` (immutable after creation).\n */\nexport function oidcEntryClientUpdateFormFields(): FormlyFieldConfig[] {\n return [oidcClientNameField(), oidcClientRedirectUrisField(), oidcClientJwksUriField(), oidcClientLogoUriField(), oidcClientHomepageUriField()];\n}\n\nexport function oidcClientNameField(): FormlyFieldConfig {\n return textField({\n key: 'client_name',\n label: 'Client Name',\n description: 'A human-readable name for this OAuth client.',\n required: true,\n maxLength: 200\n });\n}\n\nexport function oidcClientRedirectUrisField(): FormlyFieldConfig {\n return searchableStringChipField({\n key: 'redirect_uris',\n label: 'Redirect URIs',\n description: 'Type a redirect URI (e.g. https://example.com/callback) and press enter to add it.',\n required: true,\n searchOnEmptyText: false,\n textInputValidator: isWebsiteUrlValidator({ requirePrefix: true, allowPorts: true }),\n search: () => of([]),\n displayForValue: (values) => of(values.map((v) => ({ ...v, label: v.value })))\n });\n}\n\nexport function oidcClientJwksUriField(): FormlyFieldConfig {\n return textField({\n key: 'jwks_uri',\n label: 'JWKS URI',\n description: \"URL where the client's public JSON Web Key Set can be fetched. Required for private_key_jwt authentication.\",\n required: true,\n expressions: {\n hide: (field) => field.model?.token_endpoint_auth_method !== PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD\n }\n });\n}\n\nexport function oidcClientLogoUriField(): FormlyFieldConfig {\n return textField({\n key: 'logo_uri',\n label: 'Logo URI',\n description: 'URL of the client logo image (optional).',\n required: false\n });\n}\n\nexport function oidcClientHomepageUriField(): FormlyFieldConfig {\n return textField({\n key: 'client_uri',\n label: 'Homepage URL',\n description: 'URL of the client homepage (optional).',\n required: false\n });\n}\n\n// MARK: OidcClient Test Form Fields\n\nexport interface OidcEntryClientTestFormFieldsConfig {\n readonly redirectUris: OidcRedirectUri[];\n readonly availableScopes: OidcScopeDetails[];\n}\n\n/**\n * Assembles the form fields for the OAuth test client form.\n */\nexport function oidcEntryClientTestFormFields(config: OidcEntryClientTestFormFieldsConfig): FormlyFieldConfig[] {\n return [oidcClientTestClientIdField(), oidcClientTestRedirectUriField(config.redirectUris), oidcClientTestScopesField(config.availableScopes)];\n}\n\nexport function oidcClientTestClientIdField(): FormlyFieldConfig {\n return textField({\n key: 'client_id',\n label: 'Client ID',\n readonly: true\n });\n}\n\nexport function oidcClientTestRedirectUriField(redirectUris: OidcRedirectUri[]): FormlyFieldConfig {\n const options = redirectUris.map((uri) => ({ label: uri, value: uri }));\n\n return valueSelectionField({\n key: 'redirect_uri',\n label: 'Redirect URI',\n description: 'Select the redirect URI to use for the test flow.',\n required: true,\n options\n });\n}\n\nexport function oidcClientTestScopesField(availableScopes: OidcScopeDetails[]): FormlyFieldConfig {\n return pickableItemChipField({\n key: 'scopes',\n label: 'Scopes',\n description: 'Select the scopes to request.',\n showSelectAllButton: true,\n ...pickableValueFieldValuesConfigForStaticLabeledValues(availableScopes)\n });\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { dbxFormlyFormComponentProviders, DBX_FORMLY_FORM_COMPONENT_TEMPLATE, DbxFormlyFormComponentImportsModule, AbstractConfigAsyncFormlyFormDirective } from '@dereekb/dbx-form';\nimport { oidcEntryClientFormFields, type OidcEntryClientFormFieldsConfig } from './oidcentry.form';\nimport { type CreateOidcClientParams, type UpdateOidcClientFieldParams } from '@dereekb/firebase';\nimport { map } from 'rxjs';\nimport { DbxFirebaseOidcConfigService } from '../../../service/oidc.configuration.service';\n\nexport type DbxFirebaseOidcModelClientFormValue = CreateOidcClientParams;\n\nexport type DbxFirebaseOidcModelClientUpdateFormValue = UpdateOidcClientFieldParams;\n\n/**\n * Config input for {@link DbxFirebaseOidcEntryClientFormComponent}.\n *\n * Omits `tokenEndpointAuthMethods` since the component pulls those from {@link DbxFirebaseOidcConfigService}.\n */\nexport type DbxFirebaseOidcEntryClientFormComponentConfig = Omit<OidcEntryClientFormFieldsConfig, 'tokenEndpointAuthMethods'>;\n\n/**\n * Configurable form component for creating or updating an OAuth client.\n *\n * Pass `{ mode: 'create' }` to show all fields including `token_endpoint_auth_method`.\n * Pass `{ mode: 'update' }` to exclude `token_endpoint_auth_method` (immutable after creation).\n *\n * Token endpoint auth methods are pulled from the injected {@link DbxFirebaseOidcConfigService}.\n */\n@Component({\n selector: 'dbx-firebase-oidc-client-form',\n template: DBX_FORMLY_FORM_COMPONENT_TEMPLATE,\n providers: dbxFormlyFormComponentProviders(),\n imports: [DbxFormlyFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcEntryClientFormComponentConfig> {\n private readonly _oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n readonly fields$ = this.config$.pipe(\n map((config) =>\n oidcEntryClientFormFields({\n ...config,\n tokenEndpointAuthMethods: this._oidcConfigService.tokenEndpointAuthMethods\n })\n )\n );\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { dbxFormlyFormComponentProviders, DBX_FORMLY_FORM_COMPONENT_TEMPLATE, DbxFormlyFormComponentImportsModule, AbstractConfigAsyncFormlyFormDirective } from '@dereekb/dbx-form';\nimport { oidcEntryClientTestFormFields, type OidcEntryClientTestFormFieldsConfig } from './oidcentry.form';\nimport { map } from 'rxjs';\n\nexport interface DbxFirebaseOidcModelClientTestFormValue {\n client_id: string;\n redirect_uri: string;\n scopes: string[];\n}\n\nexport type DbxFirebaseOidcEntryClientTestFormComponentConfig = OidcEntryClientTestFormFieldsConfig;\n\n/**\n * Form component for configuring an OAuth test authorization request.\n *\n * Displays read-only client_id/secret, a redirect URI selector, and scope picker.\n */\n@Component({\n selector: 'dbx-firebase-oidc-client-test-form',\n template: DBX_FORMLY_FORM_COMPONENT_TEMPLATE,\n providers: dbxFormlyFormComponentProviders(),\n imports: [DbxFormlyFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientTestFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcEntryClientTestFormComponentConfig> {\n readonly fields$ = this.config$.pipe(map((config) => oidcEntryClientTestFormFields(config)));\n}\n","import { OIDC_ENTRY_CLIENT_TYPE, type OidcEntry } from '@dereekb/firebase';\nimport { Component, input } from '@angular/core';\nimport { AbstractDbxSelectionListWrapperDirective, AbstractDbxValueListViewItemComponent, AbstractDbxSelectionListViewDirective, type DbxSelectionValueListViewConfig, provideDbxListView, type DbxValueAsListItem, provideDbxListViewWrapper, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DbxSelectionValueListViewComponentImportsModule, DbxListWrapperComponentImportsModule, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE } from '@dereekb/dbx-web';\nimport { of } from 'rxjs';\n\nexport type OidcEntryWithSelection = DbxValueAsListItem<OidcEntry>;\n\n@Component({\n selector: 'dbx-firebase-oidc-client-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n providers: provideDbxListViewWrapper(DbxFirebaseOidcEntryClientListComponent),\n standalone: true,\n imports: [DbxListWrapperComponentImportsModule]\n})\nexport class DbxFirebaseOidcEntryClientListComponent extends AbstractDbxSelectionListWrapperDirective<OidcEntry> {\n constructor() {\n super({\n componentClass: DbxFirebaseOidcEntryClientListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}\n\n@Component({\n selector: 'dbx-firebase-oidc-client-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n providers: provideDbxListView(DbxFirebaseOidcEntryClientListViewComponent),\n standalone: true,\n imports: [DbxSelectionValueListViewComponentImportsModule]\n})\nexport class DbxFirebaseOidcEntryClientListViewComponent extends AbstractDbxSelectionListViewDirective<OidcEntry> {\n readonly config: DbxSelectionValueListViewConfig<OidcEntryWithSelection> = {\n componentClass: DbxFirebaseOidcEntryClientListViewItemComponent,\n mapValuesToItemValues: (x) => of(x.map((y) => ({ ...y, itemValue: y })))\n };\n}\n\n// MARK: Item List\n@Component({\n selector: 'dbx-firebase-oidc-client-list-view-item-client',\n template: `\n <div>\n <p>{{ name }}</p>\n <p class=\"dbx-hint\">{{ clientId }}</p>\n </div>\n `,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientListViewItemClientComponent {\n readonly entry = input.required<OidcEntry>();\n\n get name(): string {\n const payload = this.entry().payload as Record<string, unknown>;\n return (payload?.['client_name'] as string) || 'OAuth Client';\n }\n\n get clientId(): string {\n const payload = this.entry().payload as Record<string, unknown>;\n return (payload?.['client_id'] as string) || '';\n }\n}\n\n@Component({\n selector: 'dbx-firebase-oidc-client-list-view-item-default',\n template: `\n <div>\n <p>{{ entry().type }}</p>\n </div>\n `,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientListViewItemDefaultComponent {\n readonly entry = input.required<OidcEntry>();\n}\n\n@Component({\n template: `\n @switch (itemValue.type) {\n @case (clientType) {\n <dbx-firebase-oidc-client-list-view-item-client [entry]=\"itemValue\"></dbx-firebase-oidc-client-list-view-item-client>\n }\n @default {\n <dbx-firebase-oidc-client-list-view-item-default [entry]=\"itemValue\"></dbx-firebase-oidc-client-list-view-item-default>\n }\n }\n `,\n standalone: true,\n imports: [DbxFirebaseOidcEntryClientListViewItemClientComponent, DbxFirebaseOidcEntryClientListViewItemDefaultComponent]\n})\nexport class DbxFirebaseOidcEntryClientListViewItemComponent extends AbstractDbxValueListViewItemComponent<OidcEntry> {\n readonly clientType = OIDC_ENTRY_CLIENT_TYPE;\n}\n","import { Injectable, inject } from '@angular/core';\nimport { completeOnDestroy } from '@dereekb/dbx-core';\nimport { AbstractDbxFirebaseDocumentStore, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreDeleteFunction, firebaseDocumentStoreUpdateFunction } from '@dereekb/dbx-firebase';\nimport { OidcModelFirestoreCollections, OidcModelFunctions, type CreateOidcClientResult, type RotateOidcClientSecretResult, type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { BehaviorSubject } from 'rxjs';\n\n/** Document store for a single {@link OidcEntry}. */\n@Injectable()\nexport class OidcEntryDocumentStore extends AbstractDbxFirebaseDocumentStore<OidcEntry, OidcEntryDocument> {\n readonly oidcModelFunctions = inject(OidcModelFunctions);\n\n private readonly _latestClientSecret$ = completeOnDestroy(new BehaviorSubject<Maybe<string>>(undefined));\n\n /**\n * The client secret from the most recent create operation.\n *\n * Only available immediately after creation — the server does not return it again.\n */\n readonly latestClientSecret$ = this._latestClientSecret$.asObservable();\n\n get latestClientSecret(): Maybe<string> {\n return this._latestClientSecret$.value;\n }\n\n constructor() {\n super({ firestoreCollection: inject(OidcModelFirestoreCollections).oidcEntryCollection });\n }\n\n readonly createClient = firebaseDocumentStoreCreateFunction(this, this.oidcModelFunctions.oidcEntry.createOidcEntry.client, {\n onResult: (_params, result: CreateOidcClientResult) => {\n this._latestClientSecret$.next(result.client_secret);\n }\n });\n\n readonly updateClient = firebaseDocumentStoreUpdateFunction(this, this.oidcModelFunctions.oidcEntry.updateOidcEntry.client);\n\n readonly rotateClientSecret = firebaseDocumentStoreUpdateFunction(this, this.oidcModelFunctions.oidcEntry.updateOidcEntry.rotateClientSecret, {\n onResult: (_params, result: RotateOidcClientSecretResult) => {\n this._latestClientSecret$.next(result.client_secret);\n }\n });\n\n readonly deleteClient = firebaseDocumentStoreDeleteFunction(this, this.oidcModelFunctions.oidcEntry.deleteOidcEntry.client);\n}\n","import { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionButtonDirective } from '@dereekb/dbx-core';\nimport { DbxActionFormDirective } from '@dereekb/dbx-form';\nimport { DbxButtonComponent, DbxActionSnackbarErrorDirective } from '@dereekb/dbx-web';\nimport { DbxFirebaseOidcEntryClientFormComponent, type DbxFirebaseOidcEntryClientFormComponentConfig, type DbxFirebaseOidcModelClientFormValue } from '../component/oidcentry.client.form.component';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\nimport { type CreateOidcClientParams, type CreateOidcClientResult, type FirestoreModelKey } from '@dereekb/firebase';\nimport { type Configurable, type Maybe } from '@dereekb/util';\nimport { tap } from 'rxjs';\n\n/**\n * Container component for creating a new OAuth client.\n *\n * Wraps the client form in an action context with a submit button.\n * Emits {@link clientCreated} with the result after successful creation.\n */\n@Component({\n selector: 'dbx-firebase-oidc-entry-client-create',\n template: `\n <div dbxAction dbxActionEnforceModified [dbxActionHandler]=\"handleCreateClient\" dbxActionSnackbarError>\n <dbx-firebase-oidc-client-form dbxActionForm [config]=\"formConfig\"></dbx-firebase-oidc-client-form>\n <dbx-button [raised]=\"true\" dbxActionButton text=\"Create\"></dbx-button>\n </div>\n `,\n standalone: true,\n imports: [DbxActionSnackbarErrorDirective, DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionFormDirective, DbxButtonComponent, DbxActionButtonDirective, DbxFirebaseOidcEntryClientFormComponent],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryClientCreateComponent {\n readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n\n readonly formConfig: DbxFirebaseOidcEntryClientFormComponentConfig = { mode: 'create' };\n\n readonly createClientOwnerTarget = input<Maybe<FirestoreModelKey>>();\n readonly clientCreated = output<CreateOidcClientResult>();\n\n readonly handleCreateClient: WorkUsingContext<DbxFirebaseOidcModelClientFormValue> = (value, context) => {\n const params: Configurable<CreateOidcClientParams> = value;\n const target = this.createClientOwnerTarget();\n\n if (target) {\n params.key = target;\n }\n\n context.startWorkingWithLoadingStateObservable(\n this.oidcEntryDocumentStore.createClient(params).pipe(\n tap((state) => {\n if (state.value) {\n this.clientCreated.emit(state.value);\n }\n })\n )\n );\n };\n}\n","/**\n * Generates a random PKCE code verifier string (43 characters, base64url-encoded).\n *\n * @returns A cryptographically random base64url string suitable for use as a PKCE code_verifier.\n */\nexport function generatePkceCodeVerifier(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return base64UrlEncode(bytes);\n}\n\n/**\n * Generates a PKCE code challenge from a code verifier using SHA-256.\n *\n * @param verifier - The code verifier string to hash\n * @returns A base64url-encoded SHA-256 hash of the verifier\n */\nexport async function generatePkceCodeChallenge(verifier: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(verifier);\n const digest = await crypto.subtle.digest('SHA-256', data);\n return base64UrlEncode(new Uint8Array(digest));\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n const binString = Array.from(bytes, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binString).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n","import { ChangeDetectionStrategy, Component, inject, input, signal, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxContentPitDirective, DbxButtonComponent } from '@dereekb/dbx-web';\nimport { DbxFormSourceDirective, DbxFormValueChangeDirective } from '@dereekb/dbx-form';\nimport { type OidcEntryOAuthClientPayloadData, type OidcScopeDetails } from '@dereekb/firebase';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\nimport { DbxFirebaseOidcEntryClientTestFormComponent, type DbxFirebaseOidcModelClientTestFormValue } from '../component/oidcentry.client.test.form.component';\nimport { type OidcEntryClientTestFormFieldsConfig } from '../component/oidcentry.form';\nimport { generatePkceCodeVerifier, generatePkceCodeChallenge } from '../util/pkce';\nimport { DbxFirebaseOidcConfigService } from '../../../service/oidc.configuration.service';\n\n/**\n * Container component for testing an OAuth authorization flow against a registered client.\n *\n * Displays a form with the client's ID, redirect URIs, and scopes,\n * then builds an authorization URL with PKCE parameters that can be opened in a new tab.\n */\n@Component({\n selector: 'dbx-firebase-oidc-entry-client-test',\n template: `\n @if (formConfig()) {\n <dbx-firebase-oidc-client-test-form [dbxFormSource]=\"formTemplate$\" dbxFormSourceMode=\"always\" [config]=\"formConfig()\" (dbxFormValueChange)=\"onFormValueChange($event)\"></dbx-firebase-oidc-client-test-form>\n <dbx-content-pit class=\"dbx-block dbx-mb3\" [rounded]=\"true\">\n <dbx-detail-block class=\"dbx-pb4\" icon=\"link\" header=\"Authorization URL\">\n @if (authorizationUrlSignal()) {\n <dbx-click-to-copy-text [copyText]=\"authorizationUrlSignal()\">\n <div class=\"dbx-small-text\" style=\"word-break: break-all;\">{{ authorizationUrlSignal() }}</div>\n </dbx-click-to-copy-text>\n } @else {\n <div class=\"dbx-hint\">Fill in the form above to generate the URL.</div>\n }\n </dbx-detail-block>\n <dbx-detail-block icon=\"vpn_key\" header=\"Code Verifier (for token exchange)\">\n <dbx-click-to-copy-text [copyText]=\"codeVerifier()\">{{ codeVerifier() }}</dbx-click-to-copy-text>\n </dbx-detail-block>\n </dbx-content-pit>\n <div class=\"dbx-mb3\">\n <dbx-button class=\"dbx-button-spacer\" [raised]=\"true\" color=\"primary\" text=\"Start Authorization Flow\" icon=\"open_in_new\" [disabled]=\"!authorizationUrlSignal()\" (buttonClick)=\"openAuthorizationUrl()\"></dbx-button>\n <dbx-button class=\"dbx-ml2\" text=\"Regenerate PKCE\" icon=\"refresh\" (buttonClick)=\"regeneratePkce()\"></dbx-button>\n </div>\n }\n `,\n standalone: true,\n imports: [CommonModule, DbxFirebaseOidcEntryClientTestFormComponent, DbxFormSourceDirective, DbxFormValueChangeDirective, DbxContentPitDirective, DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryClientTestComponent {\n private readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n /** Scopes the user can pick from. Overrides the service default when provided. */\n readonly availableScopes = input<Maybe<OidcScopeDetails[]>>(undefined);\n\n /** Path to the authorization endpoint. Overrides the service default when provided. */\n readonly oidcAuthorizationEndpointApiPath = input<Maybe<string>>(undefined);\n\n readonly resolvedAvailableScopes = computed<OidcScopeDetails[]>(() => this.availableScopes() ?? this.oidcConfigService.availableScopes);\n readonly resolvedAuthorizationEndpointPath = computed<string>(() => this.oidcAuthorizationEndpointApiPath() ?? this.oidcConfigService.oidcAuthorizationEndpointApiPath);\n\n // MARK: Derived Store Data\n readonly redirectUrisSignal = toSignal(this.oidcEntryDocumentStore.data$.pipe(map((data) => (data.payload as OidcEntryOAuthClientPayloadData)?.redirect_uris ?? [])));\n\n readonly clientIdSignal = toSignal(this.oidcEntryDocumentStore.data$.pipe(map((data) => (data.payload as OidcEntryOAuthClientPayloadData)?.client_id)));\n\n // MARK: Form Config\n readonly formConfig = computed<OidcEntryClientTestFormFieldsConfig | undefined>(() => {\n const redirectUris = this.redirectUrisSignal();\n const availableScopes = this.resolvedAvailableScopes();\n\n if (redirectUris) {\n return { redirectUris, availableScopes };\n }\n\n return undefined;\n });\n\n readonly formTemplate$ = this.oidcEntryDocumentStore.data$.pipe(\n map((data) => {\n const payload = data.payload as OidcEntryOAuthClientPayloadData;\n const formValue: DbxFirebaseOidcModelClientTestFormValue = {\n client_id: payload?.client_id ?? '',\n redirect_uri: payload?.redirect_uris?.[0] ?? '',\n scopes: ['openid']\n };\n return formValue;\n })\n );\n\n // MARK: PKCE\n readonly codeVerifier = signal<string>(generatePkceCodeVerifier());\n readonly codeChallenge = signal<string>('');\n readonly state = signal<string>(generateRandomString());\n readonly nonce = signal<string>(generateRandomString());\n\n /** The current form value, updated by the form via dbxFormValueChange. */\n readonly formValue = signal<Maybe<DbxFirebaseOidcModelClientTestFormValue>>(undefined);\n\n readonly authorizationUrlSignal = computed(() => {\n const clientId = this.clientIdSignal();\n const codeChallenge = this.codeChallenge();\n const state = this.state();\n const nonce = this.nonce();\n const formValue = this.formValue();\n\n if (!clientId || !codeChallenge || !formValue?.redirect_uri) {\n return undefined;\n }\n\n const params = new URLSearchParams({\n response_type: 'code',\n client_id: clientId,\n redirect_uri: formValue.redirect_uri,\n scope: (formValue.scopes ?? ['openid']).join(' '),\n state,\n nonce,\n code_challenge: codeChallenge,\n code_challenge_method: 'S256'\n });\n\n return `${this.resolvedAuthorizationEndpointPath()}?${params.toString()}`;\n });\n\n constructor() {\n this._updateCodeChallenge();\n }\n\n onFormValueChange(value: Maybe<DbxFirebaseOidcModelClientTestFormValue>): void {\n this.formValue.set(value);\n }\n\n openAuthorizationUrl(): void {\n const url = this.authorizationUrlSignal();\n\n if (url) {\n window.open(url, '_blank');\n }\n }\n\n regeneratePkce(): void {\n this.codeVerifier.set(generatePkceCodeVerifier());\n this.state.set(generateRandomString());\n this.nonce.set(generateRandomString());\n this._updateCodeChallenge();\n }\n\n private _updateCodeChallenge(): void {\n generatePkceCodeChallenge(this.codeVerifier()).then((challenge) => {\n this.codeChallenge.set(challenge);\n });\n }\n}\n\nfunction generateRandomString(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionButtonDirective } from '@dereekb/dbx-core';\nimport { DbxActionFormDirective, DbxFormSourceDirective } from '@dereekb/dbx-form';\nimport { DbxButtonComponent, DbxActionSnackbarErrorDirective } from '@dereekb/dbx-web';\nimport { DbxFirebaseOidcEntryClientFormComponent, type DbxFirebaseOidcEntryClientFormComponentConfig, type DbxFirebaseOidcModelClientUpdateFormValue } from '../component/oidcentry.client.form.component';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\nimport { type UpdateOidcClientParams, type OidcEntryOAuthClientPayloadData } from '@dereekb/firebase';\nimport { type Configurable } from '@dereekb/util';\nimport { map } from 'rxjs';\n\n/**\n * Container component for updating an existing OAuth client.\n *\n * Wraps the client update form in an action context with a save button.\n */\n@Component({\n selector: 'dbx-firebase-oidc-entry-client-update',\n template: `\n <div dbxAction dbxActionEnforceModified [dbxActionHandler]=\"handleUpdateClient\" dbxActionSnackbarError>\n <dbx-firebase-oidc-client-form dbxActionForm [dbxFormSource]=\"formTemplate$\" [config]=\"formConfig\"></dbx-firebase-oidc-client-form>\n <dbx-button [raised]=\"true\" dbxActionButton text=\"Save\"></dbx-button>\n </div>\n `,\n standalone: true,\n imports: [DbxActionSnackbarErrorDirective, DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionFormDirective, DbxFormSourceDirective, DbxButtonComponent, DbxActionButtonDirective, DbxFirebaseOidcEntryClientFormComponent],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryClientUpdateComponent {\n readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n\n readonly formConfig: DbxFirebaseOidcEntryClientFormComponentConfig = { mode: 'update' };\n\n readonly formTemplate$ = this.oidcEntryDocumentStore.data$.pipe(\n map((data) => {\n const payload = data.payload as OidcEntryOAuthClientPayloadData;\n const formValue: DbxFirebaseOidcModelClientUpdateFormValue = {\n client_name: payload.client_name ?? '',\n redirect_uris: payload.redirect_uris ?? [],\n logo_uri: payload.logo_uri,\n client_uri: payload.client_uri\n };\n return formValue;\n })\n );\n\n readonly handleUpdateClient: WorkUsingContext<DbxFirebaseOidcModelClientUpdateFormValue> = (value, context) => {\n const params: Configurable<Omit<UpdateOidcClientParams, 'key'>> = value;\n context.startWorkingWithLoadingStateObservable(this.oidcEntryDocumentStore.updateClient(params));\n };\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxContentPitDirective, DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxButtonComponent, DbxActionConfirmDirective, type DbxActionConfirmConfig } from '@dereekb/dbx-web';\nimport { DbxActionDirective, DbxActionHandlerDirective, DbxActionButtonDirective } from '@dereekb/dbx-core';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\nimport { type OidcEntryOAuthClientPayloadData } from '@dereekb/firebase';\nimport { map } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\n\n/**\n * Displays the OIDC client ID and (when available) the one-time client secret.\n *\n * The client secret is only shown immediately after creation or after rotating.\n * When no secret is available, a \"Rotate Secret\" button is shown.\n */\n@Component({\n selector: 'dbx-firebase-oidc-entry-client-view',\n template: `\n <dbx-content-pit [rounded]=\"true\">\n <dbx-detail-block class=\"dbx-pb4\" icon=\"key\" header=\"Client ID\">\n <dbx-click-to-copy-text [copyText]=\"clientIdSignal()\">{{ clientIdSignal() }}</dbx-click-to-copy-text>\n </dbx-detail-block>\n <dbx-detail-block icon=\"lock\" header=\"Client Secret\">\n @if (latestClientSecretSignal()) {\n <dbx-click-to-copy-text class=\"dbx-block dbx-pb2\" [copyText]=\"latestClientSecretSignal()\">{{ latestClientSecretSignal() }}</dbx-click-to-copy-text>\n <dbx-click-to-copy-text [copyText]=\"latestClientSecretSignal()\" [showIcon]=\"false\"><div class=\"dbx-hint dbx-u\">This secret is only shown once. Copy it now.</div></dbx-click-to-copy-text>\n } @else {\n <div>\n <div class=\"dbx-hint dbx-pb3\">The client secret was shown once when created. You can invalidate the old one and get a new one.</div>\n <dbx-button dbxAction [dbxActionHandler]=\"handleRotateClientSecret\" [dbxActionConfirm]=\"rotateSecretConfirmConfig\" dbxActionButton text=\"Rotate Secret\" icon=\"refresh\" color=\"warn\" [raised]=\"true\"></dbx-button>\n </div>\n }\n </dbx-detail-block>\n </dbx-content-pit>\n `,\n standalone: true,\n imports: [CommonModule, DbxContentPitDirective, DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxButtonComponent, DbxActionDirective, DbxActionHandlerDirective, DbxActionButtonDirective, DbxActionConfirmDirective],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryClientViewComponent {\n readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n\n readonly clientIdSignal = toSignal(this.oidcEntryDocumentStore.data$.pipe(map((data) => (data.payload as OidcEntryOAuthClientPayloadData)?.client_id)));\n readonly latestClientSecretSignal = toSignal(this.oidcEntryDocumentStore.latestClientSecret$);\n\n readonly rotateSecretConfirmConfig: DbxActionConfirmConfig = {\n title: 'Rotate Client Secret',\n prompt: 'This will invalidate the current client secret. Any applications using it will stop working. Are you sure?',\n confirmText: 'Rotate Secret'\n };\n\n readonly handleRotateClientSecret: WorkUsingContext = (_, context) => {\n context.startWorkingWithLoadingStateObservable(this.oidcEntryDocumentStore.rotateClientSecret({}));\n };\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AbstractDbxFirebaseCollectionStore } from '@dereekb/dbx-firebase';\nimport { OidcModelFirestoreCollections, type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\n\n/** Collection store for querying {@link OidcEntry} documents. */\n@Injectable()\nexport class OidcEntryCollectionStore extends AbstractDbxFirebaseCollectionStore<OidcEntry, OidcEntryDocument> {\n constructor() {\n super({ firestoreCollection: inject(OidcModelFirestoreCollections).oidcEntryCollection });\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { OidcEntryCollectionStore } from './oidcentry.collection.store';\nimport { type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\nimport { DbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionStoreDirective } from '@dereekb/dbx-firebase';\n\n/** Directive providing a {@link OidcEntryCollectionStore} for querying {@link OidcEntry} documents. */\n@Directive({\n selector: '[dbxOidcEntryCollection]',\n providers: provideDbxFirebaseCollectionStoreDirective(OidcEntryCollectionStoreDirective, OidcEntryCollectionStore),\n standalone: true\n})\nexport class OidcEntryCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective<OidcEntry, OidcEntryDocument, OidcEntryCollectionStore> {\n constructor() {\n super(inject(OidcEntryCollectionStore));\n }\n}\n","import { inject, Directive } from '@angular/core';\nimport { DbxFirebaseDocumentStoreDirective, provideDbxFirebaseDocumentStoreDirective } from '@dereekb/dbx-firebase';\nimport { OidcEntryDocumentStore } from './oidcentry.document.store';\nimport { type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\n\n/** Directive providing a {@link OidcEntryDocumentStore} for accessing a single {@link OidcEntry} document. */\n@Directive({\n selector: '[dbxOidcEntryDocument]',\n providers: provideDbxFirebaseDocumentStoreDirective(OidcEntryDocumentStoreDirective, OidcEntryDocumentStore),\n standalone: true\n})\nexport class OidcEntryDocumentStoreDirective extends DbxFirebaseDocumentStoreDirective<OidcEntry, OidcEntryDocument, OidcEntryDocumentStore> {\n constructor() {\n super(inject(OidcEntryDocumentStore));\n }\n}\n","import { type EnvironmentProviders, makeEnvironmentProviders, provideAppInitializer, type Provider, inject } from '@angular/core';\nimport { DbxAppAuthRouterService } from '@dereekb/dbx-core';\nimport { OidcModelFirestoreCollections } from '@dereekb/firebase';\nimport { DbxFirebaseOidcConfig, DbxFirebaseOidcConfigService } from './service/oidc.configuration.service';\n\n/**\n * Provider factory for the {@link OidcModelFirestoreCollections}.\n */\nexport function provideOidcModelFirestoreCollections(appCollection: OidcModelFirestoreCollections): OidcModelFirestoreCollections {\n if (!appCollection.oidcEntryCollection) {\n throw new Error(`OidcModelFirestoreCollections could not be provided using the app's app collection. Set provideOidcModelFirestoreCollections to false in ProvideDbxFirebaseOidcConfig to prevent auto-initialization, or update your app's collection class to implement OidcModelFirestoreCollections.`);\n }\n\n return appCollection;\n}\n\n/**\n * Configuration for {@link provideDbxFirebaseOidc}.\n */\nexport interface ProvideDbxFirebaseOidcConfig {\n /**\n * The app collection class that implements {@link OidcModelFirestoreCollections}.\n *\n * Used to resolve the {@link OidcModelFirestoreCollections} provider.\n */\n readonly appCollectionClass: abstract new (...args: any[]) => any;\n /**\n * Whether or not to provide the {@link OidcModelFirestoreCollections}.\n *\n * True by default.\n */\n readonly provideOidcModelFirestoreCollections?: boolean;\n /**\n * App-level OIDC configuration (scopes, endpoint paths).\n *\n * Provided as {@link DbxFirebaseOidcConfig} and consumed by {@link DbxFirebaseOidcConfigService}.\n */\n readonly oidcConfig: DbxFirebaseOidcConfig;\n}\n\n/**\n * Provides the OIDC-related Angular services and collections for `@dereekb/dbx-firebase/oidc`.\n *\n * When `oauthInteractionRoute` is configured in {@link DbxFirebaseOidcConfig}, an app initializer\n * is registered that adds that route to the {@link DbxAppAuthRouterService} ignored routes set,\n * preventing auth effects from redirecting away during the OIDC interaction flow.\n */\nexport function provideDbxFirebaseOidc(config: ProvideDbxFirebaseOidcConfig): EnvironmentProviders {\n const providers: (Provider | EnvironmentProviders)[] = [{ provide: DbxFirebaseOidcConfig, useValue: config.oidcConfig }, DbxFirebaseOidcConfigService];\n\n if (config.provideOidcModelFirestoreCollections !== false) {\n providers.push({\n provide: OidcModelFirestoreCollections,\n useFactory: provideOidcModelFirestoreCollections,\n deps: [config.appCollectionClass]\n });\n }\n\n // Register the OAuth interaction route as ignored by auth effects\n if (config.oidcConfig.oauthInteractionRoute) {\n const routeRef = config.oidcConfig.oauthInteractionRoute;\n providers.push(\n provideAppInitializer(() => {\n const authRouterService = inject(DbxAppAuthRouterService);\n authRouterService.addIgnoredRoute(routeRef);\n })\n );\n }\n\n return makeEnvironmentProviders(providers);\n}\n","// @dereekb/dbx-firebase/oidc\nexport * from './interaction';\nexport * from './modules/oidcmodel';\nexport * from './oidc.providers';\nexport * from './service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dereekb-dbx-firebase-oidc.mjs","sources":["../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.login.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.list.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/service/oidc.configuration.service.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.default.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/service/oidc.interaction.service.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/containers/oauth.login.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/containers/oauth.consent.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.form.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.client.form.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.client.test.form.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.list.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.create.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/util/pkce.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.test.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.update.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.collection.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.collection.store.directive.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.directive.ts","../../../../packages/dbx-firebase/oidc/src/lib/oidc.providers.ts","../../../../packages/dbx-firebase/oidc/src/lib/index.ts","../../../../packages/dbx-firebase/oidc/src/dereekb-dbx-firebase-oidc.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent } from '@dereekb/dbx-web';\nimport { type ErrorInput, type Maybe, readableError } from '@dereekb/util';\n\n/**\n * State cases for the OIDC login interaction flow.\n */\nexport type OidcLoginStateCase = 'no_user' | 'user' | 'submitting' | 'error';\n\n/**\n * Presentational component for the OIDC OAuth login interaction.\n *\n * Renders the login UI based on the current state case. Supports ng-content\n * projection to allow apps to provide a custom login view for the `'no_user'` state,\n * falling back to the default `<dbx-firebase-login>` component.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-login-view [loginStateCase]=\"'no_user'\">\n * <my-custom-login />\n * </dbx-firebase-oauth-login-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-login-view',\n standalone: true,\n imports: [DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent],\n template: `\n <div class=\"dbx-firebase-oauth-login-view\">\n @switch (loginStateCase()) {\n @case ('no_user') {\n <ng-content></ng-content>\n }\n @case ('user') {\n <dbx-basic-loading [loading]=\"true\" text=\"Signing in...\"></dbx-basic-loading>\n }\n @case ('submitting') {\n <dbx-basic-loading [loading]=\"true\" text=\"Submitting authentication...\"></dbx-basic-loading>\n }\n @case ('error') {\n <dbx-button text=\"Retry\" [raised]=\"true\" (buttonClick)=\"retryClick.emit()\"></dbx-button>\n <dbx-error [error]=\"resolvedError()\"></dbx-error>\n }\n }\n </div>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-login-view'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthLoginViewComponent {\n readonly loginStateCase = input.required<OidcLoginStateCase>();\n readonly error = input<Maybe<string | ErrorInput>>();\n\n readonly resolvedError = computed<Maybe<ErrorInput>>(() => {\n const error = this.error();\n return typeof error === 'string' ? readableError('ERROR', error) : error;\n });\n\n readonly retryClick = output<void>();\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAvatarComponent, DbxButtonComponent, DbxButtonSpacerDirective, DbxErrorComponent, DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { type ErrorInput, type Maybe, readableError, SPACE_STRING_SPLIT_JOIN } from '@dereekb/util';\nimport { type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type DbxFirebaseOAuthConsentScopesViewData } from './oauth.consent.scope.view.component';\n\n/**\n * Presentational component for the OIDC OAuth consent screen.\n *\n * Accepts an `OAuthInteractionLoginDetails` input that contains all client and scope\n * information. Renders the client name, logo, client URL, scopes (via `<dbx-injection>`),\n * error/loading states, and approve/deny action buttons.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-view\n * [details]=\"loginDetails\"\n * [loading]=\"false\"\n * [scopeInjectionConfig]=\"scopeConfig\"\n * (approveClick)=\"onApprove()\"\n * (denyClick)=\"onDeny()\">\n * </dbx-firebase-oauth-consent-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-view',\n standalone: true,\n imports: [DbxInjectionComponent, DbxAvatarComponent, DbxLoadingComponent, DbxErrorComponent, DbxButtonComponent, DbxButtonSpacerDirective],\n styleUrls: ['./oauth.consent.view.component.scss'],\n template: `\n <div class=\"dbx-firebase-oauth-consent-view\">\n @if (loading()) {\n <dbx-loading [loading]=\"true\" text=\"Processing...\"></dbx-loading>\n } @else {\n <div class=\"dbx-firebase-oauth-consent-header\">\n @if (clientName()) {\n <h2>You're signing in to {{ clientName() }}</h2>\n }\n <div class=\"dbx-firebase-oauth-consent-header-info dbx-flex\">\n <dbx-avatar [avatarUrl]=\"logoUri()\" [avatarStyle]=\"'square'\" avatarIcon=\"apps\"></dbx-avatar>\n <span>\n @if (clientUri()) {\n <a class=\"dbx-firebase-oauth-consent-client-uri\" [href]=\"clientUri()\" target=\"_blank\" rel=\"noopener noreferrer\">{{ clientUri() }}</a>\n }\n </span>\n </div>\n </div>\n <dbx-injection [config]=\"resolvedScopeInjectionConfig()\"></dbx-injection>\n <div class=\"dbx-pt3 dbx-pb3 dbx-firebase-oauth-consent-actions\">\n <dbx-button text=\"Approve\" [raised]=\"true\" color=\"primary\" (buttonClick)=\"approveClick.emit()\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button text=\"Deny\" [flat]=\"true\" color=\"warn\" (buttonClick)=\"denyClick.emit()\"></dbx-button>\n </div>\n @if (resolvedError()) {\n <dbx-error [error]=\"resolvedError()\"></dbx-error>\n }\n }\n </div>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-consent-view'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentViewComponent {\n readonly details = input<Maybe<OAuthInteractionLoginDetails>>();\n readonly loading = input<boolean>(false);\n readonly error = input<Maybe<string | ErrorInput>>();\n readonly scopeInjectionConfig = input.required<DbxInjectionComponentConfig>();\n\n readonly clientName = computed(() => this.details()?.client_name ?? '');\n readonly clientUri = computed(() => this.details()?.client_uri);\n readonly logoUri = computed(() => this.details()?.logo_uri);\n readonly scopes = computed<OidcScope[]>(() => SPACE_STRING_SPLIT_JOIN.splitStrings(this.details()?.scopes ?? ''));\n\n readonly resolvedError = computed<Maybe<ErrorInput>>(() => {\n const error = this.error();\n return typeof error === 'string' ? readableError('ERROR', error) : error;\n });\n\n readonly approveClick = output<void>();\n readonly denyClick = output<void>();\n\n readonly resolvedScopeInjectionConfig = computed<DbxInjectionComponentConfig>(() => {\n const data: DbxFirebaseOAuthConsentScopesViewData = {\n details: this.details(),\n scopes: this.scopes(),\n clientName: this.clientName()\n };\n\n return { ...this.scopeInjectionConfig(), data };\n });\n}\n","import { computed, inject } from '@angular/core';\nimport { DBX_INJECTION_COMPONENT_DATA } from '@dereekb/dbx-core';\nimport { type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\n\n/**\n * Data provided to consent scope view components via the `DBX_INJECTION_COMPONENT_DATA` token.\n *\n * Contains the scopes being requested and contextual information about the consent interaction.\n */\nexport interface DbxFirebaseOAuthConsentScopesViewData {\n readonly details?: Maybe<OAuthInteractionLoginDetails>;\n readonly scopes: OidcScope[];\n readonly clientName: string;\n}\n\n/**\n * Abstract base class for consent scope view components.\n *\n * Provides typed access to the `DbxFirebaseOAuthConsentScopesViewData` injected\n * via `DBX_INJECTION_COMPONENT_DATA`. Subclasses only need to define a template.\n *\n * @example\n * ```typescript\n * @Component({ template: `...` })\n * export class MyCustomScopesViewComponent extends AbstractDbxFirebaseOAuthConsentScopeViewComponent {}\n * ```\n */\nexport abstract class AbstractDbxFirebaseOAuthConsentScopeViewComponent {\n private readonly data = inject<DbxFirebaseOAuthConsentScopesViewData>(DBX_INJECTION_COMPONENT_DATA);\n\n readonly details = computed(() => this.data?.details);\n readonly scopes = computed(() => this.data?.scopes ?? []);\n readonly clientName = computed(() => this.data?.clientName ?? '');\n readonly clientUri = computed(() => this.data?.details?.client_uri);\n readonly logoUri = computed(() => this.data?.details?.logo_uri);\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\n\n/**\n * Standalone presentational component that renders a list of OAuth consent scopes.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-scope-list [scopes]=\"mappedScopes\"></dbx-firebase-oauth-consent-scope-list>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-list',\n standalone: true,\n styleUrls: ['./oauth.consent.scope.list.component.scss'],\n template: `\n @for (scope of scopes(); track scope.name) {\n <div class=\"dbx-firebase-oauth-consent-scope-list-item dbx-mb2\">\n <span class=\"dbx-firebase-oauth-consent-scope-name dbx-pb2\">{{ scope.name }}</span>\n @if (scope.description) {\n <span class=\"dbx-firebase-oauth-consent-scope-description\">{{ scope.description }}</span>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeListComponent {\n readonly scopes = input<OAuthConsentScope[]>([]);\n}\n","import { Injectable, inject, type Type } from '@angular/core';\nimport { type SegueRefOrSegueRefRouterLink } from '@dereekb/dbx-core';\nimport { type Maybe } from '@dereekb/util';\nimport { type OidcScopeDetails, type OidcTokenEndpointAuthMethod } from '@dereekb/firebase';\nimport { type AbstractDbxFirebaseOAuthConsentScopeViewComponent } from '../interaction/components/oauth.consent.scope.view.component';\n\nexport const DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH = '/oidc/auth';\nexport const DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH = '/interaction';\nexport const DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY = 'uid';\nexport const DEFAULT_OIDC_CLIENT_ID_PARAM_KEY = 'client_id';\nexport const DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY = 'client_name';\nexport const DEFAULT_OIDC_CLIENT_URI_PARAM_KEY = 'client_uri';\nexport const DEFAULT_OIDC_LOGO_URI_PARAM_KEY = 'logo_uri';\nexport const DEFAULT_OIDC_SCOPES_PARAM_KEY = 'scopes';\nexport const DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS: OidcTokenEndpointAuthMethod[] = ['client_secret_post', 'client_secret_basic'];\n\n/**\n * Abstract configuration class used as a DI token for app-level OIDC settings.\n *\n * Apps provide a concrete implementation via `provideDbxFirebaseOidc()`.\n */\nexport abstract class DbxFirebaseOidcConfig {\n /** Available scopes for the OIDC provider. Used in scope picker fields. */\n abstract readonly availableScopes: OidcScopeDetails[];\n /** Path to the authorization endpoint. Defaults to '/oidc/auth'. */\n readonly oidcAuthorizationEndpointApiPath?: Maybe<string>;\n /** Base path for interaction endpoints. Defaults to '/interaction'. */\n readonly oidcInteractionEndpointApiPath?: Maybe<string>;\n /**\n * Supported token endpoint authentication methods.\n *\n * Overrides the default methods (`client_secret_post`, `client_secret_basic`).\n * Used by forms and UI components that need to know which auth methods are available.\n */\n readonly tokenEndpointAuthMethods?: Maybe<OidcTokenEndpointAuthMethod[]>;\n /**\n * Frontend route ref for the OAuth interaction pages (login/consent).\n *\n * When provided, this route is registered with {@link DbxAppAuthRouterService} as an\n * ignored route, preventing auth effects from redirecting away during the OIDC flow.\n *\n * Uses hierarchical matching — a parent route ref (e.g., `'app.oauth'`) will cover\n * all child routes (e.g., `'app.oauth.login'`, `'app.oauth.consent'`).\n */\n readonly oauthInteractionRoute?: Maybe<SegueRefOrSegueRefRouterLink>;\n /**\n * Component class for rendering the consent scope list.\n *\n * When not provided, uses `DbxFirebaseOAuthConsentScopeDefaultViewComponent` which\n * maps scope names to descriptions from `availableScopes`.\n */\n readonly consentScopeListViewClass?: Maybe<Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>>;\n}\n\n/**\n * Service that exposes the app-level OIDC configuration.\n *\n * Inject this service in components to access centralized OIDC settings\n * (scopes, endpoint paths, param keys, etc.) without requiring explicit inputs.\n */\n@Injectable()\nexport class DbxFirebaseOidcConfigService {\n private readonly config = inject(DbxFirebaseOidcConfig);\n\n get availableScopes(): OidcScopeDetails[] {\n return this.config.availableScopes;\n }\n\n get oidcAuthorizationEndpointApiPath(): string {\n return this.config.oidcAuthorizationEndpointApiPath ?? DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH;\n }\n\n get oidcInteractionEndpointApiPath(): string {\n return this.config.oidcInteractionEndpointApiPath ?? DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH;\n }\n\n get tokenEndpointAuthMethods(): OidcTokenEndpointAuthMethod[] {\n return this.config.tokenEndpointAuthMethods ?? DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS;\n }\n\n get oauthInteractionRoute(): Maybe<SegueRefOrSegueRefRouterLink> {\n return this.config.oauthInteractionRoute;\n }\n\n get consentScopeListViewClass(): Maybe<Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>> {\n return this.config.consentScopeListViewClass;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { AbstractDbxFirebaseOAuthConsentScopeViewComponent } from './oauth.consent.scope.view.component';\nimport { DbxFirebaseOAuthConsentScopeListComponent } from './oauth.consent.scope.list.component';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\nimport { DbxFirebaseOidcConfigService } from '../../service/oidc.configuration.service';\nimport { separateValues } from '@dereekb/util';\n\n/**\n * Default consent scope view component that maps scope names to descriptions\n * using the `OidcScopeDetails` from the app-level OIDC configuration.\n *\n * Apps can override this by providing a custom `consentScopeListViewClass`\n * in `DbxFirebaseOidcConfig` or `DbxOAuthConsentComponentConfig`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-default-view',\n standalone: true,\n imports: [DbxFirebaseOAuthConsentScopeListComponent],\n template: `\n <p>\n <strong>{{ clientName() }}</strong>\n is requesting these permissions:\n </p>\n <dbx-firebase-oauth-consent-scope-list [scopes]=\"mappedScopes()\"></dbx-firebase-oauth-consent-scope-list>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeDefaultViewComponent extends AbstractDbxFirebaseOAuthConsentScopeViewComponent {\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n readonly mappedScopes = computed<OAuthConsentScope[]>(() => {\n const availableScopes = this.oidcConfigService.availableScopes;\n const availableScopeValues = new Set(availableScopes.map((s) => s.value));\n const { included: knownScopes, excluded: unknownScopes } = separateValues(this.scopes(), (name) => availableScopeValues.has(name));\n\n return [\n ...knownScopes.map((name) => {\n const details = availableScopes.find((s) => s.value === name)!;\n return { name, description: details.description ?? '' };\n }),\n ...unknownScopes.map((name) => ({ name, description: 'unknown' }))\n ];\n });\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { type Observable, switchMap, first } from 'rxjs';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { DbxFirebaseOidcConfigService } from './oidc.configuration.service';\nimport { type OAuthInteractionLoginRequest, type OAuthInteractionConsentRequest, type OidcInteractionUid, type OAuthInteractionLoginResponse, type OAuthInteractionConsentResponse } from '@dereekb/firebase';\n\n// MARK: Service\n/**\n * Service for communicating with the backend OIDC interaction endpoints.\n *\n * Automatically includes the current user's Firebase Auth ID token\n * with each request for server-side verification.\n *\n * After successful login/consent submission, the server returns a redirect URL.\n * The component is responsible for navigating to it (e.g., via `window.location.href`).\n */\n@Injectable({ providedIn: 'root' })\nexport class DbxFirebaseOidcInteractionService {\n private readonly http = inject(HttpClient);\n private readonly _authService = inject(DbxFirebaseAuthService);\n private readonly _oidcConfig = inject(DbxFirebaseOidcConfigService);\n\n /**\n * Base URL for the interaction API, derived from the OIDC config service.\n */\n get baseUrl(): string {\n return this._oidcConfig.oidcInteractionEndpointApiPath;\n }\n\n /**\n * Submit login to complete the login interaction.\n *\n * Automatically attaches the current user's Firebase ID token.\n *\n * @returns Observable that emits the redirect URL from the server response.\n */\n submitLogin(uid: OidcInteractionUid): Observable<OAuthInteractionLoginResponse> {\n return this._authService.idTokenString$.pipe(\n first(),\n switchMap((idToken) => this.http.post<OAuthInteractionLoginResponse>(`${this.baseUrl}/${uid}/login`, { idToken } as OAuthInteractionLoginRequest))\n );\n }\n\n /**\n * Submit consent decision to complete the consent interaction.\n *\n * Automatically attaches the current user's Firebase ID token.\n *\n * @returns Observable that emits the redirect URL from the server response.\n */\n submitConsent(uid: OidcInteractionUid, approved: boolean): Observable<OAuthInteractionConsentResponse> {\n return this._authService.idTokenString$.pipe(\n first(),\n switchMap((idToken) => this.http.post<OAuthInteractionConsentResponse>(`${this.baseUrl}/${uid}/consent`, { idToken, approved } as OAuthInteractionConsentRequest))\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, computed, signal, effect, type OnDestroy, type Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { DbxFirebaseOidcInteractionService } from '../../service/oidc.interaction.service';\nimport { DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY } from '../../service/oidc.configuration.service';\nimport { type OidcInteractionUid } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { type OidcLoginStateCase, DbxFirebaseOAuthLoginViewComponent } from '../components/oauth.login.view.component';\n\n/**\n * Container component for the OIDC OAuth login interaction flow.\n *\n * Manages all state: route param reading, Firebase Auth observation, ID token\n * submission, and error handling. Delegates visual rendering to\n * `DbxFirebaseOAuthLoginViewComponent`.\n *\n * Supports ng-content projection — any content provided is passed through to\n * the view component, replacing the default `<dbx-firebase-login>` for the\n * `'no_user'` state.\n *\n * Usage: Route to this component with `?uid=<interaction-uid>` query param.\n */\n@Component({\n selector: 'dbx-firebase-oauth-login',\n standalone: true,\n imports: [DbxFirebaseOAuthLoginViewComponent],\n template: `\n <dbx-firebase-oauth-login-view [loginStateCase]=\"loginStateCase()\" [error]=\"errorMessage()\" (retryClick)=\"retry()\">\n <ng-content />\n </dbx-firebase-oauth-login-view>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-login'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthLoginComponent implements OnDestroy {\n private readonly dbxRouterService = inject(DbxRouterService);\n private readonly dbxFirebaseAuthService = inject(DbxFirebaseAuthService);\n private readonly interactionService = inject(DbxFirebaseOidcInteractionService);\n readonly uidParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY);\n\n readonly interactionUid: Signal<Maybe<OidcInteractionUid>> = toSignal(this.uidParamReader.value$);\n readonly isLoggedIn = toSignal(this.dbxFirebaseAuthService.isLoggedIn$, { initialValue: false });\n\n readonly submitting = signal(false);\n readonly errorMessage = signal<string | null>(null);\n\n readonly loginStateCase = computed<OidcLoginStateCase>(() => {\n if (this.submitting()) {\n return 'submitting';\n }\n\n if (this.errorMessage()) {\n return 'error';\n }\n\n if (!this.isLoggedIn()) {\n return 'no_user';\n }\n\n return 'user';\n });\n\n constructor() {\n // Auto-submit when user is logged in\n effect(() => {\n if (this.loginStateCase() === 'user') {\n this._submitIdToken();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.uidParamReader.destroy();\n }\n\n retry(): void {\n this.errorMessage.set(null);\n this._submitIdToken();\n }\n\n private _submitIdToken(): void {\n const uid = this.interactionUid();\n\n if (!uid) {\n this.errorMessage.set('Missing interaction UID from route parameters.');\n return;\n }\n\n this.submitting.set(true);\n this.errorMessage.set(null);\n\n this.interactionService.submitLogin(uid).subscribe({\n next: (response) => {\n this.submitting.set(false);\n\n if (response.redirectTo) {\n window.location.href = response.redirectTo;\n }\n },\n error: () => {\n this.submitting.set(false);\n this.errorMessage.set('Failed to complete login. Please try again.');\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input, computed, signal, type OnDestroy, type Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxFirebaseOidcInteractionService } from '../../service/oidc.interaction.service';\nimport { DbxFirebaseOidcConfigService, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY } from '../../service/oidc.configuration.service';\nimport { type OAuthInteractionLoginDetails } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxFirebaseOAuthConsentViewComponent } from '../components/oauth.consent.view.component';\nimport { type AbstractDbxFirebaseOAuthConsentScopeViewComponent } from '../components/oauth.consent.scope.view.component';\nimport { DbxFirebaseOAuthConsentScopeDefaultViewComponent } from '../components/oauth.consent.scope.default.view.component';\n\n/**\n * Configuration for `DbxOAuthConsentComponent`.\n */\nexport interface DbxOAuthConsentComponentConfig {\n /**\n * Component class for rendering the consent scope list.\n *\n * When not provided, falls back to the class configured in `DbxFirebaseOidcConfig`,\n * which itself defaults to `DbxFirebaseOAuthConsentScopeDefaultViewComponent`.\n */\n readonly consentScopeListViewClass?: Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>;\n}\n\n/**\n * Container component for the OIDC OAuth consent screen.\n *\n * Manages all state: route param reading, consent submission, and error handling.\n * Delegates visual rendering to `DbxFirebaseOAuthConsentViewComponent`.\n *\n * Reads interaction UID and client details from route params (populated by\n * the server redirect), then assembles them into `OAuthInteractionLoginDetails`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent',\n standalone: true,\n imports: [DbxFirebaseOAuthConsentViewComponent],\n template: `\n <dbx-firebase-oauth-consent-view [details]=\"resolvedDetails()\" [loading]=\"loading()\" [error]=\"error()\" [scopeInjectionConfig]=\"scopeInjectionConfig()\" (approveClick)=\"approve()\" (denyClick)=\"deny()\"></dbx-firebase-oauth-consent-view>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-consent'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxOAuthConsentComponent implements OnDestroy {\n private readonly dbxRouterService = inject(DbxRouterService);\n private readonly interactionService = inject(DbxFirebaseOidcInteractionService);\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n // Config input\n readonly config = input<Maybe<DbxOAuthConsentComponentConfig>>();\n\n // Route param readers\n readonly interactionUidParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY);\n readonly clientIdParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY);\n readonly clientNameParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY);\n readonly clientUriParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY);\n readonly logoUriParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_LOGO_URI_PARAM_KEY);\n readonly scopesParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_SCOPES_PARAM_KEY);\n\n // Signals from route params\n private readonly routeUid = toSignal(this.interactionUidParamReader.value$);\n private readonly routeClientId = toSignal(this.clientIdParamReader.value$);\n private readonly routeClientName = toSignal(this.clientNameParamReader.value$);\n private readonly routeClientUri = toSignal(this.clientUriParamReader.value$);\n private readonly routeLogoUri = toSignal(this.logoUriParamReader.value$);\n private readonly routeScopes = toSignal(this.scopesParamReader.value$);\n\n // Resolved values\n readonly resolvedInteractionUid = computed(() => this.routeUid());\n readonly resolvedDetails = computed<Maybe<OAuthInteractionLoginDetails>>(() => {\n const client_id = this.routeClientId() ?? '';\n const client_name = this.routeClientName();\n const client_uri = this.routeClientUri();\n const logo_uri = this.routeLogoUri();\n const scopes = this.routeScopes() ?? '';\n\n return {\n client_id,\n client_name,\n client_uri,\n logo_uri,\n scopes\n };\n });\n\n // Scope injection config: built from the configured scope list view class, falling back to config service, then the default\n readonly scopeInjectionConfig = computed<DbxInjectionComponentConfig>(() => ({\n componentClass: this.config()?.consentScopeListViewClass ?? this.oidcConfigService.consentScopeListViewClass ?? DbxFirebaseOAuthConsentScopeDefaultViewComponent\n }));\n\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n\n ngOnDestroy(): void {\n this.interactionUidParamReader.destroy();\n this.clientIdParamReader.destroy();\n this.clientNameParamReader.destroy();\n this.clientUriParamReader.destroy();\n this.logoUriParamReader.destroy();\n this.scopesParamReader.destroy();\n }\n\n approve(): void {\n this._submitConsent(true);\n }\n\n deny(): void {\n this._submitConsent(false);\n }\n\n private _submitConsent(approved: boolean): void {\n const uid = this.resolvedInteractionUid();\n\n if (!uid) {\n this.error.set('Missing interaction UID');\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n this.interactionService.submitConsent(uid, approved).subscribe({\n next: (response) => {\n this.loading.set(false);\n\n if (response.redirectTo) {\n window.location.href = response.redirectTo;\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set('Failed to process consent. Please try again.');\n }\n });\n }\n}\n","import { textField, valueSelectionField, isWebsiteUrlValidator, searchableStringChipField, pickableItemChipField, pickableValueFieldValuesConfigForStaticLabeledValues } from '@dereekb/dbx-form';\nimport { ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHOD_OPTIONS, PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD, type OidcRedirectUri, type OidcScopeDetails, type OidcTokenEndpointAuthMethod } from '@dereekb/firebase';\nimport { type FormlyFieldConfig } from '@ngx-formly/core';\nimport { of } from 'rxjs';\n\n// MARK: OidcClient Form Fields\n\nexport interface OidcEntryClientFormFieldsConfig {\n /**\n * Mode to show. Defaults to 'create'.\n */\n readonly mode: 'create' | 'update';\n /**\n * Token endpoint auth methods available for selection.\n *\n * Provided by the {@link DbxFirebaseOidcConfigService}.\n */\n readonly tokenEndpointAuthMethods: OidcTokenEndpointAuthMethod[];\n}\n\n/**\n * Creates fields for the OAuth client create form.\n *\n * Includes `token_endpoint_auth_method` which is immutable after creation.\n */\nexport function oidcEntryClientFormFields(config?: OidcEntryClientFormFieldsConfig): FormlyFieldConfig[] {\n const fields = [];\n\n if (config?.mode === 'create') {\n fields.push(oidcClientTokenEndpointAuthMethodField(config));\n }\n\n fields.push(...oidcEntryClientUpdateFormFields());\n\n return fields;\n}\n\nexport function oidcClientTokenEndpointAuthMethodField(config?: OidcEntryClientFormFieldsConfig): FormlyFieldConfig {\n const allowedAuthMethods = config?.tokenEndpointAuthMethods;\n const options = allowedAuthMethods?.length ? ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHOD_OPTIONS.filter((o) => allowedAuthMethods.includes(o.value)) : ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHOD_OPTIONS;\n\n return valueSelectionField({\n key: 'token_endpoint_auth_method',\n label: 'Token Endpoint Auth Method',\n description: 'How the client authenticates when exchanging tokens. Cannot be changed after creation.',\n required: true,\n options\n });\n}\n\n/**\n * Creates fields for updating an existing OAuth client.\n *\n * Excludes `token_endpoint_auth_method` (immutable after creation).\n */\nexport function oidcEntryClientUpdateFormFields(): FormlyFieldConfig[] {\n return [oidcClientNameField(), oidcClientRedirectUrisField(), oidcClientJwksUriField(), oidcClientLogoUriField(), oidcClientHomepageUriField()];\n}\n\nexport function oidcClientNameField(): FormlyFieldConfig {\n return textField({\n key: 'client_name',\n label: 'Client Name',\n description: 'A human-readable name for this OAuth client.',\n required: true,\n maxLength: 200\n });\n}\n\nexport function oidcClientRedirectUrisField(): FormlyFieldConfig {\n return searchableStringChipField({\n key: 'redirect_uris',\n label: 'Redirect URIs',\n description: 'Type a redirect URI (e.g. https://example.com/callback) and press enter to add it.',\n required: true,\n searchOnEmptyText: false,\n textInputValidator: isWebsiteUrlValidator({ requirePrefix: true, allowPorts: true }),\n search: () => of([]),\n displayForValue: (values) => of(values.map((v) => ({ ...v, label: v.value })))\n });\n}\n\nexport function oidcClientJwksUriField(): FormlyFieldConfig {\n return textField({\n key: 'jwks_uri',\n label: 'JWKS URI',\n description: \"URL where the client's public JSON Web Key Set can be fetched. Required for private_key_jwt authentication.\",\n required: true,\n expressions: {\n hide: (field) => field.model?.token_endpoint_auth_method !== PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD\n }\n });\n}\n\nexport function oidcClientLogoUriField(): FormlyFieldConfig {\n return textField({\n key: 'logo_uri',\n label: 'Logo URI',\n description: 'URL of the client logo image (optional).',\n required: false\n });\n}\n\nexport function oidcClientHomepageUriField(): FormlyFieldConfig {\n return textField({\n key: 'client_uri',\n label: 'Homepage URL',\n description: 'URL of the client homepage (optional).',\n required: false\n });\n}\n\n// MARK: OidcClient Test Form Fields\n\nexport interface OidcEntryClientTestFormFieldsConfig {\n readonly redirectUris: OidcRedirectUri[];\n readonly availableScopes: OidcScopeDetails[];\n}\n\n/**\n * Assembles the form fields for the OAuth test client form.\n */\nexport function oidcEntryClientTestFormFields(config: OidcEntryClientTestFormFieldsConfig): FormlyFieldConfig[] {\n return [oidcClientTestClientIdField(), oidcClientTestRedirectUriField(config.redirectUris), oidcClientTestScopesField(config.availableScopes)];\n}\n\nexport function oidcClientTestClientIdField(): FormlyFieldConfig {\n return textField({\n key: 'client_id',\n label: 'Client ID',\n readonly: true\n });\n}\n\nexport function oidcClientTestRedirectUriField(redirectUris: OidcRedirectUri[]): FormlyFieldConfig {\n const options = redirectUris.map((uri) => ({ label: uri, value: uri }));\n\n return valueSelectionField({\n key: 'redirect_uri',\n label: 'Redirect URI',\n description: 'Select the redirect URI to use for the test flow.',\n required: true,\n options\n });\n}\n\nexport function oidcClientTestScopesField(availableScopes: OidcScopeDetails[]): FormlyFieldConfig {\n return pickableItemChipField({\n key: 'scopes',\n label: 'Scopes',\n description: 'Select the scopes to request.',\n showSelectAllButton: true,\n ...pickableValueFieldValuesConfigForStaticLabeledValues(availableScopes)\n });\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { dbxFormlyFormComponentProviders, DBX_FORMLY_FORM_COMPONENT_TEMPLATE, DbxFormlyFormComponentImportsModule, AbstractConfigAsyncFormlyFormDirective } from '@dereekb/dbx-form';\nimport { oidcEntryClientFormFields, type OidcEntryClientFormFieldsConfig } from './oidcentry.form';\nimport { type CreateOidcClientParams, type UpdateOidcClientFieldParams } from '@dereekb/firebase';\nimport { map } from 'rxjs';\nimport { DbxFirebaseOidcConfigService } from '../../../service/oidc.configuration.service';\n\nexport type DbxFirebaseOidcModelClientFormValue = CreateOidcClientParams;\n\nexport type DbxFirebaseOidcModelClientUpdateFormValue = UpdateOidcClientFieldParams;\n\n/**\n * Config input for {@link DbxFirebaseOidcEntryClientFormComponent}.\n *\n * Omits `tokenEndpointAuthMethods` since the component pulls those from {@link DbxFirebaseOidcConfigService}.\n */\nexport type DbxFirebaseOidcEntryClientFormComponentConfig = Omit<OidcEntryClientFormFieldsConfig, 'tokenEndpointAuthMethods'>;\n\n/**\n * Configurable form component for creating or updating an OAuth client.\n *\n * Pass `{ mode: 'create' }` to show all fields including `token_endpoint_auth_method`.\n * Pass `{ mode: 'update' }` to exclude `token_endpoint_auth_method` (immutable after creation).\n *\n * Token endpoint auth methods are pulled from the injected {@link DbxFirebaseOidcConfigService}.\n */\n@Component({\n selector: 'dbx-firebase-oidc-client-form',\n template: DBX_FORMLY_FORM_COMPONENT_TEMPLATE,\n providers: dbxFormlyFormComponentProviders(),\n imports: [DbxFormlyFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcEntryClientFormComponentConfig> {\n private readonly _oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n readonly fields$ = this.config$.pipe(\n map((config) =>\n oidcEntryClientFormFields({\n ...config,\n tokenEndpointAuthMethods: this._oidcConfigService.tokenEndpointAuthMethods\n })\n )\n );\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { dbxFormlyFormComponentProviders, DBX_FORMLY_FORM_COMPONENT_TEMPLATE, DbxFormlyFormComponentImportsModule, AbstractConfigAsyncFormlyFormDirective } from '@dereekb/dbx-form';\nimport { oidcEntryClientTestFormFields, type OidcEntryClientTestFormFieldsConfig } from './oidcentry.form';\nimport { map } from 'rxjs';\n\nexport interface DbxFirebaseOidcModelClientTestFormValue {\n client_id: string;\n redirect_uri: string;\n scopes: string[];\n}\n\nexport type DbxFirebaseOidcEntryClientTestFormComponentConfig = OidcEntryClientTestFormFieldsConfig;\n\n/**\n * Form component for configuring an OAuth test authorization request.\n *\n * Displays read-only client_id/secret, a redirect URI selector, and scope picker.\n */\n@Component({\n selector: 'dbx-firebase-oidc-client-test-form',\n template: DBX_FORMLY_FORM_COMPONENT_TEMPLATE,\n providers: dbxFormlyFormComponentProviders(),\n imports: [DbxFormlyFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientTestFormComponent extends AbstractConfigAsyncFormlyFormDirective<DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcEntryClientTestFormComponentConfig> {\n readonly fields$ = this.config$.pipe(map((config) => oidcEntryClientTestFormFields(config)));\n}\n","import { OIDC_ENTRY_CLIENT_TYPE, type OidcEntry } from '@dereekb/firebase';\nimport { Component, input } from '@angular/core';\nimport { AbstractDbxSelectionListWrapperDirective, AbstractDbxValueListViewItemComponent, AbstractDbxSelectionListViewDirective, type DbxSelectionValueListViewConfig, provideDbxListView, type DbxValueAsListItem, provideDbxListViewWrapper, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DbxSelectionValueListViewComponentImportsModule, DbxListWrapperComponentImportsModule, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE } from '@dereekb/dbx-web';\nimport { of } from 'rxjs';\n\nexport type OidcEntryWithSelection = DbxValueAsListItem<OidcEntry>;\n\n@Component({\n selector: 'dbx-firebase-oidc-client-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n providers: provideDbxListViewWrapper(DbxFirebaseOidcEntryClientListComponent),\n standalone: true,\n imports: [DbxListWrapperComponentImportsModule]\n})\nexport class DbxFirebaseOidcEntryClientListComponent extends AbstractDbxSelectionListWrapperDirective<OidcEntry> {\n constructor() {\n super({\n componentClass: DbxFirebaseOidcEntryClientListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}\n\n@Component({\n selector: 'dbx-firebase-oidc-client-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n providers: provideDbxListView(DbxFirebaseOidcEntryClientListViewComponent),\n standalone: true,\n imports: [DbxSelectionValueListViewComponentImportsModule]\n})\nexport class DbxFirebaseOidcEntryClientListViewComponent extends AbstractDbxSelectionListViewDirective<OidcEntry> {\n readonly config: DbxSelectionValueListViewConfig<OidcEntryWithSelection> = {\n componentClass: DbxFirebaseOidcEntryClientListViewItemComponent,\n mapValuesToItemValues: (x) => of(x.map((y) => ({ ...y, itemValue: y })))\n };\n}\n\n// MARK: Item List\n@Component({\n selector: 'dbx-firebase-oidc-client-list-view-item-client',\n template: `\n <div>\n <p>{{ name }}</p>\n <p class=\"dbx-hint\">{{ clientId }}</p>\n </div>\n `,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientListViewItemClientComponent {\n readonly entry = input.required<OidcEntry>();\n\n get name(): string {\n const payload = this.entry().payload as Record<string, unknown>;\n return (payload?.['client_name'] as string) || 'OAuth Client';\n }\n\n get clientId(): string {\n const payload = this.entry().payload as Record<string, unknown>;\n return (payload?.['client_id'] as string) || '';\n }\n}\n\n@Component({\n selector: 'dbx-firebase-oidc-client-list-view-item-default',\n template: `\n <div>\n <p>{{ entry().type }}</p>\n </div>\n `,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientListViewItemDefaultComponent {\n readonly entry = input.required<OidcEntry>();\n}\n\n@Component({\n template: `\n @switch (itemValue.type) {\n @case (clientType) {\n <dbx-firebase-oidc-client-list-view-item-client [entry]=\"itemValue\"></dbx-firebase-oidc-client-list-view-item-client>\n }\n @default {\n <dbx-firebase-oidc-client-list-view-item-default [entry]=\"itemValue\"></dbx-firebase-oidc-client-list-view-item-default>\n }\n }\n `,\n standalone: true,\n imports: [DbxFirebaseOidcEntryClientListViewItemClientComponent, DbxFirebaseOidcEntryClientListViewItemDefaultComponent]\n})\nexport class DbxFirebaseOidcEntryClientListViewItemComponent extends AbstractDbxValueListViewItemComponent<OidcEntry> {\n readonly clientType = OIDC_ENTRY_CLIENT_TYPE;\n}\n","import { Injectable, inject } from '@angular/core';\nimport { completeOnDestroy } from '@dereekb/dbx-core';\nimport { AbstractDbxFirebaseDocumentStore, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreDeleteFunction, firebaseDocumentStoreUpdateFunction } from '@dereekb/dbx-firebase';\nimport { OidcModelFirestoreCollections, OidcModelFunctions, type CreateOidcClientResult, type RotateOidcClientSecretResult, type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { BehaviorSubject } from 'rxjs';\n\n/** Document store for a single {@link OidcEntry}. */\n@Injectable()\nexport class OidcEntryDocumentStore extends AbstractDbxFirebaseDocumentStore<OidcEntry, OidcEntryDocument> {\n readonly oidcModelFunctions = inject(OidcModelFunctions);\n\n private readonly _latestClientSecret$ = completeOnDestroy(new BehaviorSubject<Maybe<string>>(undefined));\n\n /**\n * The client secret from the most recent create operation.\n *\n * Only available immediately after creation — the server does not return it again.\n */\n readonly latestClientSecret$ = this._latestClientSecret$.asObservable();\n\n get latestClientSecret(): Maybe<string> {\n return this._latestClientSecret$.value;\n }\n\n constructor() {\n super({ firestoreCollection: inject(OidcModelFirestoreCollections).oidcEntryCollection });\n }\n\n readonly createClient = firebaseDocumentStoreCreateFunction(this, this.oidcModelFunctions.oidcEntry.createOidcEntry.client, {\n onResult: (_params, result: CreateOidcClientResult) => {\n this._latestClientSecret$.next(result.client_secret);\n }\n });\n\n readonly updateClient = firebaseDocumentStoreUpdateFunction(this, this.oidcModelFunctions.oidcEntry.updateOidcEntry.client);\n\n readonly rotateClientSecret = firebaseDocumentStoreUpdateFunction(this, this.oidcModelFunctions.oidcEntry.updateOidcEntry.rotateClientSecret, {\n onResult: (_params, result: RotateOidcClientSecretResult) => {\n this._latestClientSecret$.next(result.client_secret);\n }\n });\n\n readonly deleteClient = firebaseDocumentStoreDeleteFunction(this, this.oidcModelFunctions.oidcEntry.deleteOidcEntry.client);\n}\n","import { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionButtonDirective } from '@dereekb/dbx-core';\nimport { DbxActionFormDirective } from '@dereekb/dbx-form';\nimport { DbxButtonComponent, DbxActionSnackbarErrorDirective } from '@dereekb/dbx-web';\nimport { DbxFirebaseOidcEntryClientFormComponent, type DbxFirebaseOidcEntryClientFormComponentConfig, type DbxFirebaseOidcModelClientFormValue } from '../component/oidcentry.client.form.component';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\nimport { type CreateOidcClientParams, type CreateOidcClientResult, type FirestoreModelKey } from '@dereekb/firebase';\nimport { type Configurable, type Maybe } from '@dereekb/util';\nimport { tap } from 'rxjs';\n\n/**\n * Container component for creating a new OAuth client.\n *\n * Wraps the client form in an action context with a submit button.\n * Emits {@link clientCreated} with the result after successful creation.\n */\n@Component({\n selector: 'dbx-firebase-oidc-entry-client-create',\n template: `\n <div dbxAction dbxActionEnforceModified [dbxActionHandler]=\"handleCreateClient\" dbxActionSnackbarError>\n <dbx-firebase-oidc-client-form dbxActionForm [config]=\"formConfig\"></dbx-firebase-oidc-client-form>\n <dbx-button [raised]=\"true\" dbxActionButton text=\"Create\"></dbx-button>\n </div>\n `,\n standalone: true,\n imports: [DbxActionSnackbarErrorDirective, DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionFormDirective, DbxButtonComponent, DbxActionButtonDirective, DbxFirebaseOidcEntryClientFormComponent],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryClientCreateComponent {\n readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n\n readonly formConfig: DbxFirebaseOidcEntryClientFormComponentConfig = { mode: 'create' };\n\n readonly createClientOwnerTarget = input<Maybe<FirestoreModelKey>>();\n readonly clientCreated = output<CreateOidcClientResult>();\n\n readonly handleCreateClient: WorkUsingContext<DbxFirebaseOidcModelClientFormValue> = (value, context) => {\n const params: Configurable<CreateOidcClientParams> = value;\n const target = this.createClientOwnerTarget();\n\n if (target) {\n params.key = target;\n }\n\n context.startWorkingWithLoadingStateObservable(\n this.oidcEntryDocumentStore.createClient(params).pipe(\n tap((state) => {\n if (state.value) {\n this.clientCreated.emit(state.value);\n }\n })\n )\n );\n };\n}\n","/**\n * Generates a random PKCE code verifier string (43 characters, base64url-encoded).\n *\n * @returns A cryptographically random base64url string suitable for use as a PKCE code_verifier.\n */\nexport function generatePkceCodeVerifier(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return base64UrlEncode(bytes);\n}\n\n/**\n * Generates a PKCE code challenge from a code verifier using SHA-256.\n *\n * @param verifier - The code verifier string to hash\n * @returns A base64url-encoded SHA-256 hash of the verifier\n */\nexport async function generatePkceCodeChallenge(verifier: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(verifier);\n const digest = await crypto.subtle.digest('SHA-256', data);\n return base64UrlEncode(new Uint8Array(digest));\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n const binString = Array.from(bytes, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binString).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n","import { ChangeDetectionStrategy, Component, inject, input, signal, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxContentPitDirective, DbxButtonComponent } from '@dereekb/dbx-web';\nimport { DbxFormSourceDirective, DbxFormValueChangeDirective } from '@dereekb/dbx-form';\nimport { type OidcEntryOAuthClientPayloadData, type OidcScopeDetails } from '@dereekb/firebase';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\nimport { DbxFirebaseOidcEntryClientTestFormComponent, type DbxFirebaseOidcModelClientTestFormValue } from '../component/oidcentry.client.test.form.component';\nimport { type OidcEntryClientTestFormFieldsConfig } from '../component/oidcentry.form';\nimport { generatePkceCodeVerifier, generatePkceCodeChallenge } from '../util/pkce';\nimport { DbxFirebaseOidcConfigService } from '../../../service/oidc.configuration.service';\n\n/**\n * Container component for testing an OAuth authorization flow against a registered client.\n *\n * Displays a form with the client's ID, redirect URIs, and scopes,\n * then builds an authorization URL with PKCE parameters that can be opened in a new tab.\n */\n@Component({\n selector: 'dbx-firebase-oidc-entry-client-test',\n template: `\n @if (formConfig()) {\n <dbx-firebase-oidc-client-test-form [dbxFormSource]=\"formTemplate$\" dbxFormSourceMode=\"always\" [config]=\"formConfig()\" (dbxFormValueChange)=\"onFormValueChange($event)\"></dbx-firebase-oidc-client-test-form>\n <dbx-content-pit class=\"dbx-block dbx-mb3\" [rounded]=\"true\">\n <dbx-detail-block class=\"dbx-pb4\" icon=\"link\" header=\"Authorization URL\">\n @if (authorizationUrlSignal()) {\n <dbx-click-to-copy-text [copyText]=\"authorizationUrlSignal()\">\n <div class=\"dbx-small-text\" style=\"word-break: break-all;\">{{ authorizationUrlSignal() }}</div>\n </dbx-click-to-copy-text>\n } @else {\n <div class=\"dbx-hint\">Fill in the form above to generate the URL.</div>\n }\n </dbx-detail-block>\n <dbx-detail-block icon=\"vpn_key\" header=\"Code Verifier (for token exchange)\">\n <dbx-click-to-copy-text [copyText]=\"codeVerifier()\">{{ codeVerifier() }}</dbx-click-to-copy-text>\n </dbx-detail-block>\n </dbx-content-pit>\n <div class=\"dbx-mb3\">\n <dbx-button class=\"dbx-button-spacer\" [raised]=\"true\" color=\"primary\" text=\"Start Authorization Flow\" icon=\"open_in_new\" [disabled]=\"!authorizationUrlSignal()\" (buttonClick)=\"openAuthorizationUrl()\"></dbx-button>\n <dbx-button class=\"dbx-ml2\" text=\"Regenerate PKCE\" icon=\"refresh\" (buttonClick)=\"regeneratePkce()\"></dbx-button>\n </div>\n }\n `,\n standalone: true,\n imports: [CommonModule, DbxFirebaseOidcEntryClientTestFormComponent, DbxFormSourceDirective, DbxFormValueChangeDirective, DbxContentPitDirective, DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryClientTestComponent {\n private readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n /** Scopes the user can pick from. Overrides the service default when provided. */\n readonly availableScopes = input<Maybe<OidcScopeDetails[]>>(undefined);\n\n /** Path to the authorization endpoint. Overrides the service default when provided. */\n readonly oidcAuthorizationEndpointApiPath = input<Maybe<string>>(undefined);\n\n readonly resolvedAvailableScopes = computed<OidcScopeDetails[]>(() => this.availableScopes() ?? this.oidcConfigService.availableScopes);\n readonly resolvedAuthorizationEndpointPath = computed<string>(() => this.oidcAuthorizationEndpointApiPath() ?? this.oidcConfigService.oidcAuthorizationEndpointApiPath);\n\n // MARK: Derived Store Data\n readonly redirectUrisSignal = toSignal(this.oidcEntryDocumentStore.data$.pipe(map((data) => (data.payload as OidcEntryOAuthClientPayloadData)?.redirect_uris ?? [])));\n\n readonly clientIdSignal = toSignal(this.oidcEntryDocumentStore.data$.pipe(map((data) => (data.payload as OidcEntryOAuthClientPayloadData)?.client_id)));\n\n // MARK: Form Config\n readonly formConfig = computed<OidcEntryClientTestFormFieldsConfig | undefined>(() => {\n const redirectUris = this.redirectUrisSignal();\n const availableScopes = this.resolvedAvailableScopes();\n\n if (redirectUris) {\n return { redirectUris, availableScopes };\n }\n\n return undefined;\n });\n\n readonly formTemplate$ = this.oidcEntryDocumentStore.data$.pipe(\n map((data) => {\n const payload = data.payload as OidcEntryOAuthClientPayloadData;\n const formValue: DbxFirebaseOidcModelClientTestFormValue = {\n client_id: payload?.client_id ?? '',\n redirect_uri: payload?.redirect_uris?.[0] ?? '',\n scopes: ['openid']\n };\n return formValue;\n })\n );\n\n // MARK: PKCE\n readonly codeVerifier = signal<string>(generatePkceCodeVerifier());\n readonly codeChallenge = signal<string>('');\n readonly state = signal<string>(generateRandomString());\n readonly nonce = signal<string>(generateRandomString());\n\n /** The current form value, updated by the form via dbxFormValueChange. */\n readonly formValue = signal<Maybe<DbxFirebaseOidcModelClientTestFormValue>>(undefined);\n\n readonly authorizationUrlSignal = computed(() => {\n const clientId = this.clientIdSignal();\n const codeChallenge = this.codeChallenge();\n const state = this.state();\n const nonce = this.nonce();\n const formValue = this.formValue();\n\n if (!clientId || !codeChallenge || !formValue?.redirect_uri) {\n return undefined;\n }\n\n const params = new URLSearchParams({\n response_type: 'code',\n client_id: clientId,\n redirect_uri: formValue.redirect_uri,\n scope: (formValue.scopes ?? ['openid']).join(' '),\n state,\n nonce,\n code_challenge: codeChallenge,\n code_challenge_method: 'S256'\n });\n\n return `${this.resolvedAuthorizationEndpointPath()}?${params.toString()}`;\n });\n\n constructor() {\n this._updateCodeChallenge();\n }\n\n onFormValueChange(value: Maybe<DbxFirebaseOidcModelClientTestFormValue>): void {\n this.formValue.set(value);\n }\n\n openAuthorizationUrl(): void {\n const url = this.authorizationUrlSignal();\n\n if (url) {\n window.open(url, '_blank');\n }\n }\n\n regeneratePkce(): void {\n this.codeVerifier.set(generatePkceCodeVerifier());\n this.state.set(generateRandomString());\n this.nonce.set(generateRandomString());\n this._updateCodeChallenge();\n }\n\n private _updateCodeChallenge(): void {\n generatePkceCodeChallenge(this.codeVerifier()).then((challenge) => {\n this.codeChallenge.set(challenge);\n });\n }\n}\n\nfunction generateRandomString(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionButtonDirective } from '@dereekb/dbx-core';\nimport { DbxActionFormDirective, DbxFormSourceDirective } from '@dereekb/dbx-form';\nimport { DbxButtonComponent, DbxActionSnackbarErrorDirective } from '@dereekb/dbx-web';\nimport { DbxFirebaseOidcEntryClientFormComponent, type DbxFirebaseOidcEntryClientFormComponentConfig, type DbxFirebaseOidcModelClientUpdateFormValue } from '../component/oidcentry.client.form.component';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\nimport { type UpdateOidcClientParams, type OidcEntryOAuthClientPayloadData } from '@dereekb/firebase';\nimport { type Configurable } from '@dereekb/util';\nimport { map } from 'rxjs';\n\n/**\n * Container component for updating an existing OAuth client.\n *\n * Wraps the client update form in an action context with a save button.\n */\n@Component({\n selector: 'dbx-firebase-oidc-entry-client-update',\n template: `\n <div dbxAction dbxActionEnforceModified [dbxActionHandler]=\"handleUpdateClient\" dbxActionSnackbarError>\n <dbx-firebase-oidc-client-form dbxActionForm [dbxFormSource]=\"formTemplate$\" [config]=\"formConfig\"></dbx-firebase-oidc-client-form>\n <dbx-button [raised]=\"true\" dbxActionButton text=\"Save\"></dbx-button>\n </div>\n `,\n standalone: true,\n imports: [DbxActionSnackbarErrorDirective, DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionFormDirective, DbxFormSourceDirective, DbxButtonComponent, DbxActionButtonDirective, DbxFirebaseOidcEntryClientFormComponent],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryClientUpdateComponent {\n readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n\n readonly formConfig: DbxFirebaseOidcEntryClientFormComponentConfig = { mode: 'update' };\n\n readonly formTemplate$ = this.oidcEntryDocumentStore.data$.pipe(\n map((data) => {\n const payload = data.payload as OidcEntryOAuthClientPayloadData;\n const formValue: DbxFirebaseOidcModelClientUpdateFormValue = {\n client_name: payload.client_name ?? '',\n redirect_uris: payload.redirect_uris ?? [],\n logo_uri: payload.logo_uri,\n client_uri: payload.client_uri\n };\n return formValue;\n })\n );\n\n readonly handleUpdateClient: WorkUsingContext<DbxFirebaseOidcModelClientUpdateFormValue> = (value, context) => {\n const params: Configurable<Omit<UpdateOidcClientParams, 'key'>> = value;\n context.startWorkingWithLoadingStateObservable(this.oidcEntryDocumentStore.updateClient(params));\n };\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DbxContentPitDirective, DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxButtonComponent, DbxActionConfirmDirective, type DbxActionConfirmConfig } from '@dereekb/dbx-web';\nimport { DbxActionDirective, DbxActionHandlerDirective, DbxActionButtonDirective } from '@dereekb/dbx-core';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\nimport { type OidcEntryOAuthClientPayloadData } from '@dereekb/firebase';\nimport { map } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\n\n/**\n * Displays the OIDC client ID and (when available) the one-time client secret.\n *\n * The client secret is only shown immediately after creation or after rotating.\n * When no secret is available, a \"Rotate Secret\" button is shown.\n */\n@Component({\n selector: 'dbx-firebase-oidc-entry-client-view',\n template: `\n <dbx-content-pit [rounded]=\"true\">\n <dbx-detail-block class=\"dbx-pb4\" icon=\"key\" header=\"Client ID\">\n <dbx-click-to-copy-text [copyText]=\"clientIdSignal()\">{{ clientIdSignal() }}</dbx-click-to-copy-text>\n </dbx-detail-block>\n <dbx-detail-block icon=\"lock\" header=\"Client Secret\">\n @if (latestClientSecretSignal()) {\n <dbx-click-to-copy-text class=\"dbx-block dbx-pb2\" [copyText]=\"latestClientSecretSignal()\">{{ latestClientSecretSignal() }}</dbx-click-to-copy-text>\n <dbx-click-to-copy-text [copyText]=\"latestClientSecretSignal()\" [showIcon]=\"false\"><div class=\"dbx-hint dbx-u\">This secret is only shown once. Copy it now.</div></dbx-click-to-copy-text>\n } @else {\n <div>\n <div class=\"dbx-hint dbx-pb3\">The client secret was shown once when created. You can invalidate the old one and get a new one.</div>\n <dbx-button dbxAction [dbxActionHandler]=\"handleRotateClientSecret\" [dbxActionConfirm]=\"rotateSecretConfirmConfig\" dbxActionButton text=\"Rotate Secret\" icon=\"refresh\" color=\"warn\" [raised]=\"true\"></dbx-button>\n </div>\n }\n </dbx-detail-block>\n </dbx-content-pit>\n `,\n standalone: true,\n imports: [CommonModule, DbxContentPitDirective, DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxButtonComponent, DbxActionDirective, DbxActionHandlerDirective, DbxActionButtonDirective, DbxActionConfirmDirective],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryClientViewComponent {\n readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n\n readonly clientIdSignal = toSignal(this.oidcEntryDocumentStore.data$.pipe(map((data) => (data.payload as OidcEntryOAuthClientPayloadData)?.client_id)));\n readonly latestClientSecretSignal = toSignal(this.oidcEntryDocumentStore.latestClientSecret$);\n\n readonly rotateSecretConfirmConfig: DbxActionConfirmConfig = {\n title: 'Rotate Client Secret',\n prompt: 'This will invalidate the current client secret. Any applications using it will stop working. Are you sure?',\n confirmText: 'Rotate Secret'\n };\n\n readonly handleRotateClientSecret: WorkUsingContext = (_, context) => {\n context.startWorkingWithLoadingStateObservable(this.oidcEntryDocumentStore.rotateClientSecret({}));\n };\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AbstractDbxFirebaseCollectionStore } from '@dereekb/dbx-firebase';\nimport { OidcModelFirestoreCollections, type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\n\n/** Collection store for querying {@link OidcEntry} documents. */\n@Injectable()\nexport class OidcEntryCollectionStore extends AbstractDbxFirebaseCollectionStore<OidcEntry, OidcEntryDocument> {\n constructor() {\n super({ firestoreCollection: inject(OidcModelFirestoreCollections).oidcEntryCollection });\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { OidcEntryCollectionStore } from './oidcentry.collection.store';\nimport { type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\nimport { DbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionStoreDirective } from '@dereekb/dbx-firebase';\n\n/** Directive providing a {@link OidcEntryCollectionStore} for querying {@link OidcEntry} documents. */\n@Directive({\n selector: '[dbxOidcEntryCollection]',\n providers: provideDbxFirebaseCollectionStoreDirective(OidcEntryCollectionStoreDirective, OidcEntryCollectionStore),\n standalone: true\n})\nexport class OidcEntryCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective<OidcEntry, OidcEntryDocument, OidcEntryCollectionStore> {\n constructor() {\n super(inject(OidcEntryCollectionStore));\n }\n}\n","import { inject, Directive } from '@angular/core';\nimport { DbxFirebaseDocumentStoreDirective, provideDbxFirebaseDocumentStoreDirective } from '@dereekb/dbx-firebase';\nimport { OidcEntryDocumentStore } from './oidcentry.document.store';\nimport { type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\n\n/** Directive providing a {@link OidcEntryDocumentStore} for accessing a single {@link OidcEntry} document. */\n@Directive({\n selector: '[dbxOidcEntryDocument]',\n providers: provideDbxFirebaseDocumentStoreDirective(OidcEntryDocumentStoreDirective, OidcEntryDocumentStore),\n standalone: true\n})\nexport class OidcEntryDocumentStoreDirective extends DbxFirebaseDocumentStoreDirective<OidcEntry, OidcEntryDocument, OidcEntryDocumentStore> {\n constructor() {\n super(inject(OidcEntryDocumentStore));\n }\n}\n","import { type EnvironmentProviders, makeEnvironmentProviders, provideAppInitializer, type Provider, inject } from '@angular/core';\nimport { DbxAppAuthRouterService } from '@dereekb/dbx-core';\nimport { OidcModelFirestoreCollections } from '@dereekb/firebase';\nimport { DbxFirebaseOidcConfig, DbxFirebaseOidcConfigService } from './service/oidc.configuration.service';\n\n/**\n * Provider factory for the {@link OidcModelFirestoreCollections}.\n */\nexport function provideOidcModelFirestoreCollections(appCollection: OidcModelFirestoreCollections): OidcModelFirestoreCollections {\n if (!appCollection.oidcEntryCollection) {\n throw new Error(`OidcModelFirestoreCollections could not be provided using the app's app collection. Set provideOidcModelFirestoreCollections to false in ProvideDbxFirebaseOidcConfig to prevent auto-initialization, or update your app's collection class to implement OidcModelFirestoreCollections.`);\n }\n\n return appCollection;\n}\n\n/**\n * Configuration for {@link provideDbxFirebaseOidc}.\n */\nexport interface ProvideDbxFirebaseOidcConfig {\n /**\n * The app collection class that implements {@link OidcModelFirestoreCollections}.\n *\n * Used to resolve the {@link OidcModelFirestoreCollections} provider.\n */\n readonly appCollectionClass: abstract new (...args: any[]) => any;\n /**\n * Whether or not to provide the {@link OidcModelFirestoreCollections}.\n *\n * True by default.\n */\n readonly provideOidcModelFirestoreCollections?: boolean;\n /**\n * App-level OIDC configuration (scopes, endpoint paths).\n *\n * Provided as {@link DbxFirebaseOidcConfig} and consumed by {@link DbxFirebaseOidcConfigService}.\n */\n readonly oidcConfig: DbxFirebaseOidcConfig;\n}\n\n/**\n * Provides the OIDC-related Angular services and collections for `@dereekb/dbx-firebase/oidc`.\n *\n * When `oauthInteractionRoute` is configured in {@link DbxFirebaseOidcConfig}, an app initializer\n * is registered that adds that route to the {@link DbxAppAuthRouterService} ignored routes set,\n * preventing auth effects from redirecting away during the OIDC interaction flow.\n */\nexport function provideDbxFirebaseOidc(config: ProvideDbxFirebaseOidcConfig): EnvironmentProviders {\n const providers: (Provider | EnvironmentProviders)[] = [{ provide: DbxFirebaseOidcConfig, useValue: config.oidcConfig }, DbxFirebaseOidcConfigService];\n\n if (config.provideOidcModelFirestoreCollections !== false) {\n providers.push({\n provide: OidcModelFirestoreCollections,\n useFactory: provideOidcModelFirestoreCollections,\n deps: [config.appCollectionClass]\n });\n }\n\n // Register the OAuth interaction route as ignored by auth effects\n if (config.oidcConfig.oauthInteractionRoute) {\n const routeRef = config.oidcConfig.oauthInteractionRoute;\n providers.push(\n provideAppInitializer(() => {\n const authRouterService = inject(DbxAppAuthRouterService);\n authRouterService.addIgnoredRoute(routeRef);\n })\n );\n }\n\n return makeEnvironmentProviders(providers);\n}\n","// @dereekb/dbx-firebase/oidc\nexport * from './interaction';\nexport * from './modules/oidcmodel';\nexport * from './oidc.providers';\nexport * from './service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|