@dereekb/dbx-firebase 13.11.14 → 13.11.15

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 +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/interaction/components/oauth.consent.scope.forms.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.form.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.forge.form.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.client.forge.form.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.client.test.forge.form.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.grant.list.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.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/container/oidcentry.grant.list.container.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.create.component.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.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 *\n * - `'unknown'` — Firebase auth state has not yet resolved. Render nothing/spinner to avoid flashing.\n * - `'no_user'` — Auth resolved and there is no signed-in user. Project the login UI via ng-content.\n * - `'user'` — Auth resolved and a user is signed in.\n * - `'submitting'` — Submitting the ID token to the OIDC interaction endpoint.\n * - `'error'` — Submission failed; allow retry.\n */\nexport type OidcLoginStateCase = 'unknown' | '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 ('unknown') {\n <dbx-basic-loading [loading]=\"true\"></dbx-basic-loading>\n }\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, type Signal } from '@angular/core';\nimport { DbxActionButtonDirective, DbxActionDirective, DbxActionHandlerDirective, DbxActionValueDirective, DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAvatarComponent, DbxBasicLoadingComponent, DbxButtonComponent, DbxButtonSpacerDirective, DbxActionSnackbarErrorDirective } from '@dereekb/dbx-web';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { type Maybe, SPACE_STRING_SPLIT_JOIN } from '@dereekb/util';\nimport { type OAuthInteractionConsentResponse, type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type DbxFirebaseOAuthConsentScopesViewData } from './oauth.consent.scope.view.component';\nimport { type OAuthConsentScopesFormValue } from './oauth.consent.scope.forms';\n\n/**\n * Default required scopes — `openid` is mandatory for any OIDC flow, so the\n * UI always treats it as not-deselectable.\n */\nconst DEFAULT_OAUTH_CONSENT_REQUIRED_SCOPES: readonly OidcScope[] = ['openid'];\n\n/**\n * State cases for the OIDC consent interaction flow.\n *\n * - `'unknown'` — Firebase auth state has not yet resolved. Render a spinner\n * to avoid flashing between states.\n * - `'no_user'` — Auth resolved and there is no signed-in user. Project the\n * login UI via ng-content.\n * - `'user'` — Auth resolved and a user is signed in. Render the consent\n * form. Submission progress and errors are managed by the inner\n * `dbxAction` contexts and surfaced via `dbxActionSnackbarError`.\n */\nexport type OidcConsentStateCase = 'unknown' | 'no_user' | 'user';\n\n/**\n * Presentational component for the OIDC OAuth consent screen.\n *\n * Wires up two `dbxAction` contexts — an outer one for Approve (which hosts\n * the scope-selection forge form via `dbxActionForm`) and a nested one for\n * Deny (which carries no value). Buttons are bound by Angular DI's\n * nearest-ancestor lookup: the Approve button picks up the outer action, the\n * Deny button (wrapped in its own `<ng-container dbxAction>`) picks up the\n * inner.\n *\n * Supports ng-content projection — anything provided is rendered for the\n * `'no_user'` state (so apps can project a login view, mirroring\n * `DbxFirebaseOAuthLoginViewComponent`).\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-view\n * [details]=\"loginDetails\"\n * [consentStateCase]=\"'user'\"\n * [scopeInjectionConfig]=\"scopeConfig\"\n * [approveHandler]=\"handleApprove\"\n * [denyHandler]=\"handleDeny\">\n * </dbx-firebase-oauth-consent-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-view',\n standalone: true,\n imports: [DbxInjectionComponent, DbxAvatarComponent, DbxBasicLoadingComponent, DbxButtonComponent, DbxButtonSpacerDirective, DbxActionDirective, DbxActionHandlerDirective, DbxActionValueDirective, DbxActionButtonDirective, DbxActionSnackbarErrorDirective],\n styleUrls: ['./oauth.consent.view.component.scss'],\n template: `\n <div class=\"dbx-firebase-oauth-consent-view\">\n @switch (consentStateCase()) {\n @case ('unknown') {\n <dbx-basic-loading [loading]=\"true\"></dbx-basic-loading>\n }\n @case ('no_user') {\n <ng-content></ng-content>\n }\n @case ('user') {\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 @if (clientName()) {\n <p class=\"dbx-firebase-oauth-consent-prompt\">\n <strong>{{ clientName() }}</strong>\n is requesting these permissions:\n </p>\n }\n\n <div dbxAction dbxActionSnackbarError [dbxActionHandler]=\"approveHandler()\">\n <dbx-injection [config]=\"resolvedScopeInjectionConfig()\"></dbx-injection>\n\n <div class=\"dbx-pt3 dbx-pb3 dbx-firebase-oauth-consent-actions\">\n <dbx-button dbxActionButton text=\"Approve\" [raised]=\"true\" color=\"primary\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <ng-container dbxAction dbxActionSnackbarError dbxActionValue [dbxActionHandler]=\"denyHandler()\">\n <dbx-button dbxActionButton text=\"Deny\" [flat]=\"true\" color=\"warn\"></dbx-button>\n </ng-container>\n </div>\n </div>\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 consentStateCase = input.required<OidcConsentStateCase>();\n readonly scopeInjectionConfig = input.required<DbxInjectionComponentConfig>();\n /**\n * Scopes that cannot be deselected by the user. Forwarded to the scope\n * view so it can render an \"Always granted\" hint. Defaults to `['openid']`.\n */\n readonly requiredScopes = input<readonly OidcScope[]>(DEFAULT_OAUTH_CONSENT_REQUIRED_SCOPES);\n\n /**\n * Approve handler — called with the form value when the Approve button\n * triggers the outer action. Receives a `WorkUsingContext` to drive the\n * action's loading/success/error pipeline.\n */\n readonly approveHandler = input.required<WorkUsingContext<OAuthConsentScopesFormValue, OAuthInteractionConsentResponse>>();\n\n /**\n * Deny handler — called when the Deny button triggers the inner action.\n * No value is passed (`dbxActionValue` provides an empty payload).\n */\n readonly denyHandler = input.required<WorkUsingContext<void, OAuthInteractionConsentResponse>>();\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: Signal<OidcScope[]> = computed(() => SPACE_STRING_SPLIT_JOIN.splitStrings(this.details()?.scopes ?? ''));\n\n readonly resolvedScopeInjectionConfig = computed<DbxInjectionComponentConfig>(() => {\n const data: DbxFirebaseOAuthConsentScopesViewData = {\n details: this.details(),\n scopes: this.scopes(),\n clientName: this.clientName(),\n requiredScopes: this.requiredScopes()\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\n * `DBX_INJECTION_COMPONENT_DATA` token.\n *\n * Carries the requested scopes plus surrounding interaction context. The\n * form value (current granted scopes) is no longer carried here — the\n * scope view's form is wired up via `dbxActionForm` to the parent's\n * `dbxAction`, so the value pipeline runs through the action store at\n * trigger time.\n */\nexport interface DbxFirebaseOAuthConsentScopesViewData {\n readonly details?: Maybe<OAuthInteractionLoginDetails>;\n readonly scopes: OidcScope[];\n readonly clientName: string;\n /**\n * Scopes that must always be granted. Surfaced separately so the scope\n * view can render them as a static \"Always granted\" hint instead of\n * making them user-selectable.\n */\n readonly requiredScopes?: readonly OidcScope[];\n}\n\n/**\n * Abstract base class for consent scope view components.\n *\n * Provides typed access to the `DbxFirebaseOAuthConsentScopesViewData`\n * injected via `DBX_INJECTION_COMPONENT_DATA`. Subclasses define the\n * template that renders the requested scopes and (optionally) hosts a\n * forge form decorated with `dbxActionForm`.\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 readonly requiredScopes = computed<readonly OidcScope[]>(() => this.data?.requiredScopes ?? []);\n\n isScopeRequired(scope: OidcScope): boolean {\n return this.requiredScopes().includes(scope);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { of } from 'rxjs';\nimport { AbstractDbxSelectionListViewDirective, AbstractDbxSelectionListWrapperDirective, AbstractDbxValueListViewItemComponent, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DbxListWrapperComponentImportsModule, DbxSelectionValueListViewComponentImportsModule, type DbxSelectionValueListViewConfig, provideDbxListView } from '@dereekb/dbx-web';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\n\n/**\n * Selection-list wrapper used as the `listComponentClass` for the OIDC\n * consent scope `dbxForgeListSelectionField`.\n *\n * Reuses the workspace's `dbx-list` selection infrastructure so the existing\n * scope-row visual treatment (name + description) remains intact while the\n * selection state participates in the surrounding `dbxAction`/`dbxActionForm`\n * pipeline.\n *\n * @example\n * ```ts\n * dbxForgeListSelectionField<OAuthConsentScope, DbxFirebaseOAuthConsentScopeListComponent, OidcScope>({\n * key: 'grantedOIDCScopes',\n * props: {\n * listComponentClass: of(DbxFirebaseOAuthConsentScopeListComponent),\n * readKey: (scope) => scope.name,\n * state$: of(successResult(optionalScopes)),\n * wrapped: false,\n * maxHeight: 'none'\n * }\n * });\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-card-items-list'\n },\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOAuthConsentScopeListComponent extends AbstractDbxSelectionListWrapperDirective<OAuthConsentScope> {\n constructor() {\n super({ componentClass: DbxFirebaseOAuthConsentScopeListViewComponent, defaultSelectionMode: 'select' });\n }\n}\n\n/**\n * Selection list view that pairs with `DbxFirebaseOAuthConsentScopeListComponent`.\n * Maps each `OAuthConsentScope` to a `DbxValueListItem` keyed by the scope name\n * and renders it through `DbxFirebaseOAuthConsentScopeListItemComponent`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DbxFirebaseOAuthConsentScopeListViewComponent),\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOAuthConsentScopeListViewComponent extends AbstractDbxSelectionListViewDirective<OAuthConsentScope> {\n readonly config: DbxSelectionValueListViewConfig<OAuthConsentScope> = {\n componentClass: DbxFirebaseOAuthConsentScopeListItemComponent,\n mapValuesToItemValues: (values) => of(values.map((scope) => ({ ...scope, key: scope.name, itemValue: scope })))\n };\n}\n\n/**\n * Item row inside the OIDC consent scope selection list. Shown as the visual\n * row for both selected and unselected scopes — the selection chrome (the\n * leading checkbox/highlight) is provided by the wrapping\n * `dbx-selection-list-view`.\n */\n@Component({\n template: `\n <div class=\"dbx-list-item-padded dbx-list-item-padded-thick dbx-list-two-line-item\">\n <div class=\"item-left\">\n <div class=\"mat-subtitle-2\">{{ name }}</div>\n @if (description) {\n <div class=\"item-details\">{{ description }}</div>\n }\n </div>\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeListItemComponent extends AbstractDbxValueListViewItemComponent<OAuthConsentScope> {\n get name() {\n return this.itemValue.name;\n }\n\n get description() {\n return this.itemValue.description;\n }\n}\n","import { dbxForgeListSelectionField } from '@dereekb/dbx-form';\nimport { type FormConfig, type ValidatorConfig } from '@ng-forge/dynamic-forms';\nimport { type OidcScope } from '@dereekb/firebase';\nimport { successResult } from '@dereekb/rxjs';\nimport { of } from 'rxjs';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\nimport { DbxFirebaseOAuthConsentScopeListComponent } from './oauth.consent.scope.list.component';\n\n/**\n * Validator key emitted when the user has not selected any optional scope.\n * Surfaces alongside the form's invalid state so the action button stays disabled.\n */\nexport const OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_KIND = 'mustSelectAtLeastOneScope';\n\n/**\n * Default message shown when the user has cleared every optional scope.\n */\nexport const OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_DEFAULT_MESSAGE = 'Select at least one scope to grant.';\n\n/**\n * Form value emitted by the consent scopes form.\n *\n * Uses the same key as the `OAuthInteractionConsentRequest.grantedOIDCScopes`\n * payload field so the consent action handler can pass the form value through\n * directly.\n */\nexport interface OAuthConsentScopesFormValue {\n readonly grantedOIDCScopes: OidcScope[];\n}\n\n/**\n * Configuration for the consent scopes form.\n *\n * Required scopes are filtered out by the caller before being passed in —\n * required scopes are surfaced separately as a static \"Always granted\" line\n * because they are not user-selectable.\n */\nexport interface OAuthConsentScopesFormFieldsConfig {\n /**\n * Optional scopes the user can choose to grant.\n */\n readonly optionalScopes: readonly OAuthConsentScope[];\n /**\n * Initial selection set. Defaults to every optional scope being selected.\n */\n readonly initiallySelected?: readonly OidcScope[];\n}\n\n/**\n * Builds a complete `FormConfig` ready to feed into a forge form component.\n *\n * The resulting form has a single `grantedOIDCScopes` field — a\n * `dbxForgeListSelectionField` rendered through\n * `DbxFirebaseOAuthConsentScopeListComponent` (a `dbx-list` selection wrapper).\n * The list renders bare (no Material form-field wrapper) and without the\n * default 300px height cap so it grows to fit the scope list.\n *\n * @param config - The consent scopes form fields configuration.\n * @returns A `FormConfig` whose single field selects an `OidcScope[]` of granted scopes.\n */\nexport function oauthConsentScopesFormConfig(config: OAuthConsentScopesFormFieldsConfig): FormConfig {\n const { optionalScopes, initiallySelected } = config;\n const value: OidcScope[] = (initiallySelected ?? optionalScopes.map((scope) => scope.name)).slice();\n const optionalScopesArray = optionalScopes.slice();\n const validators: ValidatorConfig[] = [\n {\n type: 'custom',\n expression: 'fieldValue && fieldValue.length > 0',\n kind: OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_KIND\n }\n ];\n\n return {\n fields: [\n dbxForgeListSelectionField<OAuthConsentScope, DbxFirebaseOAuthConsentScopeListComponent, OidcScope>({\n key: 'grantedOIDCScopes',\n value,\n validators,\n validationMessages: {\n [OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_KIND]: OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_DEFAULT_MESSAGE\n },\n props: {\n listComponentClass: of(DbxFirebaseOAuthConsentScopeListComponent),\n readKey: (scope) => scope.name,\n state$: of(successResult(optionalScopesArray)),\n wrapped: false,\n maxHeight: 'none'\n }\n })\n ]\n };\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractConfigAsyncForgeFormDirective, DBX_FORGE_FORM_COMPONENT_TEMPLATE, dbxForgeFormComponentProviders, DbxForgeFormComponentImportsModule } from '@dereekb/dbx-form';\nimport { type FormConfig } from '@ng-forge/dynamic-forms';\nimport { type Maybe } from '@dereekb/util';\nimport { map, type Observable } from 'rxjs';\nimport { type OAuthConsentScopesFormFieldsConfig, type OAuthConsentScopesFormValue, oauthConsentScopesFormConfig } from './oauth.consent.scope.forms';\n\n/**\n * Reusable forge form component that renders one checkbox per OIDC scope\n * defined in {@link OAuthConsentScopesFormFieldsConfig}. Required scopes are\n * rendered as checked-and-disabled.\n *\n * Pair with `<dbx-firebase-oauth-consent-scope-default-view>` for the default\n * consent flow, or embed directly in custom consent UIs that supply their\n * own scope/required configuration.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-form',\n template: DBX_FORGE_FORM_COMPONENT_TEMPLATE,\n providers: dbxForgeFormComponentProviders(),\n imports: [DbxForgeFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOAuthConsentScopeFormComponent extends AbstractConfigAsyncForgeFormDirective<OAuthConsentScopesFormValue, OAuthConsentScopesFormFieldsConfig> {\n readonly formConfig$: Observable<Maybe<FormConfig>> = this.currentConfig$.pipe(map((config) => (config ? oauthConsentScopesFormConfig(config) : undefined)));\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 /**\n * Available scopes for the OIDC provider. Used in scope picker fields.\n */\n abstract readonly availableScopes: OidcScopeDetails[];\n /**\n * Optional API origin (scheme + host, e.g. `https://api.example.com`) prepended to the OIDC\n * authorization and interaction endpoint paths when set.\n *\n * Use this when the OIDC provider is hosted on a different origin than the frontend so that\n * the authorization redirect and interaction POSTs target the issuer host directly (e.g. to\n * avoid an intermediate hosting layer that strips cookies). Should not include a trailing\n * slash and should not include the `/api` path segment — OIDC endpoints live at the root.\n *\n * Leave unset for single-origin deployments; the endpoint paths stay relative.\n */\n readonly oidcApiOrigin?: Maybe<string>;\n /**\n * Path to the authorization endpoint. Defaults to '/oidc/auth'.\n */\n readonly oidcAuthorizationEndpointApiPath?: Maybe<string>;\n /**\n * Base path for interaction endpoints. Defaults to '/interaction'.\n */\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 const origin = this.config.oidcApiOrigin ?? '';\n return `${origin}${this.config.oidcAuthorizationEndpointApiPath ?? DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH}`;\n }\n\n get oidcInteractionEndpointApiPath(): string {\n const origin = this.config.oidcApiOrigin ?? '';\n return `${origin}${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 { DBX_INJECTION_COMPONENT_DATA } from '@dereekb/dbx-core';\nimport { DbxActionFormDirective } from '@dereekb/dbx-form';\nimport { type OidcScope } from '@dereekb/firebase';\nimport { separateValues } from '@dereekb/util';\nimport { DbxFirebaseOidcConfigService } from '../../service/oidc.configuration.service';\nimport { type DbxFirebaseOAuthConsentScopesViewData } from './oauth.consent.scope.view.component';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\nimport { type OAuthConsentScopesFormFieldsConfig } from './oauth.consent.scope.forms';\nimport { DbxFirebaseOAuthConsentScopeFormComponent } from './oauth.consent.scope.form.component';\n\n/**\n * Default consent scope view component.\n *\n * Reads the requested scopes (and required scopes) from the\n * `DBX_INJECTION_COMPONENT_DATA` provided by the parent consent view,\n * resolves human-readable descriptions from the app-level\n * `DbxFirebaseOidcConfigService`, then renders a\n * `DbxFirebaseOAuthConsentScopeFormComponent` with `dbxActionForm` so the\n * form's value participates in the surrounding `dbxAction` (the consent\n * view's outer Approve action).\n *\n * Required scopes are not user-selectable. They are surfaced as an \"Always\n * granted\" hint above the form because the server enforces them regardless\n * of payload — including them in the selection list would just add noise.\n *\n * Apps can override this default via\n * `DbxFirebaseOidcConfig.consentScopeListViewClass` or\n * `DbxOAuthConsentComponentConfig.consentScopeListViewClass`. Custom views\n * should similarly apply `dbxActionForm` to a forge form whose value matches\n * `OAuthConsentScopesFormValue`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-default-view',\n template: `\n @if (alwaysGrantedLabel(); as label) {\n <p class=\"dbx-firebase-oauth-consent-always-granted dbx-hint\">Always granted: {{ label }}</p>\n }\n <dbx-firebase-oauth-consent-scope-form dbxActionForm [config]=\"formFieldsConfig()\"></dbx-firebase-oauth-consent-scope-form>\n `,\n imports: [DbxFirebaseOAuthConsentScopeFormComponent, DbxActionFormDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOAuthConsentScopeDefaultViewComponent {\n private readonly _oidcConfigService = inject(DbxFirebaseOidcConfigService);\n private readonly _data = inject<DbxFirebaseOAuthConsentScopesViewData>(DBX_INJECTION_COMPONENT_DATA);\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._data.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 readonly optionalScopes = computed<OAuthConsentScope[]>(() => {\n const requiredSet = new Set<OidcScope>(this._data.requiredScopes ?? []);\n return this.mappedScopes().filter((scope) => !requiredSet.has(scope.name));\n });\n\n readonly alwaysGrantedLabel = computed<string | null>(() => {\n const required = this._data.requiredScopes ?? [];\n return required.length > 0 ? required.join(', ') : null;\n });\n\n readonly formFieldsConfig = computed<OAuthConsentScopesFormFieldsConfig>(() => ({\n optionalScopes: this.optionalScopes()\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 * @returns The base URL string for the OIDC interaction endpoint.\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 * @param uid - The OIDC interaction UID identifying the current login interaction.\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. When `approved`\n * is true, optional `grants` may be passed to grant only a subset of the\n * requested scopes/claims/resource scopes; the server validates that any\n * subset is contained in the corresponding `missing*` set on the prompt.\n *\n * When `approved` is false, `grants` is ignored (not sent).\n *\n * @param uid - The OIDC interaction UID identifying the current consent interaction.\n * @param approved - Whether the user approved or denied the consent request.\n * @param grants - Optional subset of OIDC scopes / OIDC claims / resource scopes to grant.\n * @returns Observable that emits the redirect URL from the server response.\n */\n submitConsent(uid: OidcInteractionUid, approved: boolean, grants?: Pick<OAuthInteractionConsentRequest, 'grantedOIDCScopes' | 'grantedOIDCClaims' | 'grantedResourceScopes'>): Observable<OAuthInteractionConsentResponse> {\n return this._authService.idTokenString$.pipe(\n first(),\n switchMap((idToken) => {\n const body: OAuthInteractionConsentRequest = approved && grants ? { idToken, approved, ...grants } : { idToken, approved };\n return this.http.post<OAuthInteractionConsentResponse>(`${this.baseUrl}/${uid}/consent`, body);\n })\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: Signal<Maybe<boolean>> = toSignal(this.dbxFirebaseAuthService.isLoggedIn$);\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 const isLoggedIn = this.isLoggedIn();\n\n if (isLoggedIn === undefined) {\n return 'unknown';\n }\n\n if (!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 if (response.redirectTo) {\n // Leave `submitting` true so the auto-submit effect cannot re-enter\n // and fire another `submitLogin` POST while the browser navigates.\n window.location.href = response.redirectTo;\n } else {\n this.submitting.set(false);\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, computed, inject, input, type OnDestroy, type Signal, type Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { tap } from 'rxjs';\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 OAuthInteractionConsentResponse, type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxFirebaseOAuthConsentViewComponent, type OidcConsentStateCase } 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';\nimport { type OAuthConsentScopesFormValue } from '../components/oauth.consent.scope.forms';\n\n/**\n * OIDC scopes that cannot be deselected on the consent screen. `openid` is\n * mandatory for any OIDC flow, so the UI shows it as always-granted and the\n * server enforces it regardless of payload.\n */\nconst OAUTH_CONSENT_REQUIRED_SCOPES: readonly OidcScope[] = ['openid'];\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 * Reads interaction UID and client details from route params (populated by\n * the server redirect), assembles them into `OAuthInteractionLoginDetails`,\n * and exposes Approve / Deny handlers that drive the view's nested\n * `dbxAction` contexts.\n *\n * Submission progress and error states are owned by the action stores; this\n * container is just routing-glue + handler factories.\n *\n * Supports ng-content projection — any content provided is passed through to\n * the view component for the `'no_user'` state (e.g. an app's login view).\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()\" [consentStateCase]=\"consentStateCase()\" [scopeInjectionConfig]=\"scopeInjectionConfig()\" [requiredScopes]=\"requiredScopes\" [approveHandler]=\"handleApprove\" [denyHandler]=\"handleDeny\">\n <ng-content />\n </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 dbxFirebaseAuthService = inject(DbxFirebaseAuthService);\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 // Auth state — undefined until Firebase resolves to avoid a flash between 'unknown' → 'no_user'/'user'\n readonly isLoggedIn: Signal<Maybe<boolean>> = toSignal(this.dbxFirebaseAuthService.isLoggedIn$);\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 /**\n * Scopes the user cannot deselect. Forwarded to the view, which shows\n * them as a static \"Always granted\" hint above the selection list.\n */\n readonly requiredScopes: readonly OidcScope[] = OAUTH_CONSENT_REQUIRED_SCOPES;\n\n readonly consentStateCase = computed<OidcConsentStateCase>(() => {\n const isLoggedIn = this.isLoggedIn();\n\n if (isLoggedIn === undefined) {\n return 'unknown';\n }\n\n if (!isLoggedIn) {\n return 'no_user';\n }\n\n return 'user';\n });\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 /**\n * Handles the Approve action. Pulls the form's selected scope array\n * straight off the form value (it already matches the API field name\n * `grantedOIDCScopes`) and forwards it through `submitConsent`. On a\n * successful response, hard-navigates to the OIDC server's redirect URL.\n */\n readonly handleApprove: WorkUsingContext<OAuthConsentScopesFormValue, OAuthInteractionConsentResponse> = (formValue, context) => {\n const uid = this.resolvedInteractionUid();\n\n if (!uid) {\n context.reject(new Error('Missing interaction UID'));\n return;\n }\n\n const grantedOIDCScopes = formValue.grantedOIDCScopes;\n\n context.startWorkingWithObservable(\n this.interactionService.submitConsent(uid, true, { grantedOIDCScopes }).pipe(\n tap((response) => {\n if (response.redirectTo) {\n globalThis.location.href = response.redirectTo;\n }\n })\n )\n );\n };\n\n /**\n * Handles the Deny action. No payload is sent — the server returns\n * `access_denied` to the OAuth client.\n */\n readonly handleDeny: WorkUsingContext<void, OAuthInteractionConsentResponse> = (_value, context) => {\n const uid = this.resolvedInteractionUid();\n\n if (!uid) {\n context.reject(new Error('Missing interaction UID'));\n return;\n }\n\n context.startWorkingWithObservable(\n this.interactionService.submitConsent(uid, false).pipe(\n tap((response) => {\n if (response.redirectTo) {\n globalThis.location.href = response.redirectTo;\n }\n })\n )\n );\n };\n}\n","import { dbxForgeTextField, dbxForgeValueSelectionField, dbxForgeSearchableStringChipField, dbxForgePickableChipField, dbxForgeContainer, pickableValueFieldValuesConfigForStaticLabeledValues, isWebsiteUrlValidator } 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 { ContainerField, FormConfig, RegisteredFieldTypes } from '@ng-forge/dynamic-forms';\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 forge fields for the OAuth client create form.\n *\n * Includes `token_endpoint_auth_method` which is immutable after creation.\n *\n * @param config - Optional configuration for field generation, including mode and allowed auth methods.\n * @returns A FormConfig for the client creation form.\n */\nexport function oidcEntryClientForgeFormFields(config?: OidcEntryClientFormFieldsConfig): FormConfig {\n const fields = [];\n\n if (config?.mode === 'create') {\n fields.push(oidcClientTokenEndpointAuthMethodForgeField(config));\n }\n\n fields.push(...oidcEntryClientUpdateForgeFormFields());\n\n return { fields };\n}\n\n/**\n * Creates a forge value selection field for choosing the token endpoint authentication method.\n *\n * @param config - Optional configuration to filter the available auth method options.\n * @returns A forge value selection field for the token endpoint auth method selector.\n */\nexport function oidcClientTokenEndpointAuthMethodForgeField(config?: OidcEntryClientFormFieldsConfig) {\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 dbxForgeValueSelectionField({\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 props: { options }\n });\n}\n\n/**\n * Creates forge fields for updating an existing OAuth client.\n *\n * Excludes `token_endpoint_auth_method` (immutable after creation).\n *\n * @returns Array of forge field definitions for the client update form.\n */\nexport function oidcEntryClientUpdateForgeFormFields(): RegisteredFieldTypes[] {\n return [oidcClientNameForgeField(), oidcClientRedirectUrisForgeField(), oidcClientJwksUriForgeField(), oidcClientLogoUriForgeField(), oidcClientHomepageUriForgeField()];\n}\n\n/**\n * Creates a forge text field for the OAuth client display name.\n *\n * @returns A forge text field for the client name.\n */\nexport function oidcClientNameForgeField() {\n return dbxForgeTextField({\n key: 'client_name',\n label: 'Client Name',\n hint: 'A human-readable name for this OAuth client.',\n required: true,\n maxLength: 200\n });\n}\n\n/**\n * Creates a forge searchable chip field for entering redirect URIs.\n *\n * @returns A forge searchable chip field for redirect URIs.\n */\nexport function oidcClientRedirectUrisForgeField() {\n return dbxForgeSearchableStringChipField({\n key: 'redirect_uris',\n label: 'Redirect URIs',\n hint: 'Type a redirect URI (e.g. https://example.com/callback) and press enter to add it.',\n required: true,\n props: {\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}\n\n/**\n * Creates a forge container wrapping the JWKS URI field, conditionally hidden\n * when the token endpoint auth method is not `private_key_jwt`. A container\n * (not a group) is used so the `jwks_uri` field stays at the root level of\n * the form value rather than being nested under an extra object.\n *\n * @returns A forge container field with conditional visibility logic.\n */\nexport function oidcClientJwksUriForgeField(): ContainerField {\n return dbxForgeContainer({\n key: 'jwks_uri_container',\n fields: [\n dbxForgeTextField({\n key: 'jwks_uri',\n label: 'JWKS URI',\n hint: \"URL where the client's public JSON Web Key Set can be fetched. Required for private_key_jwt authentication.\",\n logic: [\n {\n type: 'required',\n condition: {\n type: 'fieldValue',\n fieldPath: 'token_endpoint_auth_method',\n operator: 'equals',\n value: PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD\n }\n }\n ]\n })\n ],\n logic: [\n {\n type: 'hidden',\n condition: {\n type: 'fieldValue',\n fieldPath: 'token_endpoint_auth_method',\n operator: 'notEquals',\n value: PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD\n }\n }\n ]\n });\n}\n\n/**\n * Creates a forge text field for the optional client logo URL.\n *\n * @returns A forge text field for the logo URI.\n */\nexport function oidcClientLogoUriForgeField() {\n return dbxForgeTextField({\n key: 'logo_uri',\n label: 'Logo URI',\n hint: 'URL of the client logo image (optional).',\n required: false\n });\n}\n\n/**\n * Creates a forge text field for the optional client homepage URL.\n *\n * @returns A forge text field for the homepage URL.\n */\nexport function oidcClientHomepageUriForgeField() {\n return dbxForgeTextField({\n key: 'client_uri',\n label: 'Homepage URL',\n hint: '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 forge form fields for the OAuth test client form.\n *\n * @param config - Configuration providing available redirect URIs and scopes for the test form.\n * @returns A FormConfig for the test client form.\n */\nexport function oidcEntryClientTestForgeFormFields(config: OidcEntryClientTestFormFieldsConfig): FormConfig {\n return { fields: [oidcClientTestClientIdForgeField(), oidcClientTestRedirectUriForgeField(config.redirectUris), oidcClientTestScopesForgeField(config.availableScopes)] };\n}\n\n/**\n * Creates a read-only forge text field displaying the OAuth client ID.\n *\n * @returns A read-only forge text field for the client ID.\n */\nexport function oidcClientTestClientIdForgeField() {\n return dbxForgeTextField({\n key: 'client_id',\n label: 'Client ID',\n readonly: true\n });\n}\n\n/**\n * Creates a forge selection field for choosing one of the client's registered redirect URIs for testing.\n *\n * @param redirectUris - The registered redirect URIs to display as options.\n * @returns A forge selection field for the redirect URI.\n */\nexport function oidcClientTestRedirectUriForgeField(redirectUris: OidcRedirectUri[]) {\n const options = redirectUris.map((uri) => ({ label: uri, value: uri }));\n\n return dbxForgeValueSelectionField({\n key: 'redirect_uri',\n label: 'Redirect URI',\n description: 'Select the redirect URI to use for the test flow.',\n required: true,\n props: { options }\n });\n}\n\n/**\n * Creates a forge pickable chip field for selecting scopes to request during the test flow.\n *\n * @param availableScopes - The available scopes to display as selectable options.\n * @returns A forge pickable chip field for scope selection.\n */\nexport function oidcClientTestScopesForgeField(availableScopes: OidcScopeDetails[]) {\n return dbxForgePickableChipField({\n key: 'scopes',\n label: 'Scopes',\n hint: 'Select the scopes to request.',\n props: {\n showSelectAllButton: true,\n ...pickableValueFieldValuesConfigForStaticLabeledValues(availableScopes)\n }\n });\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { AbstractConfigAsyncForgeFormDirective, DBX_FORGE_FORM_COMPONENT_TEMPLATE, dbxForgeFormComponentProviders, DbxForgeFormComponentImportsModule } from '@dereekb/dbx-form';\nimport { oidcEntryClientForgeFormFields, type OidcEntryClientFormFieldsConfig } from './oidcentry.forge.form';\nimport { type CreateOidcClientParams, type UpdateOidcClientFieldParams } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport type { FormConfig } from '@ng-forge/dynamic-forms';\nimport { map, type Observable } 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 DbxFirebaseOidcEntryClientForgeFormComponent}.\n *\n * Omits `tokenEndpointAuthMethods` since the component pulls those from {@link DbxFirebaseOidcConfigService}.\n */\nexport type DbxFirebaseOidcEntryClientFormComponentConfig = Omit<OidcEntryClientFormFieldsConfig, 'tokenEndpointAuthMethods'>;\n\n/**\n * Configurable forge 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-forge-form',\n template: DBX_FORGE_FORM_COMPONENT_TEMPLATE,\n providers: dbxForgeFormComponentProviders(),\n imports: [DbxForgeFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientForgeFormComponent extends AbstractConfigAsyncForgeFormDirective<DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcEntryClientFormComponentConfig> {\n private readonly _oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n readonly formConfig$: Observable<Maybe<FormConfig>> = this.currentConfig$.pipe(\n map((config) => {\n if (!config) {\n return undefined;\n }\n\n return oidcEntryClientForgeFormFields({\n ...config,\n tokenEndpointAuthMethods: this._oidcConfigService.tokenEndpointAuthMethods\n });\n })\n );\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractConfigAsyncForgeFormDirective, DBX_FORGE_FORM_COMPONENT_TEMPLATE, dbxForgeFormComponentProviders, DbxForgeFormComponentImportsModule } from '@dereekb/dbx-form';\nimport { oidcEntryClientTestForgeFormFields, type OidcEntryClientTestFormFieldsConfig } from './oidcentry.forge.form';\nimport { type Maybe } from '@dereekb/util';\nimport type { FormConfig } from '@ng-forge/dynamic-forms';\nimport { map, type Observable } 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 * Forge form component for configuring an OAuth test authorization request.\n *\n * Displays read-only client_id, a redirect URI selector, and scope picker.\n */\n@Component({\n selector: 'dbx-firebase-oidc-client-test-forge-form',\n template: DBX_FORGE_FORM_COMPONENT_TEMPLATE,\n providers: dbxForgeFormComponentProviders(),\n imports: [DbxForgeFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientTestForgeFormComponent extends AbstractConfigAsyncForgeFormDirective<DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcEntryClientTestFormComponentConfig> {\n readonly formConfig$: Observable<Maybe<FormConfig>> = this.currentConfig$.pipe(map((config) => (config ? oidcEntryClientTestForgeFormFields(config) : undefined)));\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/**\n * Document store for a single {@link OidcEntry}.\n */\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 readonly deleteToken = firebaseDocumentStoreDeleteFunction(this, this.oidcModelFunctions.oidcEntry.deleteOidcEntry.token);\n}\n","import { type DocumentDataWithIdAndKey, type OidcEntryGrantPayloadData, type OidcEntry } from '@dereekb/firebase';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport {\n AbstractDbxSelectionListWrapperDirective,\n AbstractDbxValueListViewItemComponent,\n AbstractDbxSelectionListViewDirective,\n type DbxSelectionValueListViewConfig,\n provideDbxListView,\n provideDbxListViewWrapper,\n DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n DbxSelectionValueListViewComponentImportsModule,\n DbxListWrapperComponentImportsModule,\n DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n DbxButtonComponent,\n DbxActionConfirmDirective,\n type DbxActionConfirmConfig,\n DbxSpacerDirective\n} from '@dereekb/dbx-web';\nimport { DbxActionDirective, DbxActionHandlerDirective, DbxActionButtonDirective } from '@dereekb/dbx-core';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { of } from 'rxjs';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\n\n/**\n * Wrapper list of {@link OidcEntry} Grant rows belonging to the current user.\n *\n * Renders one row per Grant — i.e. one row per \"app with access to my account\" —\n * with an inline Revoke button that cascades through every grantable token.\n */\n@Component({\n selector: 'dbx-firebase-oidc-grant-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n providers: provideDbxListViewWrapper(DbxFirebaseOidcEntryGrantListComponent),\n standalone: true,\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-card-items-list'\n },\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryGrantListComponent extends AbstractDbxSelectionListWrapperDirective<OidcEntry> {\n constructor() {\n super({\n componentClass: DbxFirebaseOidcEntryGrantListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}\n\n@Component({\n selector: 'dbx-firebase-oidc-grant-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n providers: provideDbxListView(DbxFirebaseOidcEntryGrantListViewComponent),\n standalone: true,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryGrantListViewComponent extends AbstractDbxSelectionListViewDirective<OidcEntry> {\n readonly config: DbxSelectionValueListViewConfig<OidcEntry & { key: string; itemValue: OidcEntry }> = {\n componentClass: DbxFirebaseOidcEntryGrantListViewItemComponent,\n mapValuesToItemValues: (x) =>\n of(\n x.map((y, i) => {\n const id = (y as unknown as DocumentDataWithIdAndKey<OidcEntry>).id;\n return { ...y, key: id ?? `grant_${i}`, itemValue: y };\n })\n )\n };\n}\n\n// MARK: Item\n/**\n * Per-row view for a Grant entry. Inline \"Revoke\" button uses a per-component\n * {@link OidcEntryDocumentStore} keyed to this entry's id so calling\n * `deleteToken` invokes the {@link DeleteOidcTokenParams} callModel against\n * the right document.\n */\n@Component({\n selector: 'dbx-firebase-oidc-grant-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded dbx-list-item-padded-thick dbx-list-two-line-item\">\n <div class=\"item-left\">\n <span class=\"item-title\">{{ clientIdSignal() }}</span>\n @if (scopeSignal()) {\n <span class=\"item-details\">{{ scopeSignal() }}</span>\n }\n @if (expiresAtSignal()) {\n <span class=\"item-details-footnote\">Expires {{ expiresAtSignal() | date: 'medium' }}</span>\n }\n </div>\n <dbx-spacer></dbx-spacer>\n <div class=\"item-right\">\n <dbx-button dbxAction [dbxActionHandler]=\"handleRevoke\" [dbxActionConfirm]=\"revokeConfirmConfig\" dbxActionButton text=\"Revoke\" icon=\"block\" color=\"warn\" [raised]=\"true\"></dbx-button>\n </div>\n </div>\n `,\n standalone: true,\n imports: [DatePipe, DbxSpacerDirective, DbxButtonComponent, DbxActionDirective, DbxActionHandlerDirective, DbxActionButtonDirective, DbxActionConfirmDirective],\n providers: [OidcEntryDocumentStore],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryGrantListViewItemComponent extends AbstractDbxValueListViewItemComponent<OidcEntry> {\n readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n\n readonly clientIdSignal = computed(() => this._payload().clientId ?? '');\n readonly scopeSignal = computed(() => this._payload().openid?.scope ?? null);\n readonly expiresAtSignal = computed(() => this.itemValue.expiresAt ?? null);\n\n readonly revokeConfirmConfig: DbxActionConfirmConfig = {\n title: 'Revoke access',\n prompt: 'This app will lose access to your account immediately. Existing access and refresh tokens stop working.',\n confirmText: 'Revoke'\n };\n\n readonly handleRevoke: WorkUsingContext = (_, context) => {\n context.startWorkingWithLoadingStateObservable(this.oidcEntryDocumentStore.deleteToken({}));\n };\n\n constructor() {\n super();\n const id = (this.itemValue as unknown as DocumentDataWithIdAndKey<OidcEntry>).id;\n\n if (id) {\n this.oidcEntryDocumentStore.setId(id);\n }\n }\n\n private _payload(): Partial<OidcEntryGrantPayloadData> {\n return this.itemValue.payload ?? {};\n }\n}\n","import { OIDC_ENTRY_CLIENT_TYPE, type OidcEntryOAuthClientPayloadData, 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, i) => ({ ...y, key: `oidc_${i}`, 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 Partial<OidcEntryOAuthClientPayloadData>;\n return payload?.client_name || 'OAuth Client';\n }\n\n get clientId(): string {\n const payload = this.entry().payload as Partial<OidcEntryOAuthClientPayloadData>;\n return payload?.client_id || '';\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 { inject, Injectable } from '@angular/core';\nimport { AbstractDbxFirebaseCollectionStore } from '@dereekb/dbx-firebase';\nimport { OidcModelFirestoreCollections, type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\n\n/**\n * Collection store for querying {@link OidcEntry} documents.\n */\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/**\n * Directive providing a {@link OidcEntryCollectionStore} for querying {@link OidcEntry} documents.\n */\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 { ChangeDetectionStrategy, Component, inject, type OnInit, viewChild } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\nimport { DbxFirebaseAuthService, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionListDirective } from '@dereekb/dbx-firebase';\nimport { type FirestoreQueryConstraint, oidcGrantEntriesByUidQuery } from '@dereekb/firebase';\nimport { OidcEntryCollectionStoreDirective } from '../store/oidcentry.collection.store.directive';\nimport { DbxFirebaseOidcEntryGrantListComponent } from '../component/oidcentry.grant.list.component';\n\n/**\n * Drop-in container for the \"apps with access to my account\" management UI.\n *\n * Wires a {@link OidcEntryCollectionStoreDirective} to query Grant entries\n * for the signed-in user, then renders {@link DbxFirebaseOidcEntryGrantListComponent}\n * with inline Revoke buttons. No inputs — the container resolves the current\n * user via {@link DbxFirebaseAuthService}.\n */\n@Component({\n selector: 'dbx-firebase-oidc-grant-list-container',\n template: `\n <div dbxOidcEntryCollection dbxFirebaseCollectionChange=\"auto\" [constraints]=\"grantConstraintsSignal()\">\n <dbx-firebase-oidc-grant-list dbxFirebaseCollectionList></dbx-firebase-oidc-grant-list>\n </div>\n `,\n standalone: true,\n imports: [OidcEntryCollectionStoreDirective, DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseOidcEntryGrantListComponent],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryGrantListContainerComponent implements OnInit {\n readonly dbxFirebaseAuthService = inject(DbxFirebaseAuthService);\n readonly oidcEntryCollectionStoreDirective = viewChild(OidcEntryCollectionStoreDirective);\n\n readonly grantConstraintsSignal = toSignal<FirestoreQueryConstraint[]>(this.dbxFirebaseAuthService.currentAuthUser$.pipe(map((user) => (user?.uid ? oidcGrantEntriesByUidQuery(user.uid) : []))));\n\n ngOnInit(): void {\n const directive = this.oidcEntryCollectionStoreDirective();\n directive?.setMaxPages(5);\n directive?.setItemsPerPage(20);\n }\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 { DbxFirebaseOidcEntryClientForgeFormComponent, type DbxFirebaseOidcEntryClientFormComponentConfig, type DbxFirebaseOidcModelClientFormValue } from '../component/oidcentry.client.forge.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-forge-form dbxActionForm [config]=\"formConfig\"></dbx-firebase-oidc-client-forge-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, DbxFirebaseOidcEntryClientForgeFormComponent],\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","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, generatePkceCodeVerifier, generatePkceCodeChallenge } 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 { DbxFirebaseOidcEntryClientTestForgeFormComponent, type DbxFirebaseOidcModelClientTestFormValue } from '../component/oidcentry.client.test.forge.form.component';\nimport { type OidcEntryClientTestFormFieldsConfig } from '../component/oidcentry.forge.form';\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-forge-form [dbxFormSource]=\"formTemplate$\" dbxFormSourceMode=\"always\" [config]=\"formConfig()\" (dbxFormValueChange)=\"onFormValueChange($event)\"></dbx-firebase-oidc-client-test-forge-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, DbxFirebaseOidcEntryClientTestForgeFormComponent, 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 /**\n * Scopes the user can pick from. Overrides the service default when provided.\n */\n readonly availableScopes = input<Maybe<OidcScopeDetails[]>>(undefined);\n\n /**\n * Path to the authorization endpoint. Overrides the service default when provided.\n */\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>(() => {\n const redirectUris = this.redirectUrisSignal() ?? [];\n const availableScopes = this.resolvedAvailableScopes();\n\n console.log('formConfig:', { redirectUris, availableScopes });\n\n return { redirectUris, availableScopes };\n });\n\n readonly formTemplate$ = this.oidcEntryDocumentStore.data$.pipe(\n map((data) => {\n const payload = data.payload as OidcEntryOAuthClientPayloadData;\n\n const formValue: DbxFirebaseOidcModelClientTestFormValue = {\n client_id: payload?.client_id ?? '',\n redirect_uri: payload?.redirect_uris?.[0] ?? '',\n scopes: ['openid']\n };\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 /**\n * The current form value, updated by the form via dbxFormValueChange.\n */\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 void 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 { DbxFirebaseOidcEntryClientForgeFormComponent, type DbxFirebaseOidcEntryClientFormComponentConfig, type DbxFirebaseOidcModelClientUpdateFormValue } from '../component/oidcentry.client.forge.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-forge-form dbxActionForm [dbxFormSource]=\"formTemplate$\" dbxFormSourceMode=\"always\" [config]=\"formConfig\"></dbx-firebase-oidc-client-forge-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, DbxFirebaseOidcEntryClientForgeFormComponent],\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, 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/**\n * Directive providing a {@link OidcEntryDocumentStore} for accessing a single {@link OidcEntry} document.\n */\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 *\n * @param appCollection - The application's Firestore collection that must implement {@link OidcModelFirestoreCollections}.\n * @returns The validated OidcModelFirestoreCollections instance.\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 *\n * @param config - Configuration specifying the app collection class, OIDC settings, and provider options.\n * @returns EnvironmentProviders for the OIDC module.\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/interaction/components/oauth.consent.scope.forms.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.form.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.forge.form.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.client.forge.form.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.client.test.forge.form.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.grant.list.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.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/container/oidcentry.grant.list.container.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.create.component.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.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 *\n * - `'unknown'` — Firebase auth state has not yet resolved. Render nothing/spinner to avoid flashing.\n * - `'no_user'` — Auth resolved and there is no signed-in user. Project the login UI via ng-content.\n * - `'user'` — Auth resolved and a user is signed in.\n * - `'submitting'` — Submitting the ID token to the OIDC interaction endpoint.\n * - `'error'` — Submission failed; allow retry.\n */\nexport type OidcLoginStateCase = 'unknown' | '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 ('unknown') {\n <dbx-basic-loading [loading]=\"true\"></dbx-basic-loading>\n }\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]=\"resolvedErrorSignal()\"></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 resolvedErrorSignal = 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, type Signal } from '@angular/core';\nimport { DbxActionButtonDirective, DbxActionDirective, DbxActionHandlerDirective, DbxActionValueDirective, DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAvatarComponent, DbxBasicLoadingComponent, DbxButtonComponent, DbxButtonSpacerDirective, DbxActionSnackbarErrorDirective } from '@dereekb/dbx-web';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { type Maybe, SPACE_STRING_SPLIT_JOIN } from '@dereekb/util';\nimport { type OAuthInteractionConsentResponse, type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type DbxFirebaseOAuthConsentScopesViewData } from './oauth.consent.scope.view.component';\nimport { type OAuthConsentScopesFormValue } from './oauth.consent.scope.forms';\n\n/**\n * Default required scopes — `openid` is mandatory for any OIDC flow, so the\n * UI always treats it as not-deselectable.\n */\nconst DEFAULT_OAUTH_CONSENT_REQUIRED_SCOPES: readonly OidcScope[] = ['openid'];\n\n/**\n * State cases for the OIDC consent interaction flow.\n *\n * - `'unknown'` — Firebase auth state has not yet resolved. Render a spinner\n * to avoid flashing between states.\n * - `'no_user'` — Auth resolved and there is no signed-in user. Project the\n * login UI via ng-content.\n * - `'user'` — Auth resolved and a user is signed in. Render the consent\n * form. Submission progress and errors are managed by the inner\n * `dbxAction` contexts and surfaced via `dbxActionSnackbarError`.\n */\nexport type OidcConsentStateCase = 'unknown' | 'no_user' | 'user';\n\n/**\n * Presentational component for the OIDC OAuth consent screen.\n *\n * Wires up two `dbxAction` contexts — an outer one for Approve (which hosts\n * the scope-selection forge form via `dbxActionForm`) and a nested one for\n * Deny (which carries no value). Buttons are bound by Angular DI's\n * nearest-ancestor lookup: the Approve button picks up the outer action, the\n * Deny button (wrapped in its own `<ng-container dbxAction>`) picks up the\n * inner.\n *\n * Supports ng-content projection — anything provided is rendered for the\n * `'no_user'` state (so apps can project a login view, mirroring\n * `DbxFirebaseOAuthLoginViewComponent`).\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-view\n * [details]=\"loginDetails\"\n * [consentStateCase]=\"'user'\"\n * [scopeInjectionConfig]=\"scopeConfig\"\n * [approveHandler]=\"handleApprove\"\n * [denyHandler]=\"handleDeny\">\n * </dbx-firebase-oauth-consent-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-view',\n standalone: true,\n imports: [DbxInjectionComponent, DbxAvatarComponent, DbxBasicLoadingComponent, DbxButtonComponent, DbxButtonSpacerDirective, DbxActionDirective, DbxActionHandlerDirective, DbxActionValueDirective, DbxActionButtonDirective, DbxActionSnackbarErrorDirective],\n styleUrls: ['./oauth.consent.view.component.scss'],\n template: `\n <div class=\"dbx-firebase-oauth-consent-view\">\n @switch (consentStateCase()) {\n @case ('unknown') {\n <dbx-basic-loading [loading]=\"true\"></dbx-basic-loading>\n }\n @case ('no_user') {\n <ng-content></ng-content>\n }\n @case ('user') {\n <div class=\"dbx-firebase-oauth-consent-header\">\n @if (clientNameSignal()) {\n <h2>You're signing in to {{ clientNameSignal() }}</h2>\n }\n <div class=\"dbx-firebase-oauth-consent-header-info dbx-flex\">\n <dbx-avatar [avatarUrl]=\"logoUriSignal()\" [avatarStyle]=\"'square'\" avatarIcon=\"apps\"></dbx-avatar>\n <span>\n @if (clientUriSignal()) {\n <a class=\"dbx-firebase-oauth-consent-client-uri\" [href]=\"clientUriSignal()\" target=\"_blank\" rel=\"noopener noreferrer\">{{ clientUriSignal() }}</a>\n }\n </span>\n </div>\n </div>\n @if (clientNameSignal()) {\n <p class=\"dbx-firebase-oauth-consent-prompt\">\n <strong>{{ clientNameSignal() }}</strong>\n is requesting these permissions:\n </p>\n }\n\n <div dbxAction dbxActionSnackbarError [dbxActionHandler]=\"approveHandler()\">\n <dbx-injection [config]=\"resolvedScopeInjectionConfigSignal()\"></dbx-injection>\n\n <div class=\"dbx-pt3 dbx-pb3 dbx-firebase-oauth-consent-actions\">\n <dbx-button dbxActionButton text=\"Approve\" [raised]=\"true\" color=\"primary\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <ng-container dbxAction dbxActionSnackbarError dbxActionValue [dbxActionHandler]=\"denyHandler()\">\n <dbx-button dbxActionButton text=\"Deny\" [flat]=\"true\" color=\"warn\"></dbx-button>\n </ng-container>\n </div>\n </div>\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 consentStateCase = input.required<OidcConsentStateCase>();\n readonly scopeInjectionConfig = input.required<DbxInjectionComponentConfig>();\n /**\n * Scopes that cannot be deselected by the user. Forwarded to the scope\n * view so it can render an \"Always granted\" hint. Defaults to `['openid']`.\n */\n readonly requiredScopes = input<readonly OidcScope[]>(DEFAULT_OAUTH_CONSENT_REQUIRED_SCOPES);\n\n /**\n * Approve handler — called with the form value when the Approve button\n * triggers the outer action. Receives a `WorkUsingContext` to drive the\n * action's loading/success/error pipeline.\n */\n readonly approveHandler = input.required<WorkUsingContext<OAuthConsentScopesFormValue, OAuthInteractionConsentResponse>>();\n\n /**\n * Deny handler — called when the Deny button triggers the inner action.\n * No value is passed (`dbxActionValue` provides an empty payload).\n */\n readonly denyHandler = input.required<WorkUsingContext<void, OAuthInteractionConsentResponse>>();\n\n readonly clientNameSignal = computed(() => this.details()?.client_name ?? '');\n readonly clientUriSignal = computed(() => this.details()?.client_uri);\n readonly logoUriSignal = computed(() => this.details()?.logo_uri);\n readonly scopesSignal: Signal<OidcScope[]> = computed(() => SPACE_STRING_SPLIT_JOIN.splitStrings(this.details()?.scopes ?? ''));\n\n readonly resolvedScopeInjectionConfigSignal = computed<DbxInjectionComponentConfig>(() => {\n const data: DbxFirebaseOAuthConsentScopesViewData = {\n details: this.details(),\n scopes: this.scopesSignal(),\n clientName: this.clientNameSignal(),\n requiredScopes: this.requiredScopes()\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\n * `DBX_INJECTION_COMPONENT_DATA` token.\n *\n * Carries the requested scopes plus surrounding interaction context. The\n * form value (current granted scopes) is no longer carried here — the\n * scope view's form is wired up via `dbxActionForm` to the parent's\n * `dbxAction`, so the value pipeline runs through the action store at\n * trigger time.\n */\nexport interface DbxFirebaseOAuthConsentScopesViewData {\n readonly details?: Maybe<OAuthInteractionLoginDetails>;\n readonly scopes: OidcScope[];\n readonly clientName: string;\n /**\n * Scopes that must always be granted. Surfaced separately so the scope\n * view can render them as a static \"Always granted\" hint instead of\n * making them user-selectable.\n */\n readonly requiredScopes?: readonly OidcScope[];\n}\n\n/**\n * Abstract base class for consent scope view components.\n *\n * Provides typed access to the `DbxFirebaseOAuthConsentScopesViewData`\n * injected via `DBX_INJECTION_COMPONENT_DATA`. Subclasses define the\n * template that renders the requested scopes and (optionally) hosts a\n * forge form decorated with `dbxActionForm`.\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 readonly requiredScopes = computed<readonly OidcScope[]>(() => this.data?.requiredScopes ?? []);\n\n isScopeRequired(scope: OidcScope): boolean {\n return this.requiredScopes().includes(scope);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { of } from 'rxjs';\nimport { AbstractDbxSelectionListViewDirective, AbstractDbxSelectionListWrapperDirective, AbstractDbxValueListViewItemComponent, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DbxListWrapperComponentImportsModule, DbxSelectionValueListViewComponentImportsModule, type DbxSelectionValueListViewConfig, provideDbxListView } from '@dereekb/dbx-web';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\n\n/**\n * Selection-list wrapper used as the `listComponentClass` for the OIDC\n * consent scope `dbxForgeListSelectionField`.\n *\n * Reuses the workspace's `dbx-list` selection infrastructure so the existing\n * scope-row visual treatment (name + description) remains intact while the\n * selection state participates in the surrounding `dbxAction`/`dbxActionForm`\n * pipeline.\n *\n * @example\n * ```ts\n * dbxForgeListSelectionField<OAuthConsentScope, DbxFirebaseOAuthConsentScopeListComponent, OidcScope>({\n * key: 'grantedOIDCScopes',\n * props: {\n * listComponentClass: of(DbxFirebaseOAuthConsentScopeListComponent),\n * readKey: (scope) => scope.name,\n * state$: of(successResult(optionalScopes)),\n * wrapped: false,\n * maxHeight: 'none'\n * }\n * });\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-card-items-list'\n },\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOAuthConsentScopeListComponent extends AbstractDbxSelectionListWrapperDirective<OAuthConsentScope> {\n constructor() {\n super({ componentClass: DbxFirebaseOAuthConsentScopeListViewComponent, defaultSelectionMode: 'select' });\n }\n}\n\n/**\n * Selection list view that pairs with `DbxFirebaseOAuthConsentScopeListComponent`.\n * Maps each `OAuthConsentScope` to a `DbxValueListItem` keyed by the scope name\n * and renders it through `DbxFirebaseOAuthConsentScopeListItemComponent`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DbxFirebaseOAuthConsentScopeListViewComponent),\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOAuthConsentScopeListViewComponent extends AbstractDbxSelectionListViewDirective<OAuthConsentScope> {\n readonly config: DbxSelectionValueListViewConfig<OAuthConsentScope> = {\n componentClass: DbxFirebaseOAuthConsentScopeListItemComponent,\n mapValuesToItemValues: (values) => of(values.map((scope) => ({ ...scope, key: scope.name, itemValue: scope })))\n };\n}\n\n/**\n * Item row inside the OIDC consent scope selection list. Shown as the visual\n * row for both selected and unselected scopes — the selection chrome (the\n * leading checkbox/highlight) is provided by the wrapping\n * `dbx-selection-list-view`.\n */\n@Component({\n template: `\n <div class=\"dbx-list-item-padded dbx-list-item-padded-thick dbx-list-two-line-item\">\n <div class=\"item-left\">\n <div class=\"mat-subtitle-2\">{{ name }}</div>\n @if (description) {\n <div class=\"item-details\">{{ description }}</div>\n }\n </div>\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeListItemComponent extends AbstractDbxValueListViewItemComponent<OAuthConsentScope> {\n get name() {\n return this.itemValue.name;\n }\n\n get description() {\n return this.itemValue.description;\n }\n}\n","import { dbxForgeListSelectionField } from '@dereekb/dbx-form';\nimport { type FormConfig, type ValidatorConfig } from '@ng-forge/dynamic-forms';\nimport { type OidcScope } from '@dereekb/firebase';\nimport { successResult } from '@dereekb/rxjs';\nimport { of } from 'rxjs';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\nimport { DbxFirebaseOAuthConsentScopeListComponent } from './oauth.consent.scope.list.component';\n\n/**\n * Validator key emitted when the user has not selected any optional scope.\n * Surfaces alongside the form's invalid state so the action button stays disabled.\n */\nexport const OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_KIND = 'mustSelectAtLeastOneScope';\n\n/**\n * Default message shown when the user has cleared every optional scope.\n */\nexport const DEFAULT_OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_MESSAGE = 'Select at least one scope to grant.';\n\n/**\n * Form value emitted by the consent scopes form.\n *\n * Uses the same key as the `OAuthInteractionConsentRequest.grantedOIDCScopes`\n * payload field so the consent action handler can pass the form value through\n * directly.\n */\nexport interface OAuthConsentScopesFormValue {\n readonly grantedOIDCScopes: OidcScope[];\n}\n\n/**\n * Configuration for the consent scopes form.\n *\n * Required scopes are filtered out by the caller before being passed in —\n * required scopes are surfaced separately as a static \"Always granted\" line\n * because they are not user-selectable.\n */\nexport interface OAuthConsentScopesFormFieldsConfig {\n /**\n * Optional scopes the user can choose to grant.\n */\n readonly optionalScopes: readonly OAuthConsentScope[];\n /**\n * Initial selection set. Defaults to every optional scope being selected.\n */\n readonly initiallySelected?: readonly OidcScope[];\n}\n\n/**\n * Builds a complete `FormConfig` ready to feed into a forge form component.\n *\n * The resulting form has a single `grantedOIDCScopes` field — a\n * `dbxForgeListSelectionField` rendered through\n * `DbxFirebaseOAuthConsentScopeListComponent` (a `dbx-list` selection wrapper).\n * The list renders bare (no Material form-field wrapper) and without the\n * default 300px height cap so it grows to fit the scope list.\n *\n * @param config - The consent scopes form fields configuration.\n * @returns A `FormConfig` whose single field selects an `OidcScope[]` of granted scopes.\n */\nexport function oauthConsentScopesFormConfig(config: OAuthConsentScopesFormFieldsConfig): FormConfig {\n const { optionalScopes, initiallySelected } = config;\n const value: OidcScope[] = (initiallySelected ?? optionalScopes.map((scope) => scope.name)).slice();\n const optionalScopesArray = optionalScopes.slice();\n const validators: ValidatorConfig[] = [\n {\n type: 'custom',\n expression: 'fieldValue && fieldValue.length > 0',\n kind: OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_KIND\n }\n ];\n\n return {\n fields: [\n dbxForgeListSelectionField<OAuthConsentScope, DbxFirebaseOAuthConsentScopeListComponent, OidcScope>({\n key: 'grantedOIDCScopes',\n value,\n validators,\n validationMessages: {\n [OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_KIND]: DEFAULT_OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_MESSAGE\n },\n props: {\n listComponentClass: of(DbxFirebaseOAuthConsentScopeListComponent),\n readKey: (scope) => scope.name,\n state$: of(successResult(optionalScopesArray)),\n wrapped: false,\n maxHeight: 'none'\n }\n })\n ]\n };\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractConfigAsyncForgeFormDirective, DBX_FORGE_FORM_COMPONENT_TEMPLATE, dbxForgeFormComponentProviders, DbxForgeFormComponentImportsModule } from '@dereekb/dbx-form';\nimport { type FormConfig } from '@ng-forge/dynamic-forms';\nimport { type Maybe } from '@dereekb/util';\nimport { map, type Observable } from 'rxjs';\nimport { type OAuthConsentScopesFormFieldsConfig, type OAuthConsentScopesFormValue, oauthConsentScopesFormConfig } from './oauth.consent.scope.forms';\n\n/**\n * Reusable forge form component that renders one checkbox per OIDC scope\n * defined in {@link OAuthConsentScopesFormFieldsConfig}. Required scopes are\n * rendered as checked-and-disabled.\n *\n * Pair with `<dbx-firebase-oauth-consent-scope-default-view>` for the default\n * consent flow, or embed directly in custom consent UIs that supply their\n * own scope/required configuration.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-form',\n template: DBX_FORGE_FORM_COMPONENT_TEMPLATE,\n providers: dbxForgeFormComponentProviders(),\n imports: [DbxForgeFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOAuthConsentScopeFormComponent extends AbstractConfigAsyncForgeFormDirective<OAuthConsentScopesFormValue, OAuthConsentScopesFormFieldsConfig> {\n readonly formConfig$: Observable<Maybe<FormConfig>> = this.currentConfig$.pipe(map((config) => (config ? oauthConsentScopesFormConfig(config) : undefined)));\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 /**\n * Available scopes for the OIDC provider. Used in scope picker fields.\n */\n abstract readonly availableScopes: OidcScopeDetails[];\n /**\n * Optional API origin (scheme + host, e.g. `https://api.example.com`) prepended to the OIDC\n * authorization and interaction endpoint paths when set.\n *\n * Use this when the OIDC provider is hosted on a different origin than the frontend so that\n * the authorization redirect and interaction POSTs target the issuer host directly (e.g. to\n * avoid an intermediate hosting layer that strips cookies). Should not include a trailing\n * slash and should not include the `/api` path segment — OIDC endpoints live at the root.\n *\n * Leave unset for single-origin deployments; the endpoint paths stay relative.\n */\n readonly oidcApiOrigin?: Maybe<string>;\n /**\n * Path to the authorization endpoint. Defaults to '/oidc/auth'.\n */\n readonly oidcAuthorizationEndpointApiPath?: Maybe<string>;\n /**\n * Base path for interaction endpoints. Defaults to '/interaction'.\n */\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 const origin = this.config.oidcApiOrigin ?? '';\n return `${origin}${this.config.oidcAuthorizationEndpointApiPath ?? DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH}`;\n }\n\n get oidcInteractionEndpointApiPath(): string {\n const origin = this.config.oidcApiOrigin ?? '';\n return `${origin}${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 { type Maybe, separateValues } from '@dereekb/util';\nimport { DBX_INJECTION_COMPONENT_DATA } from '@dereekb/dbx-core';\nimport { DbxActionFormDirective } from '@dereekb/dbx-form';\nimport { type OidcScope } from '@dereekb/firebase';\nimport { DbxFirebaseOidcConfigService } from '../../service/oidc.configuration.service';\nimport { type DbxFirebaseOAuthConsentScopesViewData } from './oauth.consent.scope.view.component';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\nimport { type OAuthConsentScopesFormFieldsConfig } from './oauth.consent.scope.forms';\nimport { DbxFirebaseOAuthConsentScopeFormComponent } from './oauth.consent.scope.form.component';\n\n/**\n * Default consent scope view component.\n *\n * Reads the requested scopes (and required scopes) from the\n * `DBX_INJECTION_COMPONENT_DATA` provided by the parent consent view,\n * resolves human-readable descriptions from the app-level\n * `DbxFirebaseOidcConfigService`, then renders a\n * `DbxFirebaseOAuthConsentScopeFormComponent` with `dbxActionForm` so the\n * form's value participates in the surrounding `dbxAction` (the consent\n * view's outer Approve action).\n *\n * Required scopes are not user-selectable. They are surfaced as an \"Always\n * granted\" hint above the form because the server enforces them regardless\n * of payload — including them in the selection list would just add noise.\n *\n * Apps can override this default via\n * `DbxFirebaseOidcConfig.consentScopeListViewClass` or\n * `DbxOAuthConsentComponentConfig.consentScopeListViewClass`. Custom views\n * should similarly apply `dbxActionForm` to a forge form whose value matches\n * `OAuthConsentScopesFormValue`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-default-view',\n template: `\n @if (alwaysGrantedLabelSignal(); as label) {\n <p class=\"dbx-firebase-oauth-consent-always-granted dbx-hint\">Always granted: {{ label }}</p>\n }\n <dbx-firebase-oauth-consent-scope-form dbxActionForm [config]=\"formFieldsConfigSignal()\"></dbx-firebase-oauth-consent-scope-form>\n `,\n imports: [DbxFirebaseOAuthConsentScopeFormComponent, DbxActionFormDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOAuthConsentScopeDefaultViewComponent {\n private readonly _oidcConfigService = inject(DbxFirebaseOidcConfigService);\n private readonly _data = inject<DbxFirebaseOAuthConsentScopesViewData>(DBX_INJECTION_COMPONENT_DATA);\n\n readonly mappedScopesSignal = 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._data.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 readonly optionalScopesSignal = computed<OAuthConsentScope[]>(() => {\n const requiredSet = new Set<OidcScope>(this._data.requiredScopes ?? []);\n return this.mappedScopesSignal().filter((scope) => !requiredSet.has(scope.name));\n });\n\n readonly alwaysGrantedLabelSignal = computed<Maybe<string>>(() => {\n const required = this._data.requiredScopes ?? [];\n return required.length > 0 ? required.join(', ') : null;\n });\n\n readonly formFieldsConfigSignal = computed<OAuthConsentScopesFormFieldsConfig>(() => ({\n optionalScopes: this.optionalScopesSignal()\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 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 * @returns The base URL string for the OIDC interaction endpoint.\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 * @param uid - The OIDC interaction UID identifying the current login interaction.\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 }))\n );\n }\n\n /**\n * Submit consent decision to complete the consent interaction.\n *\n * Automatically attaches the current user's Firebase ID token. When `approved`\n * is true, optional `grants` may be passed to grant only a subset of the\n * requested scopes/claims/resource scopes; the server validates that any\n * subset is contained in the corresponding `missing*` set on the prompt.\n *\n * When `approved` is false, `grants` is ignored (not sent).\n *\n * @param uid - The OIDC interaction UID identifying the current consent interaction.\n * @param approved - Whether the user approved or denied the consent request.\n * @param grants - Optional subset of OIDC scopes / OIDC claims / resource scopes to grant.\n * @returns Observable that emits the redirect URL from the server response.\n */\n submitConsent(uid: OidcInteractionUid, approved: boolean, grants?: Pick<OAuthInteractionConsentRequest, 'grantedOIDCScopes' | 'grantedOIDCClaims' | 'grantedResourceScopes'>): Observable<OAuthInteractionConsentResponse> {\n return this._authService.idTokenString$.pipe(\n first(),\n switchMap((idToken) => {\n const body: OAuthInteractionConsentRequest = approved && grants ? { idToken, approved, ...grants } : { idToken, approved };\n return this.http.post<OAuthInteractionConsentResponse>(`${this.baseUrl}/${uid}/consent`, body);\n })\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]=\"loginStateCaseSignal()\" [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: Signal<Maybe<boolean>> = toSignal(this.dbxFirebaseAuthService.isLoggedIn$);\n\n readonly submitting = signal(false);\n readonly errorMessage = signal<Maybe<string>>(null);\n\n readonly loginStateCaseSignal = computed<OidcLoginStateCase>(() => {\n const errorMessage = this.errorMessage();\n const isLoggedIn = this.isLoggedIn();\n let result: OidcLoginStateCase;\n\n if (this.submitting()) {\n result = 'submitting';\n } else if (errorMessage) {\n result = 'error';\n } else {\n if (isLoggedIn === undefined) {\n result = 'unknown';\n } else if (isLoggedIn) {\n result = 'user';\n } else {\n result = 'no_user';\n }\n }\n\n return result;\n });\n\n constructor() {\n // Auto-submit when user is logged in\n effect(() => {\n if (this.loginStateCaseSignal() === '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 if (response.redirectTo) {\n // Leave `submitting` true so the auto-submit effect cannot re-enter\n // and fire another `submitLogin` POST while the browser navigates.\n window.location.href = response.redirectTo;\n } else {\n this.submitting.set(false);\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, computed, inject, input, type OnDestroy, type Signal, type Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { tap } from 'rxjs';\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 OAuthInteractionConsentResponse, type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxFirebaseOAuthConsentViewComponent, type OidcConsentStateCase } 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';\nimport { type OAuthConsentScopesFormValue } from '../components/oauth.consent.scope.forms';\n\n/**\n * OIDC scopes that cannot be deselected on the consent screen. `openid` is\n * mandatory for any OIDC flow, so the UI shows it as always-granted and the\n * server enforces it regardless of payload.\n */\nconst OAUTH_CONSENT_REQUIRED_SCOPES: readonly OidcScope[] = ['openid'];\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 * Reads interaction UID and client details from route params (populated by\n * the server redirect), assembles them into `OAuthInteractionLoginDetails`,\n * and exposes Approve / Deny handlers that drive the view's nested\n * `dbxAction` contexts.\n *\n * Submission progress and error states are owned by the action stores; this\n * container is just routing-glue + handler factories.\n *\n * Supports ng-content projection — any content provided is passed through to\n * the view component for the `'no_user'` state (e.g. an app's login view).\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent',\n standalone: true,\n imports: [DbxFirebaseOAuthConsentViewComponent],\n template: `\n <dbx-firebase-oauth-consent-view [details]=\"resolvedDetailsSignal()\" [consentStateCase]=\"consentStateCaseSignal()\" [scopeInjectionConfig]=\"scopeInjectionConfigSignal()\" [requiredScopes]=\"requiredScopes\" [approveHandler]=\"handleApprove\" [denyHandler]=\"handleDeny\">\n <ng-content />\n </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 dbxFirebaseAuthService = inject(DbxFirebaseAuthService);\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 // Auth state — undefined until Firebase resolves to avoid a flash between 'unknown' → 'no_user'/'user'\n readonly isLoggedIn: Signal<Maybe<boolean>> = toSignal(this.dbxFirebaseAuthService.isLoggedIn$);\n\n // Resolved values\n readonly resolvedInteractionUidSignal = computed(() => this.routeUid());\n readonly resolvedDetailsSignal = 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 scopeInjectionConfigSignal = computed<DbxInjectionComponentConfig>(() => ({\n componentClass: this.config()?.consentScopeListViewClass ?? this.oidcConfigService.consentScopeListViewClass ?? DbxFirebaseOAuthConsentScopeDefaultViewComponent\n }));\n\n /**\n * Scopes the user cannot deselect. Forwarded to the view, which shows\n * them as a static \"Always granted\" hint above the selection list.\n */\n readonly requiredScopes: readonly OidcScope[] = OAUTH_CONSENT_REQUIRED_SCOPES;\n\n readonly consentStateCaseSignal = computed<OidcConsentStateCase>(() => {\n const isLoggedIn = this.isLoggedIn();\n let result: OidcConsentStateCase;\n\n if (isLoggedIn === undefined) {\n result = 'unknown';\n } else if (isLoggedIn) {\n result = 'user';\n } else {\n result = 'no_user';\n }\n\n return result;\n });\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 /**\n * Handles the Approve action. Pulls the form's selected scope array\n * straight off the form value (it already matches the API field name\n * `grantedOIDCScopes`) and forwards it through `submitConsent`. On a\n * successful response, hard-navigates to the OIDC server's redirect URL.\n *\n * @param formValue - Submitted form value containing the granted scope array.\n * @param context - The Work context driving the approval flow.\n */\n readonly handleApprove: WorkUsingContext<OAuthConsentScopesFormValue, OAuthInteractionConsentResponse> = (formValue, context) => {\n const uid = this.resolvedInteractionUidSignal();\n\n if (!uid) {\n context.reject(new Error('Missing interaction UID'));\n return;\n }\n\n const grantedOIDCScopes = formValue.grantedOIDCScopes;\n\n context.startWorkingWithObservable(\n this.interactionService.submitConsent(uid, true, { grantedOIDCScopes }).pipe(\n tap((response) => {\n if (response.redirectTo) {\n globalThis.location.href = response.redirectTo;\n }\n })\n )\n );\n };\n\n /**\n * Handles the Deny action. No payload is sent — the server returns\n * `access_denied` to the OAuth client.\n *\n * @param _value - Unused form payload.\n * @param context - The Work context driving the denial flow.\n */\n readonly handleDeny: WorkUsingContext<void, OAuthInteractionConsentResponse> = (_value, context) => {\n const uid = this.resolvedInteractionUidSignal();\n\n if (!uid) {\n context.reject(new Error('Missing interaction UID'));\n return;\n }\n\n context.startWorkingWithObservable(\n this.interactionService.submitConsent(uid, false).pipe(\n tap((response) => {\n if (response.redirectTo) {\n globalThis.location.href = response.redirectTo;\n }\n })\n )\n );\n };\n}\n","import { dbxForgeTextField, dbxForgeValueSelectionField, dbxForgeSearchableStringChipField, dbxForgePickableChipField, dbxForgeContainer, pickableValueFieldValuesConfigForStaticLabeledValues, isWebsiteUrlValidator } 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 { ContainerField, FormConfig, RegisteredFieldTypes } from '@ng-forge/dynamic-forms';\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 forge fields for the OAuth client create form.\n *\n * Includes `token_endpoint_auth_method` which is immutable after creation.\n *\n * @param config - Optional configuration for field generation, including mode and allowed auth methods.\n * @returns A FormConfig for the client creation form.\n */\nexport function oidcEntryClientForgeFormFields(config?: OidcEntryClientFormFieldsConfig): FormConfig {\n const fields = [];\n\n if (config?.mode === 'create') {\n fields.push(oidcClientTokenEndpointAuthMethodForgeField(config));\n }\n\n fields.push(...oidcEntryClientUpdateForgeFormFields());\n\n return { fields };\n}\n\n/**\n * Creates a forge value selection field for choosing the token endpoint authentication method.\n *\n * @param config - Optional configuration to filter the available auth method options.\n * @returns A forge value selection field for the token endpoint auth method selector.\n */\nexport function oidcClientTokenEndpointAuthMethodForgeField(config?: OidcEntryClientFormFieldsConfig) {\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 dbxForgeValueSelectionField({\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 props: { options }\n });\n}\n\n/**\n * Creates forge fields for updating an existing OAuth client.\n *\n * Excludes `token_endpoint_auth_method` (immutable after creation).\n *\n * @returns Array of forge field definitions for the client update form.\n */\nexport function oidcEntryClientUpdateForgeFormFields(): RegisteredFieldTypes[] {\n return [oidcClientNameForgeField(), oidcClientRedirectUrisForgeField(), oidcClientJwksUriForgeField(), oidcClientLogoUriForgeField(), oidcClientHomepageUriForgeField()];\n}\n\n/**\n * Creates a forge text field for the OAuth client display name.\n *\n * @returns A forge text field for the client name.\n */\nexport function oidcClientNameForgeField() {\n return dbxForgeTextField({\n key: 'client_name',\n label: 'Client Name',\n hint: 'A human-readable name for this OAuth client.',\n required: true,\n maxLength: 200\n });\n}\n\n/**\n * Creates a forge searchable chip field for entering redirect URIs.\n *\n * @returns A forge searchable chip field for redirect URIs.\n */\nexport function oidcClientRedirectUrisForgeField() {\n return dbxForgeSearchableStringChipField({\n key: 'redirect_uris',\n label: 'Redirect URIs',\n hint: 'Type a redirect URI (e.g. https://example.com/callback) and press enter to add it.',\n required: true,\n props: {\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}\n\n/**\n * Creates a forge container wrapping the JWKS URI field, conditionally hidden\n * when the token endpoint auth method is not `private_key_jwt`. A container\n * (not a group) is used so the `jwks_uri` field stays at the root level of\n * the form value rather than being nested under an extra object.\n *\n * @returns A forge container field with conditional visibility logic.\n */\nexport function oidcClientJwksUriForgeField(): ContainerField {\n return dbxForgeContainer({\n key: 'jwks_uri_container',\n fields: [\n dbxForgeTextField({\n key: 'jwks_uri',\n label: 'JWKS URI',\n hint: \"URL where the client's public JSON Web Key Set can be fetched. Required for private_key_jwt authentication.\",\n logic: [\n {\n type: 'required',\n condition: {\n type: 'fieldValue',\n fieldPath: 'token_endpoint_auth_method',\n operator: 'equals',\n value: PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD\n }\n }\n ]\n })\n ],\n logic: [\n {\n type: 'hidden',\n condition: {\n type: 'fieldValue',\n fieldPath: 'token_endpoint_auth_method',\n operator: 'notEquals',\n value: PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD\n }\n }\n ]\n });\n}\n\n/**\n * Creates a forge text field for the optional client logo URL.\n *\n * @returns A forge text field for the logo URI.\n */\nexport function oidcClientLogoUriForgeField() {\n return dbxForgeTextField({\n key: 'logo_uri',\n label: 'Logo URI',\n hint: 'URL of the client logo image (optional).',\n required: false\n });\n}\n\n/**\n * Creates a forge text field for the optional client homepage URL.\n *\n * @returns A forge text field for the homepage URL.\n */\nexport function oidcClientHomepageUriForgeField() {\n return dbxForgeTextField({\n key: 'client_uri',\n label: 'Homepage URL',\n hint: '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 forge form fields for the OAuth test client form.\n *\n * @param config - Configuration providing available redirect URIs and scopes for the test form.\n * @returns A FormConfig for the test client form.\n */\nexport function oidcEntryClientTestForgeFormFields(config: OidcEntryClientTestFormFieldsConfig): FormConfig {\n return { fields: [oidcClientTestClientIdForgeField(), oidcClientTestRedirectUriForgeField(config.redirectUris), oidcClientTestScopesForgeField(config.availableScopes)] };\n}\n\n/**\n * Creates a read-only forge text field displaying the OAuth client ID.\n *\n * @returns A read-only forge text field for the client ID.\n */\nexport function oidcClientTestClientIdForgeField() {\n return dbxForgeTextField({\n key: 'client_id',\n label: 'Client ID',\n readonly: true\n });\n}\n\n/**\n * Creates a forge selection field for choosing one of the client's registered redirect URIs for testing.\n *\n * @param redirectUris - The registered redirect URIs to display as options.\n * @returns A forge selection field for the redirect URI.\n */\nexport function oidcClientTestRedirectUriForgeField(redirectUris: OidcRedirectUri[]) {\n const options = redirectUris.map((uri) => ({ label: uri, value: uri }));\n\n return dbxForgeValueSelectionField({\n key: 'redirect_uri',\n label: 'Redirect URI',\n description: 'Select the redirect URI to use for the test flow.',\n required: true,\n props: { options }\n });\n}\n\n/**\n * Creates a forge pickable chip field for selecting scopes to request during the test flow.\n *\n * @param availableScopes - The available scopes to display as selectable options.\n * @returns A forge pickable chip field for scope selection.\n */\nexport function oidcClientTestScopesForgeField(availableScopes: OidcScopeDetails[]) {\n return dbxForgePickableChipField({\n key: 'scopes',\n label: 'Scopes',\n hint: 'Select the scopes to request.',\n props: {\n showSelectAllButton: true,\n ...pickableValueFieldValuesConfigForStaticLabeledValues(availableScopes)\n }\n });\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { AbstractConfigAsyncForgeFormDirective, DBX_FORGE_FORM_COMPONENT_TEMPLATE, dbxForgeFormComponentProviders, DbxForgeFormComponentImportsModule } from '@dereekb/dbx-form';\nimport { oidcEntryClientForgeFormFields, type OidcEntryClientFormFieldsConfig } from './oidcentry.forge.form';\nimport { type CreateOidcClientParams, type UpdateOidcClientFieldParams } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport type { FormConfig } from '@ng-forge/dynamic-forms';\nimport { map, type Observable } 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 DbxFirebaseOidcEntryClientForgeFormComponent}.\n *\n * Omits `tokenEndpointAuthMethods` since the component pulls those from {@link DbxFirebaseOidcConfigService}.\n */\nexport type DbxFirebaseOidcEntryClientFormComponentConfig = Omit<OidcEntryClientFormFieldsConfig, 'tokenEndpointAuthMethods'>;\n\n/**\n * Configurable forge 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-forge-form',\n template: DBX_FORGE_FORM_COMPONENT_TEMPLATE,\n providers: dbxForgeFormComponentProviders(),\n imports: [DbxForgeFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientForgeFormComponent extends AbstractConfigAsyncForgeFormDirective<DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcEntryClientFormComponentConfig> {\n private readonly _oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n readonly formConfig$: Observable<Maybe<FormConfig>> = this.currentConfig$.pipe(\n map((config) => {\n let result: Maybe<FormConfig>;\n\n if (config) {\n result = oidcEntryClientForgeFormFields({\n ...config,\n tokenEndpointAuthMethods: this._oidcConfigService.tokenEndpointAuthMethods\n });\n } else {\n result = undefined;\n }\n\n return result;\n })\n );\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AbstractConfigAsyncForgeFormDirective, DBX_FORGE_FORM_COMPONENT_TEMPLATE, dbxForgeFormComponentProviders, DbxForgeFormComponentImportsModule } from '@dereekb/dbx-form';\nimport { oidcEntryClientTestForgeFormFields, type OidcEntryClientTestFormFieldsConfig } from './oidcentry.forge.form';\nimport { type Maybe } from '@dereekb/util';\nimport type { FormConfig } from '@ng-forge/dynamic-forms';\nimport { map, type Observable } 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 * Forge form component for configuring an OAuth test authorization request.\n *\n * Displays read-only client_id, a redirect URI selector, and scope picker.\n */\n@Component({\n selector: 'dbx-firebase-oidc-client-test-forge-form',\n template: DBX_FORGE_FORM_COMPONENT_TEMPLATE,\n providers: dbxForgeFormComponentProviders(),\n imports: [DbxForgeFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DbxFirebaseOidcEntryClientTestForgeFormComponent extends AbstractConfigAsyncForgeFormDirective<DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcEntryClientTestFormComponentConfig> {\n readonly formConfig$: Observable<Maybe<FormConfig>> = this.currentConfig$.pipe(map((config) => (config ? oidcEntryClientTestForgeFormFields(config) : undefined)));\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/**\n * Document store for a single {@link OidcEntry}.\n */\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 readonly deleteToken = firebaseDocumentStoreDeleteFunction(this, this.oidcModelFunctions.oidcEntry.deleteOidcEntry.token);\n}\n","import { type DocumentDataWithIdAndKey, type OidcEntryGrantPayloadData, type OidcEntry } from '@dereekb/firebase';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport {\n AbstractDbxSelectionListWrapperDirective,\n AbstractDbxValueListViewItemComponent,\n AbstractDbxSelectionListViewDirective,\n type DbxSelectionValueListViewConfig,\n provideDbxListView,\n provideDbxListViewWrapper,\n DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n DbxSelectionValueListViewComponentImportsModule,\n DbxListWrapperComponentImportsModule,\n DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n DbxButtonComponent,\n DbxActionConfirmDirective,\n type DbxActionConfirmConfig,\n DbxSpacerDirective\n} from '@dereekb/dbx-web';\nimport { DbxActionDirective, DbxActionHandlerDirective, DbxActionButtonDirective } from '@dereekb/dbx-core';\nimport { type WorkUsingContext } from '@dereekb/rxjs';\nimport { of } from 'rxjs';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\n\n/**\n * Wrapper list of {@link OidcEntry} Grant rows belonging to the current user.\n *\n * Renders one row per Grant — i.e. one row per \"app with access to my account\" —\n * with an inline Revoke button that cascades through every grantable token.\n */\n@Component({\n selector: 'dbx-firebase-oidc-grant-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n providers: provideDbxListViewWrapper(DbxFirebaseOidcEntryGrantListComponent),\n standalone: true,\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-card-items-list'\n },\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryGrantListComponent extends AbstractDbxSelectionListWrapperDirective<OidcEntry> {\n constructor() {\n super({\n componentClass: DbxFirebaseOidcEntryGrantListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}\n\n@Component({\n selector: 'dbx-firebase-oidc-grant-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n providers: provideDbxListView(DbxFirebaseOidcEntryGrantListViewComponent),\n standalone: true,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryGrantListViewComponent extends AbstractDbxSelectionListViewDirective<OidcEntry> {\n readonly config: DbxSelectionValueListViewConfig<OidcEntry & { key: string; itemValue: OidcEntry }> = {\n componentClass: DbxFirebaseOidcEntryGrantListViewItemComponent,\n mapValuesToItemValues: (x) =>\n of(\n x.map((y, i) => {\n const id = (y as unknown as DocumentDataWithIdAndKey<OidcEntry>).id;\n return { ...y, key: id ?? `grant_${i}`, itemValue: y };\n })\n )\n };\n}\n\n// MARK: Item\n/**\n * Per-row view for a Grant entry. Inline \"Revoke\" button uses a per-component\n * {@link OidcEntryDocumentStore} keyed to this entry's id so calling\n * `deleteToken` invokes the {@link DeleteOidcTokenParams} callModel against\n * the right document.\n */\n@Component({\n selector: 'dbx-firebase-oidc-grant-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded dbx-list-item-padded-thick dbx-list-two-line-item\">\n <div class=\"item-left\">\n <span class=\"item-title\">{{ clientIdSignal() }}</span>\n @if (scopeSignal()) {\n <span class=\"item-details\">{{ scopeSignal() }}</span>\n }\n @if (expiresAtSignal()) {\n <span class=\"item-details-footnote\">Expires {{ expiresAtSignal() | date: 'medium' }}</span>\n }\n </div>\n <dbx-spacer></dbx-spacer>\n <div class=\"item-right\">\n <dbx-button dbxAction [dbxActionHandler]=\"handleRevoke\" [dbxActionConfirm]=\"revokeConfirmConfig\" dbxActionButton text=\"Revoke\" icon=\"block\" color=\"warn\" [raised]=\"true\"></dbx-button>\n </div>\n </div>\n `,\n standalone: true,\n imports: [DatePipe, DbxSpacerDirective, DbxButtonComponent, DbxActionDirective, DbxActionHandlerDirective, DbxActionButtonDirective, DbxActionConfirmDirective],\n providers: [OidcEntryDocumentStore],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryGrantListViewItemComponent extends AbstractDbxValueListViewItemComponent<OidcEntry> {\n readonly oidcEntryDocumentStore = inject(OidcEntryDocumentStore);\n\n readonly clientIdSignal = computed(() => this._payload().clientId ?? '');\n readonly scopeSignal = computed(() => this._payload().openid?.scope ?? null);\n readonly expiresAtSignal = computed(() => this.itemValue.expiresAt ?? null);\n\n readonly revokeConfirmConfig: DbxActionConfirmConfig = {\n title: 'Revoke access',\n prompt: 'This app will lose access to your account immediately. Existing access and refresh tokens stop working.',\n confirmText: 'Revoke'\n };\n\n readonly handleRevoke: WorkUsingContext = (_, context) => {\n context.startWorkingWithLoadingStateObservable(this.oidcEntryDocumentStore.deleteToken({}));\n };\n\n constructor() {\n super();\n const id = (this.itemValue as unknown as DocumentDataWithIdAndKey<OidcEntry>).id;\n\n if (id) {\n this.oidcEntryDocumentStore.setId(id);\n }\n }\n\n private _payload(): Partial<OidcEntryGrantPayloadData> {\n return this.itemValue.payload ?? {};\n }\n}\n","import { OIDC_ENTRY_CLIENT_TYPE, type OidcEntryOAuthClientPayloadData, 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, i) => ({ ...y, key: `oidc_${i}`, 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 Partial<OidcEntryOAuthClientPayloadData>;\n return payload?.client_name || 'OAuth Client';\n }\n\n get clientId(): string {\n const payload = this.entry().payload as Partial<OidcEntryOAuthClientPayloadData>;\n return payload?.client_id || '';\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 { inject, Injectable } from '@angular/core';\nimport { AbstractDbxFirebaseCollectionStore } from '@dereekb/dbx-firebase';\nimport { OidcModelFirestoreCollections, type OidcEntry, type OidcEntryDocument } from '@dereekb/firebase';\n\n/**\n * Collection store for querying {@link OidcEntry} documents.\n */\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/**\n * Directive providing a {@link OidcEntryCollectionStore} for querying {@link OidcEntry} documents.\n */\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 { ChangeDetectionStrategy, Component, inject, type OnInit, viewChild } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\nimport { DbxFirebaseAuthService, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionListDirective } from '@dereekb/dbx-firebase';\nimport { type FirestoreQueryConstraint, oidcGrantEntriesByUidQuery } from '@dereekb/firebase';\nimport { OidcEntryCollectionStoreDirective } from '../store/oidcentry.collection.store.directive';\nimport { DbxFirebaseOidcEntryGrantListComponent } from '../component/oidcentry.grant.list.component';\n\n/**\n * Drop-in container for the \"apps with access to my account\" management UI.\n *\n * Wires a {@link OidcEntryCollectionStoreDirective} to query Grant entries\n * for the signed-in user, then renders {@link DbxFirebaseOidcEntryGrantListComponent}\n * with inline Revoke buttons. No inputs — the container resolves the current\n * user via {@link DbxFirebaseAuthService}.\n */\n@Component({\n selector: 'dbx-firebase-oidc-grant-list-container',\n template: `\n <div dbxOidcEntryCollection dbxFirebaseCollectionChange=\"auto\" [constraints]=\"grantConstraintsSignal()\">\n <dbx-firebase-oidc-grant-list dbxFirebaseCollectionList></dbx-firebase-oidc-grant-list>\n </div>\n `,\n standalone: true,\n imports: [OidcEntryCollectionStoreDirective, DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseOidcEntryGrantListComponent],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOidcEntryGrantListContainerComponent implements OnInit {\n readonly dbxFirebaseAuthService = inject(DbxFirebaseAuthService);\n readonly oidcEntryCollectionStoreDirective = viewChild(OidcEntryCollectionStoreDirective);\n\n readonly grantConstraintsSignal = toSignal<FirestoreQueryConstraint[]>(this.dbxFirebaseAuthService.currentAuthUser$.pipe(map((user) => (user?.uid ? oidcGrantEntriesByUidQuery(user.uid) : []))));\n\n ngOnInit(): void {\n const directive = this.oidcEntryCollectionStoreDirective();\n directive?.setMaxPages(5);\n directive?.setItemsPerPage(20);\n }\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 { DbxFirebaseOidcEntryClientForgeFormComponent, type DbxFirebaseOidcEntryClientFormComponentConfig, type DbxFirebaseOidcModelClientFormValue } from '../component/oidcentry.client.forge.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-forge-form dbxActionForm [config]=\"formConfig\"></dbx-firebase-oidc-client-forge-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, DbxFirebaseOidcEntryClientForgeFormComponent],\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","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, generatePkceCodeVerifier, generatePkceCodeChallenge } 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 { DbxFirebaseOidcEntryClientTestForgeFormComponent, type DbxFirebaseOidcModelClientTestFormValue } from '../component/oidcentry.client.test.forge.form.component';\nimport { type OidcEntryClientTestFormFieldsConfig } from '../component/oidcentry.forge.form';\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 (formConfigSignal()) {\n <dbx-firebase-oidc-client-test-forge-form [dbxFormSource]=\"formTemplate$\" dbxFormSourceMode=\"always\" [config]=\"formConfigSignal()\" (dbxFormValueChange)=\"onFormValueChange($event)\"></dbx-firebase-oidc-client-test-forge-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, DbxFirebaseOidcEntryClientTestForgeFormComponent, 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 /**\n * Scopes the user can pick from. Overrides the service default when provided.\n */\n readonly availableScopes = input<Maybe<OidcScopeDetails[]>>(undefined);\n\n /**\n * Path to the authorization endpoint. Overrides the service default when provided.\n */\n readonly oidcAuthorizationEndpointApiPath = input<Maybe<string>>(undefined);\n\n readonly resolvedAvailableScopesSignal = computed<OidcScopeDetails[]>(() => this.availableScopes() ?? this.oidcConfigService.availableScopes);\n readonly resolvedAuthorizationEndpointPathSignal = 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 formConfigSignal = computed<OidcEntryClientTestFormFieldsConfig>(() => {\n const redirectUris = this.redirectUrisSignal() ?? [];\n const availableScopes = this.resolvedAvailableScopesSignal();\n\n console.log('formConfig:', { redirectUris, availableScopes });\n\n return { redirectUris, availableScopes };\n });\n\n readonly formTemplate$ = this.oidcEntryDocumentStore.data$.pipe(\n map((data) => {\n const payload = data.payload as OidcEntryOAuthClientPayloadData;\n\n const formValue: DbxFirebaseOidcModelClientTestFormValue = {\n client_id: payload?.client_id ?? '',\n redirect_uri: payload?.redirect_uris?.[0] ?? '',\n scopes: ['openid']\n };\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 /**\n * The current form value, updated by the form via dbxFormValueChange.\n */\n readonly formValue = signal<Maybe<DbxFirebaseOidcModelClientTestFormValue>>(undefined);\n\n readonly authorizationUrlSignal = computed(() => {\n const resolvedAuthorizationEndpointPath = this.resolvedAuthorizationEndpointPathSignal();\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 let result: Maybe<string>;\n\n if (!clientId || !codeChallenge || !formValue?.redirect_uri) {\n result = undefined;\n } else {\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 result = `${resolvedAuthorizationEndpointPath}?${params.toString()}`;\n }\n\n return result;\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 void 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 { DbxFirebaseOidcEntryClientForgeFormComponent, type DbxFirebaseOidcEntryClientFormComponentConfig, type DbxFirebaseOidcModelClientUpdateFormValue } from '../component/oidcentry.client.forge.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-forge-form dbxActionForm [dbxFormSource]=\"formTemplate$\" dbxFormSourceMode=\"always\" [config]=\"formConfig\"></dbx-firebase-oidc-client-forge-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, DbxFirebaseOidcEntryClientForgeFormComponent],\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, 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/**\n * Directive providing a {@link OidcEntryDocumentStore} for accessing a single {@link OidcEntry} document.\n */\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 *\n * @param appCollection - The application's Firestore collection that must implement {@link OidcModelFirestoreCollections}.\n * @returns The validated OidcModelFirestoreCollections instance.\n * @throws {Error} When `appCollection` does not expose an `oidcEntryCollection`.\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 *\n * @param config - Configuration specifying the app collection class, OIDC settings, and provider options.\n * @returns EnvironmentProviders for the OIDC module.\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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"}