@dereekb/dbx-firebase 13.10.9 → 13.11.1
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.
|
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { input, computed, output, ChangeDetectionStrategy, Component, inject, Injectable, signal, effect, Directive, provideAppInitializer, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@dereekb/dbx-web';
|
|
4
4
|
import { DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent, DbxAvatarComponent, DbxLoadingComponent, DbxButtonSpacerDirective, AbstractDbxSelectionListWrapperDirective, DbxListWrapperComponentImportsModule, provideDbxListViewWrapper, DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, AbstractDbxSelectionListViewDirective, DbxSelectionValueListViewComponentImportsModule, provideDbxListView, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, AbstractDbxValueListViewItemComponent, DbxActionSnackbarErrorDirective, DbxContentPitDirective, DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxActionConfirmDirective } from '@dereekb/dbx-web';
|
|
5
|
-
import { readableError, SPACE_STRING_SPLIT_JOIN, separateValues } from '@dereekb/util';
|
|
5
|
+
import { readableError, SPACE_STRING_SPLIT_JOIN, separateValues, generatePkceCodeVerifier, generatePkceCodeChallenge } from '@dereekb/util';
|
|
6
6
|
import { DbxInjectionComponent, DBX_INJECTION_COMPONENT_DATA, DbxRouterService, dbxRouteParamReaderInstance, completeOnDestroy, DbxActionDirective, DbxActionEnforceModifiedDirective, DbxActionHandlerDirective, DbxActionButtonDirective, DbxAppAuthRouterService } from '@dereekb/dbx-core';
|
|
7
7
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
8
8
|
import { DbxFirebaseAuthService, AbstractDbxFirebaseDocumentStore, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreUpdateFunction, firebaseDocumentStoreDeleteFunction, AbstractDbxFirebaseCollectionStore, DbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionStoreDirective, DbxFirebaseDocumentStoreDirective, provideDbxFirebaseDocumentStoreDirective } from '@dereekb/dbx-firebase';
|
|
@@ -11,6 +11,7 @@ import { first, switchMap, of, map, BehaviorSubject, tap } from 'rxjs';
|
|
|
11
11
|
import * as i1 from '@dereekb/dbx-form';
|
|
12
12
|
import { dbxForgeValueSelectionField, dbxForgeTextField, dbxForgeSearchableStringChipField, isWebsiteUrlValidator, dbxForgeContainer, dbxForgePickableChipField, pickableValueFieldValuesConfigForStaticLabeledValues, AbstractConfigAsyncForgeFormDirective, DbxForgeFormComponentImportsModule, dbxForgeFormComponentProviders, DBX_FORGE_FORM_COMPONENT_TEMPLATE, DbxActionFormDirective, DbxFormSourceDirective, DbxFormValueChangeDirective } from '@dereekb/dbx-form';
|
|
13
13
|
import { ALL_OIDC_TOKEN_ENDPOINT_AUTH_METHOD_OPTIONS, PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD, OIDC_ENTRY_CLIENT_TYPE, OidcModelFunctions, OidcModelFirestoreCollections } from '@dereekb/firebase';
|
|
14
|
+
import { tapLog } from '@dereekb/rxjs';
|
|
14
15
|
import { CommonModule } from '@angular/common';
|
|
15
16
|
|
|
16
17
|
/**
|
|
@@ -729,7 +730,17 @@ function oidcClientJwksUriForgeField() {
|
|
|
729
730
|
key: 'jwks_uri',
|
|
730
731
|
label: 'JWKS URI',
|
|
731
732
|
hint: "URL where the client's public JSON Web Key Set can be fetched. Required for private_key_jwt authentication.",
|
|
732
|
-
|
|
733
|
+
logic: [
|
|
734
|
+
{
|
|
735
|
+
type: 'required',
|
|
736
|
+
condition: {
|
|
737
|
+
type: 'fieldValue',
|
|
738
|
+
fieldPath: 'token_endpoint_auth_method',
|
|
739
|
+
operator: 'equals',
|
|
740
|
+
value: PRIVATE_KEY_JWT_TOKEN_ENDPOINT_AUTH_METHOD
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
]
|
|
733
744
|
})
|
|
734
745
|
],
|
|
735
746
|
logic: [
|
|
@@ -866,12 +877,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
|
|
|
866
877
|
* Displays read-only client_id, a redirect URI selector, and scope picker.
|
|
867
878
|
*/
|
|
868
879
|
class DbxFirebaseOidcEntryClientTestForgeFormComponent extends AbstractConfigAsyncForgeFormDirective {
|
|
869
|
-
formConfig$ = this.currentConfig$.pipe(map((config) =>
|
|
870
|
-
if (!config) {
|
|
871
|
-
return undefined;
|
|
872
|
-
}
|
|
873
|
-
return oidcEntryClientTestForgeFormFields(config);
|
|
874
|
-
}));
|
|
880
|
+
formConfig$ = this.currentConfig$.pipe(map((config) => (config ? oidcEntryClientTestForgeFormFields(config) : undefined)), tapLog('config'));
|
|
875
881
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: DbxFirebaseOidcEntryClientTestForgeFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
876
882
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: DbxFirebaseOidcEntryClientTestForgeFormComponent, isStandalone: true, selector: "dbx-firebase-oidc-client-test-forge-form", providers: dbxForgeFormComponentProviders(), usesInheritance: true, ngImport: i0, template: "<dbx-forge></dbx-forge>", isInline: true, dependencies: [{ kind: "ngmodule", type: DbxForgeFormComponentImportsModule }, { kind: "component", type: i1.DbxForgeFormComponent, selector: "dbx-forge" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
877
883
|
}
|
|
@@ -1094,33 +1100,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
|
|
|
1094
1100
|
}]
|
|
1095
1101
|
}], propDecorators: { createClientOwnerTarget: [{ type: i0.Input, args: [{ isSignal: true, alias: "createClientOwnerTarget", required: false }] }], clientCreated: [{ type: i0.Output, args: ["clientCreated"] }] } });
|
|
1096
1102
|
|
|
1097
|
-
/**
|
|
1098
|
-
* Generates a random PKCE code verifier string (43 characters, base64url-encoded).
|
|
1099
|
-
*
|
|
1100
|
-
* @returns A cryptographically random base64url string suitable for use as a PKCE code_verifier.
|
|
1101
|
-
*/
|
|
1102
|
-
function generatePkceCodeVerifier() {
|
|
1103
|
-
const bytes = new Uint8Array(32);
|
|
1104
|
-
crypto.getRandomValues(bytes);
|
|
1105
|
-
return base64UrlEncode(bytes);
|
|
1106
|
-
}
|
|
1107
|
-
/**
|
|
1108
|
-
* Generates a PKCE code challenge from a code verifier using SHA-256.
|
|
1109
|
-
*
|
|
1110
|
-
* @param verifier - The code verifier string to hash
|
|
1111
|
-
* @returns A base64url-encoded SHA-256 hash of the verifier
|
|
1112
|
-
*/
|
|
1113
|
-
async function generatePkceCodeChallenge(verifier) {
|
|
1114
|
-
const encoder = new TextEncoder();
|
|
1115
|
-
const data = encoder.encode(verifier);
|
|
1116
|
-
const digest = await crypto.subtle.digest('SHA-256', data);
|
|
1117
|
-
return base64UrlEncode(new Uint8Array(digest));
|
|
1118
|
-
}
|
|
1119
|
-
function base64UrlEncode(bytes) {
|
|
1120
|
-
const binString = Array.from(bytes, (byte) => String.fromCharCode(byte)).join('');
|
|
1121
|
-
return btoa(binString).replaceAll('+', '-').replaceAll('/', '_').replace(/=+$/, '');
|
|
1122
|
-
}
|
|
1123
|
-
|
|
1124
1103
|
/**
|
|
1125
1104
|
* Container component for testing an OAuth authorization flow against a registered client.
|
|
1126
1105
|
*
|
|
@@ -1145,12 +1124,10 @@ class DbxFirebaseOidcEntryClientTestComponent {
|
|
|
1145
1124
|
clientIdSignal = toSignal(this.oidcEntryDocumentStore.data$.pipe(map((data) => data.payload?.client_id)));
|
|
1146
1125
|
// MARK: Form Config
|
|
1147
1126
|
formConfig = computed(() => {
|
|
1148
|
-
const redirectUris = this.redirectUrisSignal();
|
|
1127
|
+
const redirectUris = this.redirectUrisSignal() ?? [];
|
|
1149
1128
|
const availableScopes = this.resolvedAvailableScopes();
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
}
|
|
1153
|
-
return undefined;
|
|
1129
|
+
console.log('formConfig:', { redirectUris, availableScopes });
|
|
1130
|
+
return { redirectUris, availableScopes };
|
|
1154
1131
|
}, ...(ngDevMode ? [{ debugName: "formConfig" }] : /* istanbul ignore next */ []));
|
|
1155
1132
|
formTemplate$ = this.oidcEntryDocumentStore.data$.pipe(map((data) => {
|
|
1156
1133
|
const payload = data.payload;
|
|
@@ -1302,7 +1279,7 @@ class DbxFirebaseOidcEntryClientUpdateComponent {
|
|
|
1302
1279
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: DbxFirebaseOidcEntryClientUpdateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1303
1280
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: DbxFirebaseOidcEntryClientUpdateComponent, isStandalone: true, selector: "dbx-firebase-oidc-entry-client-update", ngImport: i0, template: `
|
|
1304
1281
|
<div dbxAction dbxActionEnforceModified [dbxActionHandler]="handleUpdateClient" dbxActionSnackbarError>
|
|
1305
|
-
<dbx-firebase-oidc-client-forge-form dbxActionForm [dbxFormSource]="formTemplate$" [config]="formConfig"></dbx-firebase-oidc-client-forge-form>
|
|
1282
|
+
<dbx-firebase-oidc-client-forge-form dbxActionForm [dbxFormSource]="formTemplate$" dbxFormSourceMode="always" [config]="formConfig"></dbx-firebase-oidc-client-forge-form>
|
|
1306
1283
|
<dbx-button [raised]="true" dbxActionButton text="Save"></dbx-button>
|
|
1307
1284
|
</div>
|
|
1308
1285
|
`, isInline: true, dependencies: [{ kind: "directive", type: DbxActionSnackbarErrorDirective, selector: "[dbxActionSnackbarError]", inputs: ["dbxActionSnackbarError"] }, { kind: "directive", type: DbxActionDirective, selector: "dbx-action,[dbxAction]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: DbxActionEnforceModifiedDirective, selector: "[dbxActionEnforceModified]", inputs: ["dbxActionEnforceModified"] }, { kind: "directive", type: DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: DbxActionFormDirective, selector: "[dbxActionForm]", inputs: ["dbxActionFormDisabledOnWorking", "dbxActionFormIsValid", "dbxActionFormIsEqual", "dbxActionFormIsModified", "dbxActionFormMapValue"] }, { kind: "directive", type: DbxFormSourceDirective, selector: "[dbxFormSource]", inputs: ["dbxFormSourceMode", "dbxFormSource"] }, { kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "tonal", "raised", "stroked", "flat", "iconOnly", "fab", "customContent", "allowClickPropagation", "mode"] }, { kind: "directive", type: DbxActionButtonDirective, selector: "[dbxActionButton]", inputs: ["dbxActionButtonEcho"] }, { kind: "component", type: DbxFirebaseOidcEntryClientForgeFormComponent, selector: "dbx-firebase-oidc-client-forge-form" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -1313,7 +1290,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
|
|
|
1313
1290
|
selector: 'dbx-firebase-oidc-entry-client-update',
|
|
1314
1291
|
template: `
|
|
1315
1292
|
<div dbxAction dbxActionEnforceModified [dbxActionHandler]="handleUpdateClient" dbxActionSnackbarError>
|
|
1316
|
-
<dbx-firebase-oidc-client-forge-form dbxActionForm [dbxFormSource]="formTemplate$" [config]="formConfig"></dbx-firebase-oidc-client-forge-form>
|
|
1293
|
+
<dbx-firebase-oidc-client-forge-form dbxActionForm [dbxFormSource]="formTemplate$" dbxFormSourceMode="always" [config]="formConfig"></dbx-firebase-oidc-client-forge-form>
|
|
1317
1294
|
<dbx-button [raised]="true" dbxActionButton text="Save"></dbx-button>
|
|
1318
1295
|
</div>
|
|
1319
1296
|
`,
|
|
@@ -1489,5 +1466,5 @@ function provideDbxFirebaseOidc(config) {
|
|
|
1489
1466
|
* Generated bundle index. Do not edit.
|
|
1490
1467
|
*/
|
|
1491
1468
|
|
|
1492
|
-
export { AbstractDbxFirebaseOAuthConsentScopeViewComponent, DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY, DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, DbxFirebaseOAuthConsentScopeDefaultViewComponent, DbxFirebaseOAuthConsentScopeListComponent, DbxFirebaseOAuthConsentViewComponent, DbxFirebaseOAuthLoginComponent, DbxFirebaseOAuthLoginViewComponent, DbxFirebaseOidcConfig, DbxFirebaseOidcConfigService, DbxFirebaseOidcEntryClientCreateComponent, DbxFirebaseOidcEntryClientForgeFormComponent, DbxFirebaseOidcEntryClientListComponent, DbxFirebaseOidcEntryClientListViewComponent, DbxFirebaseOidcEntryClientListViewItemClientComponent, DbxFirebaseOidcEntryClientListViewItemComponent, DbxFirebaseOidcEntryClientListViewItemDefaultComponent, DbxFirebaseOidcEntryClientTestComponent, DbxFirebaseOidcEntryClientTestForgeFormComponent, DbxFirebaseOidcEntryClientUpdateComponent, DbxFirebaseOidcEntryClientViewComponent, DbxFirebaseOidcInteractionService, DbxOAuthConsentComponent, OidcEntryCollectionStore, OidcEntryCollectionStoreDirective, OidcEntryDocumentStore, OidcEntryDocumentStoreDirective,
|
|
1469
|
+
export { AbstractDbxFirebaseOAuthConsentScopeViewComponent, DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY, DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, DbxFirebaseOAuthConsentScopeDefaultViewComponent, DbxFirebaseOAuthConsentScopeListComponent, DbxFirebaseOAuthConsentViewComponent, DbxFirebaseOAuthLoginComponent, DbxFirebaseOAuthLoginViewComponent, DbxFirebaseOidcConfig, DbxFirebaseOidcConfigService, DbxFirebaseOidcEntryClientCreateComponent, DbxFirebaseOidcEntryClientForgeFormComponent, DbxFirebaseOidcEntryClientListComponent, DbxFirebaseOidcEntryClientListViewComponent, DbxFirebaseOidcEntryClientListViewItemClientComponent, DbxFirebaseOidcEntryClientListViewItemComponent, DbxFirebaseOidcEntryClientListViewItemDefaultComponent, DbxFirebaseOidcEntryClientTestComponent, DbxFirebaseOidcEntryClientTestForgeFormComponent, DbxFirebaseOidcEntryClientUpdateComponent, DbxFirebaseOidcEntryClientViewComponent, DbxFirebaseOidcInteractionService, DbxOAuthConsentComponent, OidcEntryCollectionStore, OidcEntryCollectionStoreDirective, OidcEntryDocumentStore, OidcEntryDocumentStoreDirective, oidcClientHomepageUriForgeField, oidcClientJwksUriForgeField, oidcClientLogoUriForgeField, oidcClientNameForgeField, oidcClientRedirectUrisForgeField, oidcClientTestClientIdForgeField, oidcClientTestRedirectUriForgeField, oidcClientTestScopesForgeField, oidcClientTokenEndpointAuthMethodForgeField, oidcEntryClientForgeFormFields, oidcEntryClientTestForgeFormFields, oidcEntryClientUpdateForgeFormFields, provideDbxFirebaseOidc, provideOidcModelFirestoreCollections };
|
|
1493
1470
|
//# sourceMappingURL=dereekb-dbx-firebase-oidc.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dereekb-dbx-firebase-oidc.mjs","sources":["../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.login.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.list.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/service/oidc.configuration.service.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/components/oauth.consent.scope.default.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/service/oidc.interaction.service.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/containers/oauth.login.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/interaction/containers/oauth.consent.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/component/oidcentry.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/component/oidcentry.list.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.create.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/util/pkce.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.test.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.update.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.collection.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.collection.store.directive.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.directive.ts","../../../../packages/dbx-firebase/oidc/src/lib/oidc.providers.ts","../../../../packages/dbx-firebase/oidc/src/lib/index.ts","../../../../packages/dbx-firebase/oidc/src/dereekb-dbx-firebase-oidc.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent } from '@dereekb/dbx-web';\nimport { type ErrorInput, type Maybe, readableError } from '@dereekb/util';\n\n/**\n * State cases for the OIDC login interaction flow.\n */\nexport type OidcLoginStateCase = 'no_user' | 'user' | 'submitting' | 'error';\n\n/**\n * Presentational component for the OIDC OAuth login interaction.\n *\n * Renders the login UI based on the current state case. Supports ng-content\n * projection to allow apps to provide a custom login view for the `'no_user'` state,\n * falling back to the default `<dbx-firebase-login>` component.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-login-view [loginStateCase]=\"'no_user'\">\n * <my-custom-login />\n * </dbx-firebase-oauth-login-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-login-view',\n standalone: true,\n imports: [DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent],\n template: `\n <div class=\"dbx-firebase-oauth-login-view\">\n @switch (loginStateCase()) {\n @case ('no_user') {\n <ng-content></ng-content>\n }\n @case ('user') {\n <dbx-basic-loading [loading]=\"true\" text=\"Signing in...\"></dbx-basic-loading>\n }\n @case ('submitting') {\n <dbx-basic-loading [loading]=\"true\" text=\"Submitting authentication...\"></dbx-basic-loading>\n }\n @case ('error') {\n <dbx-button text=\"Retry\" [raised]=\"true\" (buttonClick)=\"retryClick.emit()\"></dbx-button>\n <dbx-error [error]=\"resolvedError()\"></dbx-error>\n }\n }\n </div>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-login-view'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthLoginViewComponent {\n readonly loginStateCase = input.required<OidcLoginStateCase>();\n readonly error = input<Maybe<string | ErrorInput>>();\n\n readonly resolvedError = computed<Maybe<ErrorInput>>(() => {\n const error = this.error();\n return typeof error === 'string' ? readableError('ERROR', error) : error;\n });\n\n readonly retryClick = output<void>();\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAvatarComponent, DbxButtonComponent, DbxButtonSpacerDirective, DbxErrorComponent, DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { type ErrorInput, type Maybe, readableError, SPACE_STRING_SPLIT_JOIN } from '@dereekb/util';\nimport { type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type DbxFirebaseOAuthConsentScopesViewData } from './oauth.consent.scope.view.component';\n\n/**\n * Presentational component for the OIDC OAuth consent screen.\n *\n * Accepts an `OAuthInteractionLoginDetails` input that contains all client and scope\n * information. Renders the client name, logo, client URL, scopes (via `<dbx-injection>`),\n * error/loading states, and approve/deny action buttons.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-view\n * [details]=\"loginDetails\"\n * [loading]=\"false\"\n * [scopeInjectionConfig]=\"scopeConfig\"\n * (approveClick)=\"onApprove()\"\n * (denyClick)=\"onDeny()\">\n * </dbx-firebase-oauth-consent-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-view',\n standalone: true,\n imports: [DbxInjectionComponent, DbxAvatarComponent, DbxLoadingComponent, DbxErrorComponent, DbxButtonComponent, DbxButtonSpacerDirective],\n styleUrls: ['./oauth.consent.view.component.scss'],\n template: `\n <div class=\"dbx-firebase-oauth-consent-view\">\n @if (loading()) {\n <dbx-loading [loading]=\"true\" text=\"Processing...\"></dbx-loading>\n } @else {\n <div class=\"dbx-firebase-oauth-consent-header\">\n @if (clientName()) {\n <h2>You're signing in to {{ clientName() }}</h2>\n }\n <div class=\"dbx-firebase-oauth-consent-header-info dbx-flex\">\n <dbx-avatar [avatarUrl]=\"logoUri()\" [avatarStyle]=\"'square'\" avatarIcon=\"apps\"></dbx-avatar>\n <span>\n @if (clientUri()) {\n <a class=\"dbx-firebase-oauth-consent-client-uri\" [href]=\"clientUri()\" target=\"_blank\" rel=\"noopener noreferrer\">{{ clientUri() }}</a>\n }\n </span>\n </div>\n </div>\n <dbx-injection [config]=\"resolvedScopeInjectionConfig()\"></dbx-injection>\n <div class=\"dbx-pt3 dbx-pb3 dbx-firebase-oauth-consent-actions\">\n <dbx-button text=\"Approve\" [raised]=\"true\" color=\"primary\" (buttonClick)=\"approveClick.emit()\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button text=\"Deny\" [flat]=\"true\" color=\"warn\" (buttonClick)=\"denyClick.emit()\"></dbx-button>\n </div>\n @if (resolvedError()) {\n <dbx-error [error]=\"resolvedError()\"></dbx-error>\n }\n }\n </div>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-consent-view'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentViewComponent {\n readonly details = input<Maybe<OAuthInteractionLoginDetails>>();\n readonly loading = input<boolean>(false);\n readonly error = input<Maybe<string | ErrorInput>>();\n readonly scopeInjectionConfig = input.required<DbxInjectionComponentConfig>();\n\n readonly clientName = computed(() => this.details()?.client_name ?? '');\n readonly clientUri = computed(() => this.details()?.client_uri);\n readonly logoUri = computed(() => this.details()?.logo_uri);\n readonly scopes = computed<OidcScope[]>(() => SPACE_STRING_SPLIT_JOIN.splitStrings(this.details()?.scopes ?? ''));\n\n readonly resolvedError = computed<Maybe<ErrorInput>>(() => {\n const error = this.error();\n return typeof error === 'string' ? readableError('ERROR', error) : error;\n });\n\n readonly approveClick = output<void>();\n readonly denyClick = output<void>();\n\n readonly resolvedScopeInjectionConfig = computed<DbxInjectionComponentConfig>(() => {\n const data: DbxFirebaseOAuthConsentScopesViewData = {\n details: this.details(),\n scopes: this.scopes(),\n clientName: this.clientName()\n };\n\n return { ...this.scopeInjectionConfig(), data };\n });\n}\n","import { computed, inject } from '@angular/core';\nimport { DBX_INJECTION_COMPONENT_DATA } from '@dereekb/dbx-core';\nimport { type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\n\n/**\n * Data provided to consent scope view components via the `DBX_INJECTION_COMPONENT_DATA` token.\n *\n * Contains the scopes being requested and contextual information about the consent interaction.\n */\nexport interface DbxFirebaseOAuthConsentScopesViewData {\n readonly details?: Maybe<OAuthInteractionLoginDetails>;\n readonly scopes: OidcScope[];\n readonly clientName: string;\n}\n\n/**\n * Abstract base class for consent scope view components.\n *\n * Provides typed access to the `DbxFirebaseOAuthConsentScopesViewData` injected\n * via `DBX_INJECTION_COMPONENT_DATA`. Subclasses only need to define a template.\n *\n * @example\n * ```typescript\n * @Component({ template: `...` })\n * export class MyCustomScopesViewComponent extends AbstractDbxFirebaseOAuthConsentScopeViewComponent {}\n * ```\n */\nexport abstract class AbstractDbxFirebaseOAuthConsentScopeViewComponent {\n private readonly data = inject<DbxFirebaseOAuthConsentScopesViewData>(DBX_INJECTION_COMPONENT_DATA);\n\n readonly details = computed(() => this.data?.details);\n readonly scopes = computed(() => this.data?.scopes ?? []);\n readonly clientName = computed(() => this.data?.clientName ?? '');\n readonly clientUri = computed(() => this.data?.details?.client_uri);\n readonly logoUri = computed(() => this.data?.details?.logo_uri);\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\n\n/**\n * Standalone presentational component that renders a list of OAuth consent scopes.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-scope-list [scopes]=\"mappedScopes\"></dbx-firebase-oauth-consent-scope-list>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-list',\n standalone: true,\n styleUrls: ['./oauth.consent.scope.list.component.scss'],\n template: `\n @for (scope of scopes(); track scope.name) {\n <div class=\"dbx-firebase-oauth-consent-scope-list-item dbx-mb2\">\n <span class=\"dbx-firebase-oauth-consent-scope-name dbx-pb2\">{{ scope.name }}</span>\n @if (scope.description) {\n <span class=\"dbx-firebase-oauth-consent-scope-description\">{{ scope.description }}</span>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeListComponent {\n readonly scopes = input<OAuthConsentScope[]>([]);\n}\n","import { Injectable, inject, type Type } from '@angular/core';\nimport { type SegueRefOrSegueRefRouterLink } from '@dereekb/dbx-core';\nimport { type Maybe } from '@dereekb/util';\nimport { type OidcScopeDetails, type OidcTokenEndpointAuthMethod } from '@dereekb/firebase';\nimport { type AbstractDbxFirebaseOAuthConsentScopeViewComponent } from '../interaction/components/oauth.consent.scope.view.component';\n\nexport const DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH = '/oidc/auth';\nexport const DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH = '/interaction';\nexport const DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY = 'uid';\nexport const DEFAULT_OIDC_CLIENT_ID_PARAM_KEY = 'client_id';\nexport const DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY = 'client_name';\nexport const DEFAULT_OIDC_CLIENT_URI_PARAM_KEY = 'client_uri';\nexport const DEFAULT_OIDC_LOGO_URI_PARAM_KEY = 'logo_uri';\nexport const DEFAULT_OIDC_SCOPES_PARAM_KEY = 'scopes';\nexport const DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS: OidcTokenEndpointAuthMethod[] = ['client_secret_post', 'client_secret_basic'];\n\n/**\n * Abstract configuration class used as a DI token for app-level OIDC settings.\n *\n * Apps provide a concrete implementation via `provideDbxFirebaseOidc()`.\n */\nexport abstract class DbxFirebaseOidcConfig {\n /**\n * Available scopes for the OIDC provider. Used in scope picker fields.\n */\n abstract readonly availableScopes: OidcScopeDetails[];\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 return this.config.oidcAuthorizationEndpointApiPath ?? DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH;\n }\n\n get oidcInteractionEndpointApiPath(): string {\n return this.config.oidcInteractionEndpointApiPath ?? DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH;\n }\n\n get tokenEndpointAuthMethods(): OidcTokenEndpointAuthMethod[] {\n return this.config.tokenEndpointAuthMethods ?? DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS;\n }\n\n get oauthInteractionRoute(): Maybe<SegueRefOrSegueRefRouterLink> {\n return this.config.oauthInteractionRoute;\n }\n\n get consentScopeListViewClass(): Maybe<Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>> {\n return this.config.consentScopeListViewClass;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { AbstractDbxFirebaseOAuthConsentScopeViewComponent } from './oauth.consent.scope.view.component';\nimport { DbxFirebaseOAuthConsentScopeListComponent } from './oauth.consent.scope.list.component';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\nimport { DbxFirebaseOidcConfigService } from '../../service/oidc.configuration.service';\nimport { separateValues } from '@dereekb/util';\n\n/**\n * Default consent scope view component that maps scope names to descriptions\n * using the `OidcScopeDetails` from the app-level OIDC configuration.\n *\n * Apps can override this by providing a custom `consentScopeListViewClass`\n * in `DbxFirebaseOidcConfig` or `DbxOAuthConsentComponentConfig`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-default-view',\n standalone: true,\n imports: [DbxFirebaseOAuthConsentScopeListComponent],\n template: `\n <p>\n <strong>{{ clientName() }}</strong>\n is requesting these permissions:\n </p>\n <dbx-firebase-oauth-consent-scope-list [scopes]=\"mappedScopes()\"></dbx-firebase-oauth-consent-scope-list>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeDefaultViewComponent extends AbstractDbxFirebaseOAuthConsentScopeViewComponent {\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n readonly mappedScopes = computed<OAuthConsentScope[]>(() => {\n const availableScopes = this.oidcConfigService.availableScopes;\n const availableScopeValues = new Set(availableScopes.map((s) => s.value));\n const { included: knownScopes, excluded: unknownScopes } = separateValues(this.scopes(), (name) => availableScopeValues.has(name));\n\n return [\n ...knownScopes.map((name) => {\n const details = availableScopes.find((s) => s.value === name);\n return { name, description: details?.description ?? '' };\n }),\n ...unknownScopes.map((name) => ({ name, description: 'unknown' }))\n ];\n });\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { type Observable, switchMap, first } from 'rxjs';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { DbxFirebaseOidcConfigService } from './oidc.configuration.service';\nimport { type OAuthInteractionLoginRequest, type OAuthInteractionConsentRequest, type OidcInteractionUid, type OAuthInteractionLoginResponse, type OAuthInteractionConsentResponse } from '@dereekb/firebase';\n\n// MARK: Service\n/**\n * Service for communicating with the backend OIDC interaction endpoints.\n *\n * Automatically includes the current user's Firebase Auth ID token\n * with each request for server-side verification.\n *\n * After successful login/consent submission, the server returns a redirect URL.\n * The component is responsible for navigating to it (e.g., via `window.location.href`).\n */\n@Injectable({ providedIn: 'root' })\nexport class DbxFirebaseOidcInteractionService {\n private readonly http = inject(HttpClient);\n private readonly _authService = inject(DbxFirebaseAuthService);\n private readonly _oidcConfig = inject(DbxFirebaseOidcConfigService);\n\n /**\n * Base URL for the interaction API, derived from the OIDC config service.\n *\n * @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.\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 * @returns Observable that emits the redirect URL from the server response.\n */\n submitConsent(uid: OidcInteractionUid, approved: boolean): Observable<OAuthInteractionConsentResponse> {\n return this._authService.idTokenString$.pipe(\n first(),\n switchMap((idToken) => this.http.post<OAuthInteractionConsentResponse>(`${this.baseUrl}/${uid}/consent`, { idToken, approved } as OAuthInteractionConsentRequest))\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, computed, signal, effect, type OnDestroy, type Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { DbxFirebaseOidcInteractionService } from '../../service/oidc.interaction.service';\nimport { DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY } from '../../service/oidc.configuration.service';\nimport { type OidcInteractionUid } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { type OidcLoginStateCase, DbxFirebaseOAuthLoginViewComponent } from '../components/oauth.login.view.component';\n\n/**\n * Container component for the OIDC OAuth login interaction flow.\n *\n * Manages all state: route param reading, Firebase Auth observation, ID token\n * submission, and error handling. Delegates visual rendering to\n * `DbxFirebaseOAuthLoginViewComponent`.\n *\n * Supports ng-content projection — any content provided is passed through to\n * the view component, replacing the default `<dbx-firebase-login>` for the\n * `'no_user'` state.\n *\n * Usage: Route to this component with `?uid=<interaction-uid>` query param.\n */\n@Component({\n selector: 'dbx-firebase-oauth-login',\n standalone: true,\n imports: [DbxFirebaseOAuthLoginViewComponent],\n template: `\n <dbx-firebase-oauth-login-view [loginStateCase]=\"loginStateCase()\" [error]=\"errorMessage()\" (retryClick)=\"retry()\">\n <ng-content />\n </dbx-firebase-oauth-login-view>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-login'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthLoginComponent implements OnDestroy {\n private readonly dbxRouterService = inject(DbxRouterService);\n private readonly dbxFirebaseAuthService = inject(DbxFirebaseAuthService);\n private readonly interactionService = inject(DbxFirebaseOidcInteractionService);\n readonly uidParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY);\n\n readonly interactionUid: Signal<Maybe<OidcInteractionUid>> = toSignal(this.uidParamReader.value$);\n readonly isLoggedIn = toSignal(this.dbxFirebaseAuthService.isLoggedIn$, { initialValue: false });\n\n readonly submitting = signal(false);\n readonly errorMessage = signal<string | null>(null);\n\n readonly loginStateCase = computed<OidcLoginStateCase>(() => {\n if (this.submitting()) {\n return 'submitting';\n }\n\n if (this.errorMessage()) {\n return 'error';\n }\n\n if (!this.isLoggedIn()) {\n return 'no_user';\n }\n\n return 'user';\n });\n\n constructor() {\n // Auto-submit when user is logged in\n effect(() => {\n if (this.loginStateCase() === 'user') {\n this._submitIdToken();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.uidParamReader.destroy();\n }\n\n retry(): void {\n this.errorMessage.set(null);\n this._submitIdToken();\n }\n\n private _submitIdToken(): void {\n const uid = this.interactionUid();\n\n if (!uid) {\n this.errorMessage.set('Missing interaction UID from route parameters.');\n return;\n }\n\n this.submitting.set(true);\n this.errorMessage.set(null);\n\n this.interactionService.submitLogin(uid).subscribe({\n next: (response) => {\n this.submitting.set(false);\n\n if (response.redirectTo) {\n window.location.href = response.redirectTo;\n }\n },\n error: () => {\n this.submitting.set(false);\n this.errorMessage.set('Failed to complete login. Please try again.');\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input, computed, signal, type OnDestroy, type Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxFirebaseOidcInteractionService } from '../../service/oidc.interaction.service';\nimport { DbxFirebaseOidcConfigService, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY } from '../../service/oidc.configuration.service';\nimport { type OAuthInteractionLoginDetails } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxFirebaseOAuthConsentViewComponent } from '../components/oauth.consent.view.component';\nimport { type AbstractDbxFirebaseOAuthConsentScopeViewComponent } from '../components/oauth.consent.scope.view.component';\nimport { DbxFirebaseOAuthConsentScopeDefaultViewComponent } from '../components/oauth.consent.scope.default.view.component';\n\n/**\n * Configuration for `DbxOAuthConsentComponent`.\n */\nexport interface DbxOAuthConsentComponentConfig {\n /**\n * Component class for rendering the consent scope list.\n *\n * When not provided, falls back to the class configured in `DbxFirebaseOidcConfig`,\n * which itself defaults to `DbxFirebaseOAuthConsentScopeDefaultViewComponent`.\n */\n readonly consentScopeListViewClass?: Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>;\n}\n\n/**\n * Container component for the OIDC OAuth consent screen.\n *\n * Manages all state: route param reading, consent submission, and error handling.\n * Delegates visual rendering to `DbxFirebaseOAuthConsentViewComponent`.\n *\n * Reads interaction UID and client details from route params (populated by\n * the server redirect), then assembles them into `OAuthInteractionLoginDetails`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent',\n standalone: true,\n imports: [DbxFirebaseOAuthConsentViewComponent],\n template: `\n <dbx-firebase-oauth-consent-view [details]=\"resolvedDetails()\" [loading]=\"loading()\" [error]=\"error()\" [scopeInjectionConfig]=\"scopeInjectionConfig()\" (approveClick)=\"approve()\" (denyClick)=\"deny()\"></dbx-firebase-oauth-consent-view>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-consent'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxOAuthConsentComponent implements OnDestroy {\n private readonly dbxRouterService = inject(DbxRouterService);\n private readonly interactionService = inject(DbxFirebaseOidcInteractionService);\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n // Config input\n readonly config = input<Maybe<DbxOAuthConsentComponentConfig>>();\n\n // Route param readers\n readonly interactionUidParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY);\n readonly clientIdParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY);\n readonly clientNameParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY);\n readonly clientUriParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY);\n readonly logoUriParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_LOGO_URI_PARAM_KEY);\n readonly scopesParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_SCOPES_PARAM_KEY);\n\n // Signals from route params\n private readonly routeUid = toSignal(this.interactionUidParamReader.value$);\n private readonly routeClientId = toSignal(this.clientIdParamReader.value$);\n private readonly routeClientName = toSignal(this.clientNameParamReader.value$);\n private readonly routeClientUri = toSignal(this.clientUriParamReader.value$);\n private readonly routeLogoUri = toSignal(this.logoUriParamReader.value$);\n private readonly routeScopes = toSignal(this.scopesParamReader.value$);\n\n // Resolved values\n readonly resolvedInteractionUid = computed(() => this.routeUid());\n readonly resolvedDetails = computed<Maybe<OAuthInteractionLoginDetails>>(() => {\n const client_id = this.routeClientId() ?? '';\n const client_name = this.routeClientName();\n const client_uri = this.routeClientUri();\n const logo_uri = this.routeLogoUri();\n const scopes = this.routeScopes() ?? '';\n\n return {\n client_id,\n client_name,\n client_uri,\n logo_uri,\n scopes\n };\n });\n\n // Scope injection config: built from the configured scope list view class, falling back to config service, then the default\n readonly scopeInjectionConfig = computed<DbxInjectionComponentConfig>(() => ({\n componentClass: this.config()?.consentScopeListViewClass ?? this.oidcConfigService.consentScopeListViewClass ?? DbxFirebaseOAuthConsentScopeDefaultViewComponent\n }));\n\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n\n ngOnDestroy(): void {\n this.interactionUidParamReader.destroy();\n this.clientIdParamReader.destroy();\n this.clientNameParamReader.destroy();\n this.clientUriParamReader.destroy();\n this.logoUriParamReader.destroy();\n this.scopesParamReader.destroy();\n }\n\n approve(): void {\n this._submitConsent(true);\n }\n\n deny(): void {\n this._submitConsent(false);\n }\n\n private _submitConsent(approved: boolean): void {\n const uid = this.resolvedInteractionUid();\n\n if (!uid) {\n this.error.set('Missing interaction UID');\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n this.interactionService.submitConsent(uid, approved).subscribe({\n next: (response) => {\n this.loading.set(false);\n\n if (response.redirectTo) {\n window.location.href = response.redirectTo;\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set('Failed to process consent. Please try again.');\n }\n });\n }\n}\n","import { 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 required: true\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(\n map((config) => {\n if (!config) {\n return undefined;\n }\n\n return oidcEntryClientTestForgeFormFields(config);\n })\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 { 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","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","/**\n * Generates a random PKCE code verifier string (43 characters, base64url-encoded).\n *\n * @returns A cryptographically random base64url string suitable for use as a PKCE code_verifier.\n */\nexport function generatePkceCodeVerifier(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return base64UrlEncode(bytes);\n}\n\n/**\n * Generates a PKCE code challenge from a code verifier using SHA-256.\n *\n * @param verifier - The code verifier string to hash\n * @returns A base64url-encoded SHA-256 hash of the verifier\n */\nexport async function generatePkceCodeChallenge(verifier: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(verifier);\n const digest = await crypto.subtle.digest('SHA-256', data);\n return base64UrlEncode(new Uint8Array(digest));\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n const binString = Array.from(bytes, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binString).replaceAll('+', '-').replaceAll('/', '_').replace(/=+$/, '');\n}\n","import { ChangeDetectionStrategy, Component, inject, input, signal, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxDetailBlockComponent, DbxClickToCopyTextComponent, DbxContentPitDirective, DbxButtonComponent } from '@dereekb/dbx-web';\nimport { DbxFormSourceDirective, DbxFormValueChangeDirective } from '@dereekb/dbx-form';\nimport { type OidcEntryOAuthClientPayloadData, type OidcScopeDetails } from '@dereekb/firebase';\nimport { OidcEntryDocumentStore } from '../store/oidcentry.document.store';\nimport { DbxFirebaseOidcEntryClientTestForgeFormComponent, type DbxFirebaseOidcModelClientTestFormValue } from '../component/oidcentry.client.test.forge.form.component';\nimport { type OidcEntryClientTestFormFieldsConfig } from '../component/oidcentry.forge.form';\nimport { generatePkceCodeVerifier, generatePkceCodeChallenge } from '../util/pkce';\nimport { DbxFirebaseOidcConfigService } from '../../../service/oidc.configuration.service';\n\n/**\n * Container component for testing an OAuth authorization flow against a registered client.\n *\n * Displays a form with the client's ID, redirect URIs, and scopes,\n * then builds an authorization URL with PKCE parameters that can be opened in a new tab.\n */\n@Component({\n selector: 'dbx-firebase-oidc-entry-client-test',\n template: `\n @if (formConfig()) {\n <dbx-firebase-oidc-client-test-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 | undefined>(() => {\n const redirectUris = this.redirectUrisSignal();\n const availableScopes = this.resolvedAvailableScopes();\n\n if (redirectUris) {\n return { redirectUris, availableScopes };\n }\n\n return undefined;\n });\n\n readonly formTemplate$ = this.oidcEntryDocumentStore.data$.pipe(\n map((data) => {\n const payload = data.payload as OidcEntryOAuthClientPayloadData;\n const formValue: DbxFirebaseOidcModelClientTestFormValue = {\n client_id: payload?.client_id ?? '',\n redirect_uri: payload?.redirect_uris?.[0] ?? '',\n scopes: ['openid']\n };\n return formValue;\n })\n );\n\n // MARK: PKCE\n readonly codeVerifier = signal<string>(generatePkceCodeVerifier());\n readonly codeChallenge = signal<string>('');\n readonly state = signal<string>(generateRandomString());\n readonly nonce = signal<string>(generateRandomString());\n\n /**\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$\" [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, 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 { 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/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/component/oidcentry.list.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.create.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.test.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.update.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/container/oidcentry.client.view.component.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.collection.store.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.collection.store.directive.ts","../../../../packages/dbx-firebase/oidc/src/lib/modules/oidcmodel/store/oidcentry.document.store.directive.ts","../../../../packages/dbx-firebase/oidc/src/lib/oidc.providers.ts","../../../../packages/dbx-firebase/oidc/src/lib/index.ts","../../../../packages/dbx-firebase/oidc/src/dereekb-dbx-firebase-oidc.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent } from '@dereekb/dbx-web';\nimport { type ErrorInput, type Maybe, readableError } from '@dereekb/util';\n\n/**\n * State cases for the OIDC login interaction flow.\n */\nexport type OidcLoginStateCase = 'no_user' | 'user' | 'submitting' | 'error';\n\n/**\n * Presentational component for the OIDC OAuth login interaction.\n *\n * Renders the login UI based on the current state case. Supports ng-content\n * projection to allow apps to provide a custom login view for the `'no_user'` state,\n * falling back to the default `<dbx-firebase-login>` component.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-login-view [loginStateCase]=\"'no_user'\">\n * <my-custom-login />\n * </dbx-firebase-oauth-login-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-login-view',\n standalone: true,\n imports: [DbxBasicLoadingComponent, DbxErrorComponent, DbxButtonComponent],\n template: `\n <div class=\"dbx-firebase-oauth-login-view\">\n @switch (loginStateCase()) {\n @case ('no_user') {\n <ng-content></ng-content>\n }\n @case ('user') {\n <dbx-basic-loading [loading]=\"true\" text=\"Signing in...\"></dbx-basic-loading>\n }\n @case ('submitting') {\n <dbx-basic-loading [loading]=\"true\" text=\"Submitting authentication...\"></dbx-basic-loading>\n }\n @case ('error') {\n <dbx-button text=\"Retry\" [raised]=\"true\" (buttonClick)=\"retryClick.emit()\"></dbx-button>\n <dbx-error [error]=\"resolvedError()\"></dbx-error>\n }\n }\n </div>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-login-view'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthLoginViewComponent {\n readonly loginStateCase = input.required<OidcLoginStateCase>();\n readonly error = input<Maybe<string | ErrorInput>>();\n\n readonly resolvedError = computed<Maybe<ErrorInput>>(() => {\n const error = this.error();\n return typeof error === 'string' ? readableError('ERROR', error) : error;\n });\n\n readonly retryClick = output<void>();\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { DbxInjectionComponent, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxAvatarComponent, DbxButtonComponent, DbxButtonSpacerDirective, DbxErrorComponent, DbxLoadingComponent } from '@dereekb/dbx-web';\nimport { type ErrorInput, type Maybe, readableError, SPACE_STRING_SPLIT_JOIN } from '@dereekb/util';\nimport { type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type DbxFirebaseOAuthConsentScopesViewData } from './oauth.consent.scope.view.component';\n\n/**\n * Presentational component for the OIDC OAuth consent screen.\n *\n * Accepts an `OAuthInteractionLoginDetails` input that contains all client and scope\n * information. Renders the client name, logo, client URL, scopes (via `<dbx-injection>`),\n * error/loading states, and approve/deny action buttons.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-view\n * [details]=\"loginDetails\"\n * [loading]=\"false\"\n * [scopeInjectionConfig]=\"scopeConfig\"\n * (approveClick)=\"onApprove()\"\n * (denyClick)=\"onDeny()\">\n * </dbx-firebase-oauth-consent-view>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-view',\n standalone: true,\n imports: [DbxInjectionComponent, DbxAvatarComponent, DbxLoadingComponent, DbxErrorComponent, DbxButtonComponent, DbxButtonSpacerDirective],\n styleUrls: ['./oauth.consent.view.component.scss'],\n template: `\n <div class=\"dbx-firebase-oauth-consent-view\">\n @if (loading()) {\n <dbx-loading [loading]=\"true\" text=\"Processing...\"></dbx-loading>\n } @else {\n <div class=\"dbx-firebase-oauth-consent-header\">\n @if (clientName()) {\n <h2>You're signing in to {{ clientName() }}</h2>\n }\n <div class=\"dbx-firebase-oauth-consent-header-info dbx-flex\">\n <dbx-avatar [avatarUrl]=\"logoUri()\" [avatarStyle]=\"'square'\" avatarIcon=\"apps\"></dbx-avatar>\n <span>\n @if (clientUri()) {\n <a class=\"dbx-firebase-oauth-consent-client-uri\" [href]=\"clientUri()\" target=\"_blank\" rel=\"noopener noreferrer\">{{ clientUri() }}</a>\n }\n </span>\n </div>\n </div>\n <dbx-injection [config]=\"resolvedScopeInjectionConfig()\"></dbx-injection>\n <div class=\"dbx-pt3 dbx-pb3 dbx-firebase-oauth-consent-actions\">\n <dbx-button text=\"Approve\" [raised]=\"true\" color=\"primary\" (buttonClick)=\"approveClick.emit()\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button text=\"Deny\" [flat]=\"true\" color=\"warn\" (buttonClick)=\"denyClick.emit()\"></dbx-button>\n </div>\n @if (resolvedError()) {\n <dbx-error [error]=\"resolvedError()\"></dbx-error>\n }\n }\n </div>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-consent-view'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentViewComponent {\n readonly details = input<Maybe<OAuthInteractionLoginDetails>>();\n readonly loading = input<boolean>(false);\n readonly error = input<Maybe<string | ErrorInput>>();\n readonly scopeInjectionConfig = input.required<DbxInjectionComponentConfig>();\n\n readonly clientName = computed(() => this.details()?.client_name ?? '');\n readonly clientUri = computed(() => this.details()?.client_uri);\n readonly logoUri = computed(() => this.details()?.logo_uri);\n readonly scopes = computed<OidcScope[]>(() => SPACE_STRING_SPLIT_JOIN.splitStrings(this.details()?.scopes ?? ''));\n\n readonly resolvedError = computed<Maybe<ErrorInput>>(() => {\n const error = this.error();\n return typeof error === 'string' ? readableError('ERROR', error) : error;\n });\n\n readonly approveClick = output<void>();\n readonly denyClick = output<void>();\n\n readonly resolvedScopeInjectionConfig = computed<DbxInjectionComponentConfig>(() => {\n const data: DbxFirebaseOAuthConsentScopesViewData = {\n details: this.details(),\n scopes: this.scopes(),\n clientName: this.clientName()\n };\n\n return { ...this.scopeInjectionConfig(), data };\n });\n}\n","import { computed, inject } from '@angular/core';\nimport { DBX_INJECTION_COMPONENT_DATA } from '@dereekb/dbx-core';\nimport { type OAuthInteractionLoginDetails, type OidcScope } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\n\n/**\n * Data provided to consent scope view components via the `DBX_INJECTION_COMPONENT_DATA` token.\n *\n * Contains the scopes being requested and contextual information about the consent interaction.\n */\nexport interface DbxFirebaseOAuthConsentScopesViewData {\n readonly details?: Maybe<OAuthInteractionLoginDetails>;\n readonly scopes: OidcScope[];\n readonly clientName: string;\n}\n\n/**\n * Abstract base class for consent scope view components.\n *\n * Provides typed access to the `DbxFirebaseOAuthConsentScopesViewData` injected\n * via `DBX_INJECTION_COMPONENT_DATA`. Subclasses only need to define a template.\n *\n * @example\n * ```typescript\n * @Component({ template: `...` })\n * export class MyCustomScopesViewComponent extends AbstractDbxFirebaseOAuthConsentScopeViewComponent {}\n * ```\n */\nexport abstract class AbstractDbxFirebaseOAuthConsentScopeViewComponent {\n private readonly data = inject<DbxFirebaseOAuthConsentScopesViewData>(DBX_INJECTION_COMPONENT_DATA);\n\n readonly details = computed(() => this.data?.details);\n readonly scopes = computed(() => this.data?.scopes ?? []);\n readonly clientName = computed(() => this.data?.clientName ?? '');\n readonly clientUri = computed(() => this.data?.details?.client_uri);\n readonly logoUri = computed(() => this.data?.details?.logo_uri);\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\n\n/**\n * Standalone presentational component that renders a list of OAuth consent scopes.\n *\n * @example\n * ```html\n * <dbx-firebase-oauth-consent-scope-list [scopes]=\"mappedScopes\"></dbx-firebase-oauth-consent-scope-list>\n * ```\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-list',\n standalone: true,\n styleUrls: ['./oauth.consent.scope.list.component.scss'],\n template: `\n @for (scope of scopes(); track scope.name) {\n <div class=\"dbx-firebase-oauth-consent-scope-list-item dbx-mb2\">\n <span class=\"dbx-firebase-oauth-consent-scope-name dbx-pb2\">{{ scope.name }}</span>\n @if (scope.description) {\n <span class=\"dbx-firebase-oauth-consent-scope-description\">{{ scope.description }}</span>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeListComponent {\n readonly scopes = input<OAuthConsentScope[]>([]);\n}\n","import { Injectable, inject, type Type } from '@angular/core';\nimport { type SegueRefOrSegueRefRouterLink } from '@dereekb/dbx-core';\nimport { type Maybe } from '@dereekb/util';\nimport { type OidcScopeDetails, type OidcTokenEndpointAuthMethod } from '@dereekb/firebase';\nimport { type AbstractDbxFirebaseOAuthConsentScopeViewComponent } from '../interaction/components/oauth.consent.scope.view.component';\n\nexport const DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH = '/oidc/auth';\nexport const DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH = '/interaction';\nexport const DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY = 'uid';\nexport const DEFAULT_OIDC_CLIENT_ID_PARAM_KEY = 'client_id';\nexport const DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY = 'client_name';\nexport const DEFAULT_OIDC_CLIENT_URI_PARAM_KEY = 'client_uri';\nexport const DEFAULT_OIDC_LOGO_URI_PARAM_KEY = 'logo_uri';\nexport const DEFAULT_OIDC_SCOPES_PARAM_KEY = 'scopes';\nexport const DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS: OidcTokenEndpointAuthMethod[] = ['client_secret_post', 'client_secret_basic'];\n\n/**\n * Abstract configuration class used as a DI token for app-level OIDC settings.\n *\n * Apps provide a concrete implementation via `provideDbxFirebaseOidc()`.\n */\nexport abstract class DbxFirebaseOidcConfig {\n /**\n * Available scopes for the OIDC provider. Used in scope picker fields.\n */\n abstract readonly availableScopes: OidcScopeDetails[];\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 return this.config.oidcAuthorizationEndpointApiPath ?? DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH;\n }\n\n get oidcInteractionEndpointApiPath(): string {\n return this.config.oidcInteractionEndpointApiPath ?? DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH;\n }\n\n get tokenEndpointAuthMethods(): OidcTokenEndpointAuthMethod[] {\n return this.config.tokenEndpointAuthMethods ?? DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS;\n }\n\n get oauthInteractionRoute(): Maybe<SegueRefOrSegueRefRouterLink> {\n return this.config.oauthInteractionRoute;\n }\n\n get consentScopeListViewClass(): Maybe<Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>> {\n return this.config.consentScopeListViewClass;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { AbstractDbxFirebaseOAuthConsentScopeViewComponent } from './oauth.consent.scope.view.component';\nimport { DbxFirebaseOAuthConsentScopeListComponent } from './oauth.consent.scope.list.component';\nimport { type OAuthConsentScope } from './oauth.consent.scope';\nimport { DbxFirebaseOidcConfigService } from '../../service/oidc.configuration.service';\nimport { separateValues } from '@dereekb/util';\n\n/**\n * Default consent scope view component that maps scope names to descriptions\n * using the `OidcScopeDetails` from the app-level OIDC configuration.\n *\n * Apps can override this by providing a custom `consentScopeListViewClass`\n * in `DbxFirebaseOidcConfig` or `DbxOAuthConsentComponentConfig`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent-scope-default-view',\n standalone: true,\n imports: [DbxFirebaseOAuthConsentScopeListComponent],\n template: `\n <p>\n <strong>{{ clientName() }}</strong>\n is requesting these permissions:\n </p>\n <dbx-firebase-oauth-consent-scope-list [scopes]=\"mappedScopes()\"></dbx-firebase-oauth-consent-scope-list>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthConsentScopeDefaultViewComponent extends AbstractDbxFirebaseOAuthConsentScopeViewComponent {\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n readonly mappedScopes = computed<OAuthConsentScope[]>(() => {\n const availableScopes = this.oidcConfigService.availableScopes;\n const availableScopeValues = new Set(availableScopes.map((s) => s.value));\n const { included: knownScopes, excluded: unknownScopes } = separateValues(this.scopes(), (name) => availableScopeValues.has(name));\n\n return [\n ...knownScopes.map((name) => {\n const details = availableScopes.find((s) => s.value === name);\n return { name, description: details?.description ?? '' };\n }),\n ...unknownScopes.map((name) => ({ name, description: 'unknown' }))\n ];\n });\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { type Observable, switchMap, first } from 'rxjs';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { DbxFirebaseOidcConfigService } from './oidc.configuration.service';\nimport { type OAuthInteractionLoginRequest, type OAuthInteractionConsentRequest, type OidcInteractionUid, type OAuthInteractionLoginResponse, type OAuthInteractionConsentResponse } from '@dereekb/firebase';\n\n// MARK: Service\n/**\n * Service for communicating with the backend OIDC interaction endpoints.\n *\n * Automatically includes the current user's Firebase Auth ID token\n * with each request for server-side verification.\n *\n * After successful login/consent submission, the server returns a redirect URL.\n * The component is responsible for navigating to it (e.g., via `window.location.href`).\n */\n@Injectable({ providedIn: 'root' })\nexport class DbxFirebaseOidcInteractionService {\n private readonly http = inject(HttpClient);\n private readonly _authService = inject(DbxFirebaseAuthService);\n private readonly _oidcConfig = inject(DbxFirebaseOidcConfigService);\n\n /**\n * Base URL for the interaction API, derived from the OIDC config service.\n *\n * @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.\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 * @returns Observable that emits the redirect URL from the server response.\n */\n submitConsent(uid: OidcInteractionUid, approved: boolean): Observable<OAuthInteractionConsentResponse> {\n return this._authService.idTokenString$.pipe(\n first(),\n switchMap((idToken) => this.http.post<OAuthInteractionConsentResponse>(`${this.baseUrl}/${uid}/consent`, { idToken, approved } as OAuthInteractionConsentRequest))\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, computed, signal, effect, type OnDestroy, type Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from '@dereekb/dbx-firebase';\nimport { DbxFirebaseOidcInteractionService } from '../../service/oidc.interaction.service';\nimport { DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY } from '../../service/oidc.configuration.service';\nimport { type OidcInteractionUid } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { type OidcLoginStateCase, DbxFirebaseOAuthLoginViewComponent } from '../components/oauth.login.view.component';\n\n/**\n * Container component for the OIDC OAuth login interaction flow.\n *\n * Manages all state: route param reading, Firebase Auth observation, ID token\n * submission, and error handling. Delegates visual rendering to\n * `DbxFirebaseOAuthLoginViewComponent`.\n *\n * Supports ng-content projection — any content provided is passed through to\n * the view component, replacing the default `<dbx-firebase-login>` for the\n * `'no_user'` state.\n *\n * Usage: Route to this component with `?uid=<interaction-uid>` query param.\n */\n@Component({\n selector: 'dbx-firebase-oauth-login',\n standalone: true,\n imports: [DbxFirebaseOAuthLoginViewComponent],\n template: `\n <dbx-firebase-oauth-login-view [loginStateCase]=\"loginStateCase()\" [error]=\"errorMessage()\" (retryClick)=\"retry()\">\n <ng-content />\n </dbx-firebase-oauth-login-view>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-login'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxFirebaseOAuthLoginComponent implements OnDestroy {\n private readonly dbxRouterService = inject(DbxRouterService);\n private readonly dbxFirebaseAuthService = inject(DbxFirebaseAuthService);\n private readonly interactionService = inject(DbxFirebaseOidcInteractionService);\n readonly uidParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY);\n\n readonly interactionUid: Signal<Maybe<OidcInteractionUid>> = toSignal(this.uidParamReader.value$);\n readonly isLoggedIn = toSignal(this.dbxFirebaseAuthService.isLoggedIn$, { initialValue: false });\n\n readonly submitting = signal(false);\n readonly errorMessage = signal<string | null>(null);\n\n readonly loginStateCase = computed<OidcLoginStateCase>(() => {\n if (this.submitting()) {\n return 'submitting';\n }\n\n if (this.errorMessage()) {\n return 'error';\n }\n\n if (!this.isLoggedIn()) {\n return 'no_user';\n }\n\n return 'user';\n });\n\n constructor() {\n // Auto-submit when user is logged in\n effect(() => {\n if (this.loginStateCase() === 'user') {\n this._submitIdToken();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.uidParamReader.destroy();\n }\n\n retry(): void {\n this.errorMessage.set(null);\n this._submitIdToken();\n }\n\n private _submitIdToken(): void {\n const uid = this.interactionUid();\n\n if (!uid) {\n this.errorMessage.set('Missing interaction UID from route parameters.');\n return;\n }\n\n this.submitting.set(true);\n this.errorMessage.set(null);\n\n this.interactionService.submitLogin(uid).subscribe({\n next: (response) => {\n this.submitting.set(false);\n\n if (response.redirectTo) {\n window.location.href = response.redirectTo;\n }\n },\n error: () => {\n this.submitting.set(false);\n this.errorMessage.set('Failed to complete login. Please try again.');\n }\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input, computed, signal, type OnDestroy, type Type } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { dbxRouteParamReaderInstance, DbxRouterService, type DbxInjectionComponentConfig } from '@dereekb/dbx-core';\nimport { DbxFirebaseOidcInteractionService } from '../../service/oidc.interaction.service';\nimport { DbxFirebaseOidcConfigService, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY } from '../../service/oidc.configuration.service';\nimport { type OAuthInteractionLoginDetails } from '@dereekb/firebase';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxFirebaseOAuthConsentViewComponent } from '../components/oauth.consent.view.component';\nimport { type AbstractDbxFirebaseOAuthConsentScopeViewComponent } from '../components/oauth.consent.scope.view.component';\nimport { DbxFirebaseOAuthConsentScopeDefaultViewComponent } from '../components/oauth.consent.scope.default.view.component';\n\n/**\n * Configuration for `DbxOAuthConsentComponent`.\n */\nexport interface DbxOAuthConsentComponentConfig {\n /**\n * Component class for rendering the consent scope list.\n *\n * When not provided, falls back to the class configured in `DbxFirebaseOidcConfig`,\n * which itself defaults to `DbxFirebaseOAuthConsentScopeDefaultViewComponent`.\n */\n readonly consentScopeListViewClass?: Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>;\n}\n\n/**\n * Container component for the OIDC OAuth consent screen.\n *\n * Manages all state: route param reading, consent submission, and error handling.\n * Delegates visual rendering to `DbxFirebaseOAuthConsentViewComponent`.\n *\n * Reads interaction UID and client details from route params (populated by\n * the server redirect), then assembles them into `OAuthInteractionLoginDetails`.\n */\n@Component({\n selector: 'dbx-firebase-oauth-consent',\n standalone: true,\n imports: [DbxFirebaseOAuthConsentViewComponent],\n template: `\n <dbx-firebase-oauth-consent-view [details]=\"resolvedDetails()\" [loading]=\"loading()\" [error]=\"error()\" [scopeInjectionConfig]=\"scopeInjectionConfig()\" (approveClick)=\"approve()\" (denyClick)=\"deny()\"></dbx-firebase-oauth-consent-view>\n `,\n host: {\n class: 'd-block dbx-firebase-oauth-consent'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxOAuthConsentComponent implements OnDestroy {\n private readonly dbxRouterService = inject(DbxRouterService);\n private readonly interactionService = inject(DbxFirebaseOidcInteractionService);\n private readonly oidcConfigService = inject(DbxFirebaseOidcConfigService);\n\n // Config input\n readonly config = input<Maybe<DbxOAuthConsentComponentConfig>>();\n\n // Route param readers\n readonly interactionUidParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY);\n readonly clientIdParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY);\n readonly clientNameParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY);\n readonly clientUriParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY);\n readonly logoUriParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_LOGO_URI_PARAM_KEY);\n readonly scopesParamReader = dbxRouteParamReaderInstance<string>(this.dbxRouterService, DEFAULT_OIDC_SCOPES_PARAM_KEY);\n\n // Signals from route params\n private readonly routeUid = toSignal(this.interactionUidParamReader.value$);\n private readonly routeClientId = toSignal(this.clientIdParamReader.value$);\n private readonly routeClientName = toSignal(this.clientNameParamReader.value$);\n private readonly routeClientUri = toSignal(this.clientUriParamReader.value$);\n private readonly routeLogoUri = toSignal(this.logoUriParamReader.value$);\n private readonly routeScopes = toSignal(this.scopesParamReader.value$);\n\n // Resolved values\n readonly resolvedInteractionUid = computed(() => this.routeUid());\n readonly resolvedDetails = computed<Maybe<OAuthInteractionLoginDetails>>(() => {\n const client_id = this.routeClientId() ?? '';\n const client_name = this.routeClientName();\n const client_uri = this.routeClientUri();\n const logo_uri = this.routeLogoUri();\n const scopes = this.routeScopes() ?? '';\n\n return {\n client_id,\n client_name,\n client_uri,\n logo_uri,\n scopes\n };\n });\n\n // Scope injection config: built from the configured scope list view class, falling back to config service, then the default\n readonly scopeInjectionConfig = computed<DbxInjectionComponentConfig>(() => ({\n componentClass: this.config()?.consentScopeListViewClass ?? this.oidcConfigService.consentScopeListViewClass ?? DbxFirebaseOAuthConsentScopeDefaultViewComponent\n }));\n\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n\n ngOnDestroy(): void {\n this.interactionUidParamReader.destroy();\n this.clientIdParamReader.destroy();\n this.clientNameParamReader.destroy();\n this.clientUriParamReader.destroy();\n this.logoUriParamReader.destroy();\n this.scopesParamReader.destroy();\n }\n\n approve(): void {\n this._submitConsent(true);\n }\n\n deny(): void {\n this._submitConsent(false);\n }\n\n private _submitConsent(approved: boolean): void {\n const uid = this.resolvedInteractionUid();\n\n if (!uid) {\n this.error.set('Missing interaction UID');\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n this.interactionService.submitConsent(uid, approved).subscribe({\n next: (response) => {\n this.loading.set(false);\n\n if (response.redirectTo) {\n window.location.href = response.redirectTo;\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set('Failed to process consent. Please try again.');\n }\n });\n }\n}\n","import { 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';\nimport { tapLog } from '@dereekb/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(\n map((config) => (config ? oidcEntryClientTestForgeFormFields(config) : undefined)),\n tapLog('config')\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 { 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","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, 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 { 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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"}
|
package/package.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-firebase",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.11.1",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "21.2.11",
|
|
6
6
|
"@angular/core": "21.2.11",
|
|
7
7
|
"@angular/material": "^21.2.9",
|
|
8
|
-
"@dereekb/date": "13.
|
|
9
|
-
"@dereekb/dbx-analytics": "13.
|
|
10
|
-
"@dereekb/dbx-core": "13.
|
|
11
|
-
"@dereekb/dbx-form": "13.
|
|
12
|
-
"@dereekb/dbx-web": "13.
|
|
13
|
-
"@dereekb/firebase": "13.
|
|
14
|
-
"@dereekb/model": "13.
|
|
15
|
-
"@dereekb/rxjs": "13.
|
|
16
|
-
"@dereekb/util": "13.
|
|
17
|
-
"@dereekb/vitest": "13.
|
|
18
|
-
"@ng-forge/dynamic-forms": "0.9.0-next.
|
|
8
|
+
"@dereekb/date": "13.11.1",
|
|
9
|
+
"@dereekb/dbx-analytics": "13.11.1",
|
|
10
|
+
"@dereekb/dbx-core": "13.11.1",
|
|
11
|
+
"@dereekb/dbx-form": "13.11.1",
|
|
12
|
+
"@dereekb/dbx-web": "13.11.1",
|
|
13
|
+
"@dereekb/firebase": "13.11.1",
|
|
14
|
+
"@dereekb/model": "13.11.1",
|
|
15
|
+
"@dereekb/rxjs": "13.11.1",
|
|
16
|
+
"@dereekb/util": "13.11.1",
|
|
17
|
+
"@dereekb/vitest": "13.11.1",
|
|
18
|
+
"@ng-forge/dynamic-forms": "0.9.0-next.6",
|
|
19
19
|
"@ngrx/component-store": "^21.1.0",
|
|
20
20
|
"@ngx-formly/core": "git+https://git@github.com/dereekb/ngx-formly#996d1041c8d2afbe429985a5ad394e59327bfa1d",
|
|
21
21
|
"firebase": "^12.12.1",
|
|
@@ -454,7 +454,7 @@ declare class DbxFirebaseOidcEntryClientTestComponent {
|
|
|
454
454
|
readonly resolvedAuthorizationEndpointPath: _angular_core.Signal<string>;
|
|
455
455
|
readonly redirectUrisSignal: _angular_core.Signal<string[] | undefined>;
|
|
456
456
|
readonly clientIdSignal: _angular_core.Signal<string | undefined>;
|
|
457
|
-
readonly formConfig: _angular_core.Signal<OidcEntryClientTestFormFieldsConfig
|
|
457
|
+
readonly formConfig: _angular_core.Signal<OidcEntryClientTestFormFieldsConfig>;
|
|
458
458
|
readonly formTemplate$: rxjs.Observable<DbxFirebaseOidcModelClientTestFormValue>;
|
|
459
459
|
readonly codeVerifier: _angular_core.WritableSignal<string>;
|
|
460
460
|
readonly codeChallenge: _angular_core.WritableSignal<string>;
|
|
@@ -531,20 +531,6 @@ declare class OidcEntryDocumentStoreDirective extends DbxFirebaseDocumentStoreDi
|
|
|
531
531
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OidcEntryDocumentStoreDirective, "[dbxOidcEntryDocument]", never, {}, {}, never, never, true, never>;
|
|
532
532
|
}
|
|
533
533
|
|
|
534
|
-
/**
|
|
535
|
-
* Generates a random PKCE code verifier string (43 characters, base64url-encoded).
|
|
536
|
-
*
|
|
537
|
-
* @returns A cryptographically random base64url string suitable for use as a PKCE code_verifier.
|
|
538
|
-
*/
|
|
539
|
-
declare function generatePkceCodeVerifier(): string;
|
|
540
|
-
/**
|
|
541
|
-
* Generates a PKCE code challenge from a code verifier using SHA-256.
|
|
542
|
-
*
|
|
543
|
-
* @param verifier - The code verifier string to hash
|
|
544
|
-
* @returns A base64url-encoded SHA-256 hash of the verifier
|
|
545
|
-
*/
|
|
546
|
-
declare function generatePkceCodeChallenge(verifier: string): Promise<string>;
|
|
547
|
-
|
|
548
534
|
declare const DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH = "/oidc/auth";
|
|
549
535
|
declare const DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH = "/interaction";
|
|
550
536
|
declare const DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY = "uid";
|
|
@@ -699,5 +685,5 @@ declare class DbxFirebaseOidcInteractionService {
|
|
|
699
685
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DbxFirebaseOidcInteractionService>;
|
|
700
686
|
}
|
|
701
687
|
|
|
702
|
-
export { AbstractDbxFirebaseOAuthConsentScopeViewComponent, DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY, DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, DbxFirebaseOAuthConsentScopeDefaultViewComponent, DbxFirebaseOAuthConsentScopeListComponent, DbxFirebaseOAuthConsentViewComponent, DbxFirebaseOAuthLoginComponent, DbxFirebaseOAuthLoginViewComponent, DbxFirebaseOidcConfig, DbxFirebaseOidcConfigService, DbxFirebaseOidcEntryClientCreateComponent, DbxFirebaseOidcEntryClientForgeFormComponent, DbxFirebaseOidcEntryClientListComponent, DbxFirebaseOidcEntryClientListViewComponent, DbxFirebaseOidcEntryClientListViewItemClientComponent, DbxFirebaseOidcEntryClientListViewItemComponent, DbxFirebaseOidcEntryClientListViewItemDefaultComponent, DbxFirebaseOidcEntryClientTestComponent, DbxFirebaseOidcEntryClientTestForgeFormComponent, DbxFirebaseOidcEntryClientUpdateComponent, DbxFirebaseOidcEntryClientViewComponent, DbxFirebaseOidcInteractionService, DbxOAuthConsentComponent, OidcEntryCollectionStore, OidcEntryCollectionStoreDirective, OidcEntryDocumentStore, OidcEntryDocumentStoreDirective,
|
|
688
|
+
export { AbstractDbxFirebaseOAuthConsentScopeViewComponent, DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY, DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, DbxFirebaseOAuthConsentScopeDefaultViewComponent, DbxFirebaseOAuthConsentScopeListComponent, DbxFirebaseOAuthConsentViewComponent, DbxFirebaseOAuthLoginComponent, DbxFirebaseOAuthLoginViewComponent, DbxFirebaseOidcConfig, DbxFirebaseOidcConfigService, DbxFirebaseOidcEntryClientCreateComponent, DbxFirebaseOidcEntryClientForgeFormComponent, DbxFirebaseOidcEntryClientListComponent, DbxFirebaseOidcEntryClientListViewComponent, DbxFirebaseOidcEntryClientListViewItemClientComponent, DbxFirebaseOidcEntryClientListViewItemComponent, DbxFirebaseOidcEntryClientListViewItemDefaultComponent, DbxFirebaseOidcEntryClientTestComponent, DbxFirebaseOidcEntryClientTestForgeFormComponent, DbxFirebaseOidcEntryClientUpdateComponent, DbxFirebaseOidcEntryClientViewComponent, DbxFirebaseOidcInteractionService, DbxOAuthConsentComponent, OidcEntryCollectionStore, OidcEntryCollectionStoreDirective, OidcEntryDocumentStore, OidcEntryDocumentStoreDirective, oidcClientHomepageUriForgeField, oidcClientJwksUriForgeField, oidcClientLogoUriForgeField, oidcClientNameForgeField, oidcClientRedirectUrisForgeField, oidcClientTestClientIdForgeField, oidcClientTestRedirectUriForgeField, oidcClientTestScopesForgeField, oidcClientTokenEndpointAuthMethodForgeField, oidcEntryClientForgeFormFields, oidcEntryClientTestForgeFormFields, oidcEntryClientUpdateForgeFormFields, provideDbxFirebaseOidc, provideOidcModelFirestoreCollections };
|
|
703
689
|
export type { DbxFirebaseOAuthConsentScopesViewData, DbxFirebaseOidcEntryClientFormComponentConfig, DbxFirebaseOidcEntryClientTestFormComponentConfig, DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcModelClientUpdateFormValue, DbxOAuthConsentComponentConfig, OAuthConsentScope, OidcEntryClientFormFieldsConfig, OidcEntryClientTestFormFieldsConfig, OidcEntryWithSelection, OidcLoginStateCase, ProvideDbxFirebaseOidcConfig };
|