@dereekb/dbx-firebase 13.11.3 → 13.11.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,26 +1,32 @@
1
- import * as _angular_core from '@angular/core';
2
- import { OnDestroy, Signal, Type, EnvironmentProviders } from '@angular/core';
1
+ import * as i0 from '@angular/core';
2
+ import { Signal, OnDestroy, Type, OnInit, EnvironmentProviders } from '@angular/core';
3
3
  import * as _dereekb_util from '@dereekb/util';
4
4
  import { Maybe, ErrorInput } from '@dereekb/util';
5
5
  import * as _dereekb_dbx_core from '@dereekb/dbx-core';
6
6
  import { DbxInjectionComponentConfig, SegueRefOrSegueRefRouterLink } from '@dereekb/dbx-core';
7
+ import { WorkUsingContext } from '@dereekb/rxjs';
7
8
  import * as _dereekb_firebase from '@dereekb/firebase';
8
- import { OAuthInteractionLoginDetails, OidcScope, OidcInteractionUid, OidcTokenEndpointAuthMethod, OidcRedirectUri, OidcScopeDetails, CreateOidcClientParams, UpdateOidcClientFieldParams, OidcEntry, OidcEntryDocument, OidcModelFunctions, CreateOidcClientResult, RotateOidcClientSecretResult, OidcModelFirestoreCollections, OAuthInteractionLoginResponse, OAuthInteractionConsentResponse } from '@dereekb/firebase';
9
+ import { OidcScope, OAuthInteractionLoginDetails, OAuthInteractionConsentResponse, OidcInteractionUid, OidcTokenEndpointAuthMethod, OidcRedirectUri, OidcScopeDetails, CreateOidcClientParams, UpdateOidcClientFieldParams, OidcEntry, OidcEntryDocument, OidcModelFunctions, CreateOidcClientResult, RotateOidcClientSecretResult, FirestoreQueryConstraint, OidcModelFirestoreCollections, OAuthInteractionLoginResponse, OAuthInteractionConsentRequest } from '@dereekb/firebase';
10
+ import { FormConfig, ContainerField, RegisteredFieldTypes } from '@ng-forge/dynamic-forms';
11
+ import { AbstractDbxSelectionListWrapperDirective, AbstractDbxValueListViewItemComponent, AbstractDbxSelectionListViewDirective, DbxSelectionValueListViewConfig, DbxActionConfirmConfig, DbxValueAsListItem } from '@dereekb/dbx-web';
9
12
  import * as _dereekb_dbx_form from '@dereekb/dbx-form';
10
13
  import { AbstractConfigAsyncForgeFormDirective } from '@dereekb/dbx-form';
11
- import * as _ng_forge_dynamic_forms_material from '@ng-forge/dynamic-forms-material';
12
- import { ContainerField, FormConfig, RegisteredFieldTypes } from '@ng-forge/dynamic-forms';
13
14
  import * as rxjs from 'rxjs';
14
15
  import { Observable } from 'rxjs';
15
- import { AbstractDbxSelectionListWrapperDirective, AbstractDbxSelectionListViewDirective, DbxSelectionValueListViewConfig, DbxValueAsListItem, AbstractDbxValueListViewItemComponent, DbxActionConfirmConfig } from '@dereekb/dbx-web';
16
- import { WorkUsingContext } from '@dereekb/rxjs';
16
+ import * as _ng_forge_dynamic_forms_material from '@ng-forge/dynamic-forms-material';
17
17
  import * as _dereekb_dbx_firebase from '@dereekb/dbx-firebase';
18
- import { AbstractDbxFirebaseDocumentStore, AbstractDbxFirebaseCollectionStore, DbxFirebaseCollectionStoreDirective, DbxFirebaseDocumentStoreDirective } from '@dereekb/dbx-firebase';
18
+ import { AbstractDbxFirebaseDocumentStore, AbstractDbxFirebaseCollectionStore, DbxFirebaseCollectionStoreDirective, DbxFirebaseAuthService, DbxFirebaseDocumentStoreDirective } from '@dereekb/dbx-firebase';
19
19
 
20
20
  /**
21
21
  * State cases for the OIDC login interaction flow.
22
+ *
23
+ * - `'unknown'` — Firebase auth state has not yet resolved. Render nothing/spinner to avoid flashing.
24
+ * - `'no_user'` — Auth resolved and there is no signed-in user. Project the login UI via ng-content.
25
+ * - `'user'` — Auth resolved and a user is signed in.
26
+ * - `'submitting'` — Submitting the ID token to the OIDC interaction endpoint.
27
+ * - `'error'` — Submission failed; allow retry.
22
28
  */
23
- type OidcLoginStateCase = 'no_user' | 'user' | 'submitting' | 'error';
29
+ type OidcLoginStateCase = 'unknown' | 'no_user' | 'user' | 'submitting' | 'error';
24
30
  /**
25
31
  * Presentational component for the OIDC OAuth login interaction.
26
32
  *
@@ -36,69 +42,163 @@ type OidcLoginStateCase = 'no_user' | 'user' | 'submitting' | 'error';
36
42
  * ```
37
43
  */
38
44
  declare class DbxFirebaseOAuthLoginViewComponent {
39
- readonly loginStateCase: _angular_core.InputSignal<OidcLoginStateCase>;
40
- readonly error: _angular_core.InputSignal<Maybe<string | ErrorInput>>;
41
- readonly resolvedError: _angular_core.Signal<Maybe<ErrorInput>>;
42
- readonly retryClick: _angular_core.OutputEmitterRef<void>;
43
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOAuthLoginViewComponent, never>;
44
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOAuthLoginViewComponent, "dbx-firebase-oauth-login-view", never, { "loginStateCase": { "alias": "loginStateCase"; "required": true; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; }, { "retryClick": "retryClick"; }, never, ["*"], true, never>;
45
+ readonly loginStateCase: i0.InputSignal<OidcLoginStateCase>;
46
+ readonly error: i0.InputSignal<Maybe<string | ErrorInput>>;
47
+ readonly resolvedError: i0.Signal<Maybe<ErrorInput>>;
48
+ readonly retryClick: i0.OutputEmitterRef<void>;
49
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOAuthLoginViewComponent, never>;
50
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOAuthLoginViewComponent, "dbx-firebase-oauth-login-view", never, { "loginStateCase": { "alias": "loginStateCase"; "required": true; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; }, { "retryClick": "retryClick"; }, never, ["*"], true, never>;
51
+ }
52
+
53
+ interface OAuthConsentScope<T extends OidcScope = OidcScope> {
54
+ readonly name: T;
55
+ readonly description: string;
45
56
  }
46
57
 
58
+ /**
59
+ * Validator key emitted when the user has not selected any optional scope.
60
+ * Surfaces alongside the form's invalid state so the action button stays disabled.
61
+ */
62
+ declare const OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_KIND = "mustSelectAtLeastOneScope";
63
+ /**
64
+ * Default message shown when the user has cleared every optional scope.
65
+ */
66
+ declare const OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_DEFAULT_MESSAGE = "Select at least one scope to grant.";
67
+ /**
68
+ * Form value emitted by the consent scopes form.
69
+ *
70
+ * Uses the same key as the `OAuthInteractionConsentRequest.grantedOIDCScopes`
71
+ * payload field so the consent action handler can pass the form value through
72
+ * directly.
73
+ */
74
+ interface OAuthConsentScopesFormValue {
75
+ readonly grantedOIDCScopes: OidcScope[];
76
+ }
77
+ /**
78
+ * Configuration for the consent scopes form.
79
+ *
80
+ * Required scopes are filtered out by the caller before being passed in —
81
+ * required scopes are surfaced separately as a static "Always granted" line
82
+ * because they are not user-selectable.
83
+ */
84
+ interface OAuthConsentScopesFormFieldsConfig {
85
+ /**
86
+ * Optional scopes the user can choose to grant.
87
+ */
88
+ readonly optionalScopes: readonly OAuthConsentScope[];
89
+ /**
90
+ * Initial selection set. Defaults to every optional scope being selected.
91
+ */
92
+ readonly initiallySelected?: readonly OidcScope[];
93
+ }
94
+ /**
95
+ * Builds a complete `FormConfig` ready to feed into a forge form component.
96
+ *
97
+ * The resulting form has a single `grantedOIDCScopes` field — a
98
+ * `dbxForgeListSelectionField` rendered through
99
+ * `DbxFirebaseOAuthConsentScopeListComponent` (a `dbx-list` selection wrapper).
100
+ * The list renders bare (no Material form-field wrapper) and without the
101
+ * default 300px height cap so it grows to fit the scope list.
102
+ *
103
+ * @param config - The consent scopes form fields configuration.
104
+ * @returns A `FormConfig` whose single field selects an `OidcScope[]` of granted scopes.
105
+ */
106
+ declare function oauthConsentScopesFormConfig(config: OAuthConsentScopesFormFieldsConfig): FormConfig;
107
+
108
+ /**
109
+ * State cases for the OIDC consent interaction flow.
110
+ *
111
+ * - `'unknown'` — Firebase auth state has not yet resolved. Render a spinner
112
+ * to avoid flashing between states.
113
+ * - `'no_user'` — Auth resolved and there is no signed-in user. Project the
114
+ * login UI via ng-content.
115
+ * - `'user'` — Auth resolved and a user is signed in. Render the consent
116
+ * form. Submission progress and errors are managed by the inner
117
+ * `dbxAction` contexts and surfaced via `dbxActionSnackbarError`.
118
+ */
119
+ type OidcConsentStateCase = 'unknown' | 'no_user' | 'user';
47
120
  /**
48
121
  * Presentational component for the OIDC OAuth consent screen.
49
122
  *
50
- * Accepts an `OAuthInteractionLoginDetails` input that contains all client and scope
51
- * information. Renders the client name, logo, client URL, scopes (via `<dbx-injection>`),
52
- * error/loading states, and approve/deny action buttons.
123
+ * Wires up two `dbxAction` contexts an outer one for Approve (which hosts
124
+ * the scope-selection forge form via `dbxActionForm`) and a nested one for
125
+ * Deny (which carries no value). Buttons are bound by Angular DI's
126
+ * nearest-ancestor lookup: the Approve button picks up the outer action, the
127
+ * Deny button (wrapped in its own `<ng-container dbxAction>`) picks up the
128
+ * inner.
129
+ *
130
+ * Supports ng-content projection — anything provided is rendered for the
131
+ * `'no_user'` state (so apps can project a login view, mirroring
132
+ * `DbxFirebaseOAuthLoginViewComponent`).
53
133
  *
54
134
  * @example
55
135
  * ```html
56
136
  * <dbx-firebase-oauth-consent-view
57
137
  * [details]="loginDetails"
58
- * [loading]="false"
138
+ * [consentStateCase]="'user'"
59
139
  * [scopeInjectionConfig]="scopeConfig"
60
- * (approveClick)="onApprove()"
61
- * (denyClick)="onDeny()">
140
+ * [approveHandler]="handleApprove"
141
+ * [denyHandler]="handleDeny">
62
142
  * </dbx-firebase-oauth-consent-view>
63
143
  * ```
64
144
  */
65
145
  declare class DbxFirebaseOAuthConsentViewComponent {
66
- readonly details: _angular_core.InputSignal<Maybe<OAuthInteractionLoginDetails<string>>>;
67
- readonly loading: _angular_core.InputSignal<boolean>;
68
- readonly error: _angular_core.InputSignal<Maybe<string | ErrorInput>>;
69
- readonly scopeInjectionConfig: _angular_core.InputSignal<DbxInjectionComponentConfig<unknown>>;
70
- readonly clientName: _angular_core.Signal<string>;
71
- readonly clientUri: _angular_core.Signal<Maybe<string>>;
72
- readonly logoUri: _angular_core.Signal<Maybe<string>>;
73
- readonly scopes: _angular_core.Signal<string[]>;
74
- readonly resolvedError: _angular_core.Signal<Maybe<ErrorInput>>;
75
- readonly approveClick: _angular_core.OutputEmitterRef<void>;
76
- readonly denyClick: _angular_core.OutputEmitterRef<void>;
77
- readonly resolvedScopeInjectionConfig: _angular_core.Signal<DbxInjectionComponentConfig<unknown>>;
78
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOAuthConsentViewComponent, never>;
79
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOAuthConsentViewComponent, "dbx-firebase-oauth-consent-view", never, { "details": { "alias": "details"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "scopeInjectionConfig": { "alias": "scopeInjectionConfig"; "required": true; "isSignal": true; }; }, { "approveClick": "approveClick"; "denyClick": "denyClick"; }, never, never, true, never>;
80
- }
81
-
82
- interface OAuthConsentScope<T extends OidcScope = OidcScope> {
83
- readonly name: T;
84
- readonly description: string;
146
+ readonly details: i0.InputSignal<Maybe<OAuthInteractionLoginDetails<string>>>;
147
+ readonly consentStateCase: i0.InputSignal<OidcConsentStateCase>;
148
+ readonly scopeInjectionConfig: i0.InputSignal<DbxInjectionComponentConfig<unknown>>;
149
+ /**
150
+ * Scopes that cannot be deselected by the user. Forwarded to the scope
151
+ * view so it can render an "Always granted" hint. Defaults to `['openid']`.
152
+ */
153
+ readonly requiredScopes: i0.InputSignal<readonly string[]>;
154
+ /**
155
+ * Approve handler — called with the form value when the Approve button
156
+ * triggers the outer action. Receives a `WorkUsingContext` to drive the
157
+ * action's loading/success/error pipeline.
158
+ */
159
+ readonly approveHandler: i0.InputSignal<WorkUsingContext<OAuthConsentScopesFormValue, OAuthInteractionConsentResponse>>;
160
+ /**
161
+ * Deny handler — called when the Deny button triggers the inner action.
162
+ * No value is passed (`dbxActionValue` provides an empty payload).
163
+ */
164
+ readonly denyHandler: i0.InputSignal<WorkUsingContext<void, OAuthInteractionConsentResponse>>;
165
+ readonly clientName: Signal<string>;
166
+ readonly clientUri: Signal<Maybe<string>>;
167
+ readonly logoUri: Signal<Maybe<string>>;
168
+ readonly scopes: Signal<OidcScope[]>;
169
+ readonly resolvedScopeInjectionConfig: Signal<DbxInjectionComponentConfig<unknown>>;
170
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOAuthConsentViewComponent, never>;
171
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOAuthConsentViewComponent, "dbx-firebase-oauth-consent-view", never, { "details": { "alias": "details"; "required": false; "isSignal": true; }; "consentStateCase": { "alias": "consentStateCase"; "required": true; "isSignal": true; }; "scopeInjectionConfig": { "alias": "scopeInjectionConfig"; "required": true; "isSignal": true; }; "requiredScopes": { "alias": "requiredScopes"; "required": false; "isSignal": true; }; "approveHandler": { "alias": "approveHandler"; "required": true; "isSignal": true; }; "denyHandler": { "alias": "denyHandler"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
85
172
  }
86
173
 
87
174
  /**
88
- * Data provided to consent scope view components via the `DBX_INJECTION_COMPONENT_DATA` token.
175
+ * Data provided to consent scope view components via the
176
+ * `DBX_INJECTION_COMPONENT_DATA` token.
89
177
  *
90
- * Contains the scopes being requested and contextual information about the consent interaction.
178
+ * Carries the requested scopes plus surrounding interaction context. The
179
+ * form value (current granted scopes) is no longer carried here — the
180
+ * scope view's form is wired up via `dbxActionForm` to the parent's
181
+ * `dbxAction`, so the value pipeline runs through the action store at
182
+ * trigger time.
91
183
  */
92
184
  interface DbxFirebaseOAuthConsentScopesViewData {
93
185
  readonly details?: Maybe<OAuthInteractionLoginDetails>;
94
186
  readonly scopes: OidcScope[];
95
187
  readonly clientName: string;
188
+ /**
189
+ * Scopes that must always be granted. Surfaced separately so the scope
190
+ * view can render them as a static "Always granted" hint instead of
191
+ * making them user-selectable.
192
+ */
193
+ readonly requiredScopes?: readonly OidcScope[];
96
194
  }
97
195
  /**
98
196
  * Abstract base class for consent scope view components.
99
197
  *
100
- * Provides typed access to the `DbxFirebaseOAuthConsentScopesViewData` injected
101
- * via `DBX_INJECTION_COMPONENT_DATA`. Subclasses only need to define a template.
198
+ * Provides typed access to the `DbxFirebaseOAuthConsentScopesViewData`
199
+ * injected via `DBX_INJECTION_COMPONENT_DATA`. Subclasses define the
200
+ * template that renders the requested scopes and (optionally) hosts a
201
+ * forge form decorated with `dbxActionForm`.
102
202
  *
103
203
  * @example
104
204
  * ```typescript
@@ -108,39 +208,111 @@ interface DbxFirebaseOAuthConsentScopesViewData {
108
208
  */
109
209
  declare abstract class AbstractDbxFirebaseOAuthConsentScopeViewComponent {
110
210
  private readonly data;
111
- readonly details: _angular_core.Signal<Maybe<OAuthInteractionLoginDetails<string>>>;
112
- readonly scopes: _angular_core.Signal<string[]>;
113
- readonly clientName: _angular_core.Signal<string>;
114
- readonly clientUri: _angular_core.Signal<Maybe<string>>;
115
- readonly logoUri: _angular_core.Signal<Maybe<string>>;
211
+ readonly details: i0.Signal<Maybe<OAuthInteractionLoginDetails<string>>>;
212
+ readonly scopes: i0.Signal<string[]>;
213
+ readonly clientName: i0.Signal<string>;
214
+ readonly clientUri: i0.Signal<Maybe<string>>;
215
+ readonly logoUri: i0.Signal<Maybe<string>>;
216
+ readonly requiredScopes: i0.Signal<readonly string[]>;
217
+ isScopeRequired(scope: OidcScope): boolean;
116
218
  }
117
219
 
118
220
  /**
119
- * Standalone presentational component that renders a list of OAuth consent scopes.
221
+ * Selection-list wrapper used as the `listComponentClass` for the OIDC
222
+ * consent scope `dbxForgeListSelectionField`.
223
+ *
224
+ * Reuses the workspace's `dbx-list` selection infrastructure so the existing
225
+ * scope-row visual treatment (name + description) remains intact while the
226
+ * selection state participates in the surrounding `dbxAction`/`dbxActionForm`
227
+ * pipeline.
120
228
  *
121
229
  * @example
122
- * ```html
123
- * <dbx-firebase-oauth-consent-scope-list [scopes]="mappedScopes"></dbx-firebase-oauth-consent-scope-list>
230
+ * ```ts
231
+ * dbxForgeListSelectionField<OAuthConsentScope, DbxFirebaseOAuthConsentScopeListComponent, OidcScope>({
232
+ * key: 'grantedOIDCScopes',
233
+ * props: {
234
+ * listComponentClass: of(DbxFirebaseOAuthConsentScopeListComponent),
235
+ * readKey: (scope) => scope.name,
236
+ * state$: of(successResult(optionalScopes)),
237
+ * wrapped: false,
238
+ * maxHeight: 'none'
239
+ * }
240
+ * });
124
241
  * ```
125
242
  */
126
- declare class DbxFirebaseOAuthConsentScopeListComponent {
127
- readonly scopes: _angular_core.InputSignal<OAuthConsentScope<string>[]>;
128
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOAuthConsentScopeListComponent, never>;
129
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOAuthConsentScopeListComponent, "dbx-firebase-oauth-consent-scope-list", never, { "scopes": { "alias": "scopes"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
243
+ declare class DbxFirebaseOAuthConsentScopeListComponent extends AbstractDbxSelectionListWrapperDirective<OAuthConsentScope> {
244
+ constructor();
245
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOAuthConsentScopeListComponent, never>;
246
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOAuthConsentScopeListComponent, "dbx-firebase-oauth-consent-scope-list", never, {}, {}, never, ["[top]", "[bottom]", "[empty]", "[emptyLoading]", "[end]"], true, never>;
247
+ }
248
+ /**
249
+ * Selection list view that pairs with `DbxFirebaseOAuthConsentScopeListComponent`.
250
+ * Maps each `OAuthConsentScope` to a `DbxValueListItem` keyed by the scope name
251
+ * and renders it through `DbxFirebaseOAuthConsentScopeListItemComponent`.
252
+ */
253
+ declare class DbxFirebaseOAuthConsentScopeListViewComponent extends AbstractDbxSelectionListViewDirective<OAuthConsentScope> {
254
+ readonly config: DbxSelectionValueListViewConfig<OAuthConsentScope>;
255
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOAuthConsentScopeListViewComponent, never>;
256
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOAuthConsentScopeListViewComponent, "dbx-firebase-oauth-consent-scope-list-view", never, {}, {}, never, never, true, never>;
257
+ }
258
+ /**
259
+ * Item row inside the OIDC consent scope selection list. Shown as the visual
260
+ * row for both selected and unselected scopes — the selection chrome (the
261
+ * leading checkbox/highlight) is provided by the wrapping
262
+ * `dbx-selection-list-view`.
263
+ */
264
+ declare class DbxFirebaseOAuthConsentScopeListItemComponent extends AbstractDbxValueListViewItemComponent<OAuthConsentScope> {
265
+ get name(): string;
266
+ get description(): string;
267
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOAuthConsentScopeListItemComponent, never>;
268
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOAuthConsentScopeListItemComponent, "ng-component", never, {}, {}, never, never, true, never>;
130
269
  }
131
270
 
132
271
  /**
133
- * Default consent scope view component that maps scope names to descriptions
134
- * using the `OidcScopeDetails` from the app-level OIDC configuration.
272
+ * Reusable forge form component that renders one checkbox per OIDC scope
273
+ * defined in {@link OAuthConsentScopesFormFieldsConfig}. Required scopes are
274
+ * rendered as checked-and-disabled.
135
275
  *
136
- * Apps can override this by providing a custom `consentScopeListViewClass`
137
- * in `DbxFirebaseOidcConfig` or `DbxOAuthConsentComponentConfig`.
276
+ * Pair with `<dbx-firebase-oauth-consent-scope-default-view>` for the default
277
+ * consent flow, or embed directly in custom consent UIs that supply their
278
+ * own scope/required configuration.
138
279
  */
139
- declare class DbxFirebaseOAuthConsentScopeDefaultViewComponent extends AbstractDbxFirebaseOAuthConsentScopeViewComponent {
140
- private readonly oidcConfigService;
141
- readonly mappedScopes: _angular_core.Signal<OAuthConsentScope<string>[]>;
142
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOAuthConsentScopeDefaultViewComponent, never>;
143
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOAuthConsentScopeDefaultViewComponent, "dbx-firebase-oauth-consent-scope-default-view", never, {}, {}, never, never, true, never>;
280
+ declare class DbxFirebaseOAuthConsentScopeFormComponent extends AbstractConfigAsyncForgeFormDirective<OAuthConsentScopesFormValue, OAuthConsentScopesFormFieldsConfig> {
281
+ readonly formConfig$: Observable<Maybe<FormConfig>>;
282
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOAuthConsentScopeFormComponent, never>;
283
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOAuthConsentScopeFormComponent, "dbx-firebase-oauth-consent-scope-form", never, {}, {}, never, never, true, never>;
284
+ }
285
+
286
+ /**
287
+ * Default consent scope view component.
288
+ *
289
+ * Reads the requested scopes (and required scopes) from the
290
+ * `DBX_INJECTION_COMPONENT_DATA` provided by the parent consent view,
291
+ * resolves human-readable descriptions from the app-level
292
+ * `DbxFirebaseOidcConfigService`, then renders a
293
+ * `DbxFirebaseOAuthConsentScopeFormComponent` with `dbxActionForm` so the
294
+ * form's value participates in the surrounding `dbxAction` (the consent
295
+ * view's outer Approve action).
296
+ *
297
+ * Required scopes are not user-selectable. They are surfaced as an "Always
298
+ * granted" hint above the form because the server enforces them regardless
299
+ * of payload — including them in the selection list would just add noise.
300
+ *
301
+ * Apps can override this default via
302
+ * `DbxFirebaseOidcConfig.consentScopeListViewClass` or
303
+ * `DbxOAuthConsentComponentConfig.consentScopeListViewClass`. Custom views
304
+ * should similarly apply `dbxActionForm` to a forge form whose value matches
305
+ * `OAuthConsentScopesFormValue`.
306
+ */
307
+ declare class DbxFirebaseOAuthConsentScopeDefaultViewComponent {
308
+ private readonly _oidcConfigService;
309
+ private readonly _data;
310
+ readonly mappedScopes: i0.Signal<OAuthConsentScope<string>[]>;
311
+ readonly optionalScopes: i0.Signal<OAuthConsentScope<string>[]>;
312
+ readonly alwaysGrantedLabel: i0.Signal<string | null>;
313
+ readonly formFieldsConfig: i0.Signal<OAuthConsentScopesFormFieldsConfig>;
314
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOAuthConsentScopeDefaultViewComponent, never>;
315
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOAuthConsentScopeDefaultViewComponent, "dbx-firebase-oauth-consent-scope-default-view", never, {}, {}, never, never, true, never>;
144
316
  }
145
317
 
146
318
  /**
@@ -162,16 +334,16 @@ declare class DbxFirebaseOAuthLoginComponent implements OnDestroy {
162
334
  private readonly interactionService;
163
335
  readonly uidParamReader: _dereekb_dbx_core.DbxRouteParamReaderInstance<string>;
164
336
  readonly interactionUid: Signal<Maybe<OidcInteractionUid>>;
165
- readonly isLoggedIn: Signal<boolean>;
166
- readonly submitting: _angular_core.WritableSignal<boolean>;
167
- readonly errorMessage: _angular_core.WritableSignal<string | null>;
337
+ readonly isLoggedIn: Signal<Maybe<boolean>>;
338
+ readonly submitting: i0.WritableSignal<boolean>;
339
+ readonly errorMessage: i0.WritableSignal<string | null>;
168
340
  readonly loginStateCase: Signal<OidcLoginStateCase>;
169
341
  constructor();
170
342
  ngOnDestroy(): void;
171
343
  retry(): void;
172
344
  private _submitIdToken;
173
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOAuthLoginComponent, never>;
174
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOAuthLoginComponent, "dbx-firebase-oauth-login", never, {}, {}, never, ["*"], true, never>;
345
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOAuthLoginComponent, never>;
346
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOAuthLoginComponent, "dbx-firebase-oauth-login", never, {}, {}, never, ["*"], true, never>;
175
347
  }
176
348
 
177
349
  /**
@@ -189,17 +361,23 @@ interface DbxOAuthConsentComponentConfig {
189
361
  /**
190
362
  * Container component for the OIDC OAuth consent screen.
191
363
  *
192
- * Manages all state: route param reading, consent submission, and error handling.
193
- * Delegates visual rendering to `DbxFirebaseOAuthConsentViewComponent`.
194
- *
195
364
  * Reads interaction UID and client details from route params (populated by
196
- * the server redirect), then assembles them into `OAuthInteractionLoginDetails`.
365
+ * the server redirect), assembles them into `OAuthInteractionLoginDetails`,
366
+ * and exposes Approve / Deny handlers that drive the view's nested
367
+ * `dbxAction` contexts.
368
+ *
369
+ * Submission progress and error states are owned by the action stores; this
370
+ * container is just routing-glue + handler factories.
371
+ *
372
+ * Supports ng-content projection — any content provided is passed through to
373
+ * the view component for the `'no_user'` state (e.g. an app's login view).
197
374
  */
198
375
  declare class DbxOAuthConsentComponent implements OnDestroy {
199
376
  private readonly dbxRouterService;
377
+ private readonly dbxFirebaseAuthService;
200
378
  private readonly interactionService;
201
379
  private readonly oidcConfigService;
202
- readonly config: _angular_core.InputSignal<Maybe<DbxOAuthConsentComponentConfig>>;
380
+ readonly config: i0.InputSignal<Maybe<DbxOAuthConsentComponentConfig>>;
203
381
  readonly interactionUidParamReader: _dereekb_dbx_core.DbxRouteParamReaderInstance<string>;
204
382
  readonly clientIdParamReader: _dereekb_dbx_core.DbxRouteParamReaderInstance<string>;
205
383
  readonly clientNameParamReader: _dereekb_dbx_core.DbxRouteParamReaderInstance<string>;
@@ -212,17 +390,31 @@ declare class DbxOAuthConsentComponent implements OnDestroy {
212
390
  private readonly routeClientUri;
213
391
  private readonly routeLogoUri;
214
392
  private readonly routeScopes;
215
- readonly resolvedInteractionUid: _angular_core.Signal<Maybe<string>>;
216
- readonly resolvedDetails: _angular_core.Signal<Maybe<OAuthInteractionLoginDetails<string>>>;
217
- readonly scopeInjectionConfig: _angular_core.Signal<DbxInjectionComponentConfig<unknown>>;
218
- readonly loading: _angular_core.WritableSignal<boolean>;
219
- readonly error: _angular_core.WritableSignal<string | null>;
393
+ readonly isLoggedIn: Signal<Maybe<boolean>>;
394
+ readonly resolvedInteractionUid: Signal<Maybe<string>>;
395
+ readonly resolvedDetails: Signal<Maybe<OAuthInteractionLoginDetails<string>>>;
396
+ readonly scopeInjectionConfig: Signal<DbxInjectionComponentConfig<unknown>>;
397
+ /**
398
+ * Scopes the user cannot deselect. Forwarded to the view, which shows
399
+ * them as a static "Always granted" hint above the selection list.
400
+ */
401
+ readonly requiredScopes: readonly OidcScope[];
402
+ readonly consentStateCase: Signal<OidcConsentStateCase>;
220
403
  ngOnDestroy(): void;
221
- approve(): void;
222
- deny(): void;
223
- private _submitConsent;
224
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxOAuthConsentComponent, never>;
225
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxOAuthConsentComponent, "dbx-firebase-oauth-consent", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
404
+ /**
405
+ * Handles the Approve action. Pulls the form's selected scope array
406
+ * straight off the form value (it already matches the API field name
407
+ * `grantedOIDCScopes`) and forwards it through `submitConsent`. On a
408
+ * successful response, hard-navigates to the OIDC server's redirect URL.
409
+ */
410
+ readonly handleApprove: WorkUsingContext<OAuthConsentScopesFormValue, OAuthInteractionConsentResponse>;
411
+ /**
412
+ * Handles the Deny action. No payload is sent — the server returns
413
+ * `access_denied` to the OAuth client.
414
+ */
415
+ readonly handleDeny: WorkUsingContext<void, OAuthInteractionConsentResponse>;
416
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxOAuthConsentComponent, never>;
417
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxOAuthConsentComponent, "dbx-firebase-oauth-consent", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
226
418
  }
227
419
 
228
420
  interface OidcEntryClientFormFieldsConfig {
@@ -345,8 +537,8 @@ type DbxFirebaseOidcEntryClientFormComponentConfig = Omit<OidcEntryClientFormFie
345
537
  declare class DbxFirebaseOidcEntryClientForgeFormComponent extends AbstractConfigAsyncForgeFormDirective<DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcEntryClientFormComponentConfig> {
346
538
  private readonly _oidcConfigService;
347
539
  readonly formConfig$: Observable<Maybe<FormConfig>>;
348
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientForgeFormComponent, never>;
349
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientForgeFormComponent, "dbx-firebase-oidc-client-forge-form", never, {}, {}, never, never, true, never>;
540
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientForgeFormComponent, never>;
541
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientForgeFormComponent, "dbx-firebase-oidc-client-forge-form", never, {}, {}, never, never, true, never>;
350
542
  }
351
543
 
352
544
  interface DbxFirebaseOidcModelClientTestFormValue {
@@ -362,59 +554,133 @@ type DbxFirebaseOidcEntryClientTestFormComponentConfig = OidcEntryClientTestForm
362
554
  */
363
555
  declare class DbxFirebaseOidcEntryClientTestForgeFormComponent extends AbstractConfigAsyncForgeFormDirective<DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcEntryClientTestFormComponentConfig> {
364
556
  readonly formConfig$: Observable<Maybe<FormConfig>>;
365
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientTestForgeFormComponent, never>;
366
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientTestForgeFormComponent, "dbx-firebase-oidc-client-test-forge-form", never, {}, {}, never, never, true, never>;
557
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientTestForgeFormComponent, never>;
558
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientTestForgeFormComponent, "dbx-firebase-oidc-client-test-forge-form", never, {}, {}, never, never, true, never>;
559
+ }
560
+
561
+ /**
562
+ * Document store for a single {@link OidcEntry}.
563
+ */
564
+ declare class OidcEntryDocumentStore extends AbstractDbxFirebaseDocumentStore<OidcEntry, OidcEntryDocument> {
565
+ readonly oidcModelFunctions: OidcModelFunctions;
566
+ private readonly _latestClientSecret$;
567
+ /**
568
+ * The client secret from the most recent create operation.
569
+ *
570
+ * Only available immediately after creation — the server does not return it again.
571
+ */
572
+ readonly latestClientSecret$: rxjs.Observable<Maybe<string>>;
573
+ get latestClientSecret(): Maybe<string>;
574
+ constructor();
575
+ readonly createClient: _dereekb_dbx_firebase.DbxFirebaseDocumentStoreCreateFunction<_dereekb_firebase.CreateOidcClientParams, CreateOidcClientResult>;
576
+ readonly updateClient: _dereekb_dbx_firebase.DbxFirebaseDocumentStoreFunction<_dereekb_firebase.UpdateOidcClientParams, void>;
577
+ readonly rotateClientSecret: _dereekb_dbx_firebase.DbxFirebaseDocumentStoreFunction<_dereekb_firebase.TargetModelParams, RotateOidcClientSecretResult>;
578
+ readonly deleteClient: _dereekb_dbx_firebase.DbxFirebaseDocumentStoreFunction<_dereekb_firebase.TargetModelParams, void>;
579
+ readonly deleteToken: _dereekb_dbx_firebase.DbxFirebaseDocumentStoreFunction<_dereekb_firebase.TargetModelParams, void>;
580
+ static ɵfac: i0.ɵɵFactoryDeclaration<OidcEntryDocumentStore, never>;
581
+ static ɵprov: i0.ɵɵInjectableDeclaration<OidcEntryDocumentStore>;
582
+ }
583
+
584
+ /**
585
+ * Wrapper list of {@link OidcEntry} Grant rows belonging to the current user.
586
+ *
587
+ * Renders one row per Grant — i.e. one row per "app with access to my account" —
588
+ * with an inline Revoke button that cascades through every grantable token.
589
+ */
590
+ declare class DbxFirebaseOidcEntryGrantListComponent extends AbstractDbxSelectionListWrapperDirective<OidcEntry> {
591
+ constructor();
592
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryGrantListComponent, never>;
593
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryGrantListComponent, "dbx-firebase-oidc-grant-list", never, {}, {}, never, ["[top]", "[bottom]", "[empty]", "[emptyLoading]", "[end]"], true, never>;
594
+ }
595
+ declare class DbxFirebaseOidcEntryGrantListViewComponent extends AbstractDbxSelectionListViewDirective<OidcEntry> {
596
+ readonly config: DbxSelectionValueListViewConfig<OidcEntry & {
597
+ key: string;
598
+ itemValue: OidcEntry;
599
+ }>;
600
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryGrantListViewComponent, never>;
601
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryGrantListViewComponent, "dbx-firebase-oidc-grant-list-view", never, {}, {}, never, never, true, never>;
602
+ }
603
+ /**
604
+ * Per-row view for a Grant entry. Inline "Revoke" button uses a per-component
605
+ * {@link OidcEntryDocumentStore} keyed to this entry's id so calling
606
+ * `deleteToken` invokes the {@link DeleteOidcTokenParams} callModel against
607
+ * the right document.
608
+ */
609
+ declare class DbxFirebaseOidcEntryGrantListViewItemComponent extends AbstractDbxValueListViewItemComponent<OidcEntry> {
610
+ readonly oidcEntryDocumentStore: OidcEntryDocumentStore;
611
+ readonly clientIdSignal: i0.Signal<string>;
612
+ readonly scopeSignal: i0.Signal<string | null>;
613
+ readonly expiresAtSignal: i0.Signal<Date | null>;
614
+ readonly revokeConfirmConfig: DbxActionConfirmConfig;
615
+ readonly handleRevoke: WorkUsingContext;
616
+ constructor();
617
+ private _payload;
618
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryGrantListViewItemComponent, never>;
619
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryGrantListViewItemComponent, "dbx-firebase-oidc-grant-list-view-item", never, {}, {}, never, never, true, never>;
367
620
  }
368
621
 
369
622
  type OidcEntryWithSelection = DbxValueAsListItem<OidcEntry>;
370
623
  declare class DbxFirebaseOidcEntryClientListComponent extends AbstractDbxSelectionListWrapperDirective<OidcEntry> {
371
624
  constructor();
372
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListComponent, never>;
373
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListComponent, "dbx-firebase-oidc-client-list", never, {}, {}, never, ["[top]", "[bottom]", "[empty]", "[emptyLoading]", "[end]"], true, never>;
625
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListComponent, never>;
626
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListComponent, "dbx-firebase-oidc-client-list", never, {}, {}, never, ["[top]", "[bottom]", "[empty]", "[emptyLoading]", "[end]"], true, never>;
374
627
  }
375
628
  declare class DbxFirebaseOidcEntryClientListViewComponent extends AbstractDbxSelectionListViewDirective<OidcEntry> {
376
629
  readonly config: DbxSelectionValueListViewConfig<OidcEntryWithSelection>;
377
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListViewComponent, never>;
378
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewComponent, "dbx-firebase-oidc-client-list-view", never, {}, {}, never, never, true, never>;
630
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListViewComponent, never>;
631
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewComponent, "dbx-firebase-oidc-client-list-view", never, {}, {}, never, never, true, never>;
379
632
  }
380
633
  declare class DbxFirebaseOidcEntryClientListViewItemClientComponent {
381
- readonly entry: _angular_core.InputSignal<OidcEntry>;
634
+ readonly entry: i0.InputSignal<OidcEntry>;
382
635
  get name(): string;
383
636
  get clientId(): string;
384
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListViewItemClientComponent, never>;
385
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewItemClientComponent, "dbx-firebase-oidc-client-list-view-item-client", never, { "entry": { "alias": "entry"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
637
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListViewItemClientComponent, never>;
638
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewItemClientComponent, "dbx-firebase-oidc-client-list-view-item-client", never, { "entry": { "alias": "entry"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
386
639
  }
387
640
  declare class DbxFirebaseOidcEntryClientListViewItemDefaultComponent {
388
- readonly entry: _angular_core.InputSignal<OidcEntry>;
389
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListViewItemDefaultComponent, never>;
390
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewItemDefaultComponent, "dbx-firebase-oidc-client-list-view-item-default", never, { "entry": { "alias": "entry"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
641
+ readonly entry: i0.InputSignal<OidcEntry>;
642
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListViewItemDefaultComponent, never>;
643
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewItemDefaultComponent, "dbx-firebase-oidc-client-list-view-item-default", never, { "entry": { "alias": "entry"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
391
644
  }
392
645
  declare class DbxFirebaseOidcEntryClientListViewItemComponent extends AbstractDbxValueListViewItemComponent<OidcEntry> {
393
646
  readonly clientType: _dereekb_firebase.OidcEntryType;
394
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListViewItemComponent, never>;
395
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewItemComponent, "ng-component", never, {}, {}, never, never, true, never>;
647
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListViewItemComponent, never>;
648
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewItemComponent, "ng-component", never, {}, {}, never, never, true, never>;
396
649
  }
397
650
 
398
651
  /**
399
- * Document store for a single {@link OidcEntry}.
652
+ * Collection store for querying {@link OidcEntry} documents.
400
653
  */
401
- declare class OidcEntryDocumentStore extends AbstractDbxFirebaseDocumentStore<OidcEntry, OidcEntryDocument> {
402
- readonly oidcModelFunctions: OidcModelFunctions;
403
- private readonly _latestClientSecret$;
404
- /**
405
- * The client secret from the most recent create operation.
406
- *
407
- * Only available immediately after creation — the server does not return it again.
408
- */
409
- readonly latestClientSecret$: rxjs.Observable<Maybe<string>>;
410
- get latestClientSecret(): Maybe<string>;
654
+ declare class OidcEntryCollectionStore extends AbstractDbxFirebaseCollectionStore<OidcEntry, OidcEntryDocument> {
411
655
  constructor();
412
- readonly createClient: _dereekb_dbx_firebase.DbxFirebaseDocumentStoreCreateFunction<_dereekb_firebase.CreateOidcClientParams, CreateOidcClientResult>;
413
- readonly updateClient: _dereekb_dbx_firebase.DbxFirebaseDocumentStoreFunction<_dereekb_firebase.UpdateOidcClientParams, void>;
414
- readonly rotateClientSecret: _dereekb_dbx_firebase.DbxFirebaseDocumentStoreFunction<_dereekb_firebase.TargetModelParams, RotateOidcClientSecretResult>;
415
- readonly deleteClient: _dereekb_dbx_firebase.DbxFirebaseDocumentStoreFunction<_dereekb_firebase.TargetModelParams, void>;
416
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<OidcEntryDocumentStore, never>;
417
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<OidcEntryDocumentStore>;
656
+ static ɵfac: i0.ɵɵFactoryDeclaration<OidcEntryCollectionStore, never>;
657
+ static ɵprov: i0.ɵɵInjectableDeclaration<OidcEntryCollectionStore>;
658
+ }
659
+
660
+ /**
661
+ * Directive providing a {@link OidcEntryCollectionStore} for querying {@link OidcEntry} documents.
662
+ */
663
+ declare class OidcEntryCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective<OidcEntry, OidcEntryDocument, OidcEntryCollectionStore> {
664
+ constructor();
665
+ static ɵfac: i0.ɵɵFactoryDeclaration<OidcEntryCollectionStoreDirective, never>;
666
+ static ɵdir: i0.ɵɵDirectiveDeclaration<OidcEntryCollectionStoreDirective, "[dbxOidcEntryCollection]", never, {}, {}, never, never, true, never>;
667
+ }
668
+
669
+ /**
670
+ * Drop-in container for the "apps with access to my account" management UI.
671
+ *
672
+ * Wires a {@link OidcEntryCollectionStoreDirective} to query Grant entries
673
+ * for the signed-in user, then renders {@link DbxFirebaseOidcEntryGrantListComponent}
674
+ * with inline Revoke buttons. No inputs — the container resolves the current
675
+ * user via {@link DbxFirebaseAuthService}.
676
+ */
677
+ declare class DbxFirebaseOidcEntryGrantListContainerComponent implements OnInit {
678
+ readonly dbxFirebaseAuthService: DbxFirebaseAuthService;
679
+ readonly oidcEntryCollectionStoreDirective: i0.Signal<OidcEntryCollectionStoreDirective | undefined>;
680
+ readonly grantConstraintsSignal: i0.Signal<FirestoreQueryConstraint<unknown>[] | undefined>;
681
+ ngOnInit(): void;
682
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryGrantListContainerComponent, never>;
683
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryGrantListContainerComponent, "dbx-firebase-oidc-grant-list-container", never, {}, {}, never, never, true, never>;
418
684
  }
419
685
 
420
686
  /**
@@ -426,11 +692,11 @@ declare class OidcEntryDocumentStore extends AbstractDbxFirebaseDocumentStore<Oi
426
692
  declare class DbxFirebaseOidcEntryClientCreateComponent {
427
693
  readonly oidcEntryDocumentStore: OidcEntryDocumentStore;
428
694
  readonly formConfig: DbxFirebaseOidcEntryClientFormComponentConfig;
429
- readonly createClientOwnerTarget: _angular_core.InputSignal<Maybe<string>>;
430
- readonly clientCreated: _angular_core.OutputEmitterRef<CreateOidcClientResult>;
695
+ readonly createClientOwnerTarget: i0.InputSignal<Maybe<string>>;
696
+ readonly clientCreated: i0.OutputEmitterRef<CreateOidcClientResult>;
431
697
  readonly handleCreateClient: WorkUsingContext<DbxFirebaseOidcModelClientFormValue>;
432
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientCreateComponent, never>;
433
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientCreateComponent, "dbx-firebase-oidc-entry-client-create", never, { "createClientOwnerTarget": { "alias": "createClientOwnerTarget"; "required": false; "isSignal": true; }; }, { "clientCreated": "clientCreated"; }, never, never, true, never>;
698
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientCreateComponent, never>;
699
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientCreateComponent, "dbx-firebase-oidc-entry-client-create", never, { "createClientOwnerTarget": { "alias": "createClientOwnerTarget"; "required": false; "isSignal": true; }; }, { "clientCreated": "clientCreated"; }, never, never, true, never>;
434
700
  }
435
701
 
436
702
  /**
@@ -445,33 +711,33 @@ declare class DbxFirebaseOidcEntryClientTestComponent {
445
711
  /**
446
712
  * Scopes the user can pick from. Overrides the service default when provided.
447
713
  */
448
- readonly availableScopes: _angular_core.InputSignal<Maybe<OidcScopeDetails[]>>;
714
+ readonly availableScopes: i0.InputSignal<Maybe<OidcScopeDetails[]>>;
449
715
  /**
450
716
  * Path to the authorization endpoint. Overrides the service default when provided.
451
717
  */
452
- readonly oidcAuthorizationEndpointApiPath: _angular_core.InputSignal<Maybe<string>>;
453
- readonly resolvedAvailableScopes: _angular_core.Signal<OidcScopeDetails[]>;
454
- readonly resolvedAuthorizationEndpointPath: _angular_core.Signal<string>;
455
- readonly redirectUrisSignal: _angular_core.Signal<string[] | undefined>;
456
- readonly clientIdSignal: _angular_core.Signal<string | undefined>;
457
- readonly formConfig: _angular_core.Signal<OidcEntryClientTestFormFieldsConfig>;
718
+ readonly oidcAuthorizationEndpointApiPath: i0.InputSignal<Maybe<string>>;
719
+ readonly resolvedAvailableScopes: i0.Signal<OidcScopeDetails[]>;
720
+ readonly resolvedAuthorizationEndpointPath: i0.Signal<string>;
721
+ readonly redirectUrisSignal: i0.Signal<string[] | undefined>;
722
+ readonly clientIdSignal: i0.Signal<string | undefined>;
723
+ readonly formConfig: i0.Signal<OidcEntryClientTestFormFieldsConfig>;
458
724
  readonly formTemplate$: rxjs.Observable<DbxFirebaseOidcModelClientTestFormValue>;
459
- readonly codeVerifier: _angular_core.WritableSignal<string>;
460
- readonly codeChallenge: _angular_core.WritableSignal<string>;
461
- readonly state: _angular_core.WritableSignal<string>;
462
- readonly nonce: _angular_core.WritableSignal<string>;
725
+ readonly codeVerifier: i0.WritableSignal<string>;
726
+ readonly codeChallenge: i0.WritableSignal<string>;
727
+ readonly state: i0.WritableSignal<string>;
728
+ readonly nonce: i0.WritableSignal<string>;
463
729
  /**
464
730
  * The current form value, updated by the form via dbxFormValueChange.
465
731
  */
466
- readonly formValue: _angular_core.WritableSignal<Maybe<DbxFirebaseOidcModelClientTestFormValue>>;
467
- readonly authorizationUrlSignal: _angular_core.Signal<string | undefined>;
732
+ readonly formValue: i0.WritableSignal<Maybe<DbxFirebaseOidcModelClientTestFormValue>>;
733
+ readonly authorizationUrlSignal: i0.Signal<string | undefined>;
468
734
  constructor();
469
735
  onFormValueChange(value: Maybe<DbxFirebaseOidcModelClientTestFormValue>): void;
470
736
  openAuthorizationUrl(): void;
471
737
  regeneratePkce(): void;
472
738
  private _updateCodeChallenge;
473
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientTestComponent, never>;
474
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientTestComponent, "dbx-firebase-oidc-entry-client-test", never, { "availableScopes": { "alias": "availableScopes"; "required": false; "isSignal": true; }; "oidcAuthorizationEndpointApiPath": { "alias": "oidcAuthorizationEndpointApiPath"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
739
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientTestComponent, never>;
740
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientTestComponent, "dbx-firebase-oidc-entry-client-test", never, { "availableScopes": { "alias": "availableScopes"; "required": false; "isSignal": true; }; "oidcAuthorizationEndpointApiPath": { "alias": "oidcAuthorizationEndpointApiPath"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
475
741
  }
476
742
 
477
743
  /**
@@ -484,8 +750,8 @@ declare class DbxFirebaseOidcEntryClientUpdateComponent {
484
750
  readonly formConfig: DbxFirebaseOidcEntryClientFormComponentConfig;
485
751
  readonly formTemplate$: rxjs.Observable<_dereekb_firebase.UpdateOidcClientFieldParams>;
486
752
  readonly handleUpdateClient: WorkUsingContext<DbxFirebaseOidcModelClientUpdateFormValue>;
487
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientUpdateComponent, never>;
488
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientUpdateComponent, "dbx-firebase-oidc-entry-client-update", never, {}, {}, never, never, true, never>;
753
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientUpdateComponent, never>;
754
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientUpdateComponent, "dbx-firebase-oidc-entry-client-update", never, {}, {}, never, never, true, never>;
489
755
  }
490
756
 
491
757
  /**
@@ -496,30 +762,12 @@ declare class DbxFirebaseOidcEntryClientUpdateComponent {
496
762
  */
497
763
  declare class DbxFirebaseOidcEntryClientViewComponent {
498
764
  readonly oidcEntryDocumentStore: OidcEntryDocumentStore;
499
- readonly clientIdSignal: _angular_core.Signal<string | undefined>;
500
- readonly latestClientSecretSignal: _angular_core.Signal<_dereekb_util.Maybe<string>>;
765
+ readonly clientIdSignal: i0.Signal<string | undefined>;
766
+ readonly latestClientSecretSignal: i0.Signal<_dereekb_util.Maybe<string>>;
501
767
  readonly rotateSecretConfirmConfig: DbxActionConfirmConfig;
502
768
  readonly handleRotateClientSecret: WorkUsingContext;
503
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientViewComponent, never>;
504
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientViewComponent, "dbx-firebase-oidc-entry-client-view", never, {}, {}, never, never, true, never>;
505
- }
506
-
507
- /**
508
- * Collection store for querying {@link OidcEntry} documents.
509
- */
510
- declare class OidcEntryCollectionStore extends AbstractDbxFirebaseCollectionStore<OidcEntry, OidcEntryDocument> {
511
- constructor();
512
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<OidcEntryCollectionStore, never>;
513
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<OidcEntryCollectionStore>;
514
- }
515
-
516
- /**
517
- * Directive providing a {@link OidcEntryCollectionStore} for querying {@link OidcEntry} documents.
518
- */
519
- declare class OidcEntryCollectionStoreDirective extends DbxFirebaseCollectionStoreDirective<OidcEntry, OidcEntryDocument, OidcEntryCollectionStore> {
520
- constructor();
521
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<OidcEntryCollectionStoreDirective, never>;
522
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OidcEntryCollectionStoreDirective, "[dbxOidcEntryCollection]", never, {}, {}, never, never, true, never>;
769
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientViewComponent, never>;
770
+ static ɵcmp: i0.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientViewComponent, "dbx-firebase-oidc-entry-client-view", never, {}, {}, never, never, true, never>;
523
771
  }
524
772
 
525
773
  /**
@@ -527,8 +775,8 @@ declare class OidcEntryCollectionStoreDirective extends DbxFirebaseCollectionSto
527
775
  */
528
776
  declare class OidcEntryDocumentStoreDirective extends DbxFirebaseDocumentStoreDirective<OidcEntry, OidcEntryDocument, OidcEntryDocumentStore> {
529
777
  constructor();
530
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<OidcEntryDocumentStoreDirective, never>;
531
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OidcEntryDocumentStoreDirective, "[dbxOidcEntryDocument]", never, {}, {}, never, never, true, never>;
778
+ static ɵfac: i0.ɵɵFactoryDeclaration<OidcEntryDocumentStoreDirective, never>;
779
+ static ɵdir: i0.ɵɵDirectiveDeclaration<OidcEntryDocumentStoreDirective, "[dbxOidcEntryDocument]", never, {}, {}, never, never, true, never>;
532
780
  }
533
781
 
534
782
  declare const DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH = "/oidc/auth";
@@ -597,8 +845,8 @@ declare class DbxFirebaseOidcConfigService {
597
845
  get tokenEndpointAuthMethods(): OidcTokenEndpointAuthMethod[];
598
846
  get oauthInteractionRoute(): Maybe<SegueRefOrSegueRefRouterLink>;
599
847
  get consentScopeListViewClass(): Maybe<Type<AbstractDbxFirebaseOAuthConsentScopeViewComponent>>;
600
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcConfigService, never>;
601
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<DbxFirebaseOidcConfigService>;
848
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcConfigService, never>;
849
+ static ɵprov: i0.ɵɵInjectableDeclaration<DbxFirebaseOidcConfigService>;
602
850
  }
603
851
 
604
852
  /**
@@ -674,16 +922,22 @@ declare class DbxFirebaseOidcInteractionService {
674
922
  /**
675
923
  * Submit consent decision to complete the consent interaction.
676
924
  *
677
- * Automatically attaches the current user's Firebase ID token.
925
+ * Automatically attaches the current user's Firebase ID token. When `approved`
926
+ * is true, optional `grants` may be passed to grant only a subset of the
927
+ * requested scopes/claims/resource scopes; the server validates that any
928
+ * subset is contained in the corresponding `missing*` set on the prompt.
929
+ *
930
+ * When `approved` is false, `grants` is ignored (not sent).
678
931
  *
679
932
  * @param uid - The OIDC interaction UID identifying the current consent interaction.
680
933
  * @param approved - Whether the user approved or denied the consent request.
934
+ * @param grants - Optional subset of OIDC scopes / OIDC claims / resource scopes to grant.
681
935
  * @returns Observable that emits the redirect URL from the server response.
682
936
  */
683
- submitConsent(uid: OidcInteractionUid, approved: boolean): Observable<OAuthInteractionConsentResponse>;
684
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcInteractionService, never>;
685
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<DbxFirebaseOidcInteractionService>;
937
+ submitConsent(uid: OidcInteractionUid, approved: boolean, grants?: Pick<OAuthInteractionConsentRequest, 'grantedOIDCScopes' | 'grantedOIDCClaims' | 'grantedResourceScopes'>): Observable<OAuthInteractionConsentResponse>;
938
+ static ɵfac: i0.ɵɵFactoryDeclaration<DbxFirebaseOidcInteractionService, never>;
939
+ static ɵprov: i0.ɵɵInjectableDeclaration<DbxFirebaseOidcInteractionService>;
686
940
  }
687
941
 
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 };
689
- export type { DbxFirebaseOAuthConsentScopesViewData, DbxFirebaseOidcEntryClientFormComponentConfig, DbxFirebaseOidcEntryClientTestFormComponentConfig, DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcModelClientUpdateFormValue, DbxOAuthConsentComponentConfig, OAuthConsentScope, OidcEntryClientFormFieldsConfig, OidcEntryClientTestFormFieldsConfig, OidcEntryWithSelection, OidcLoginStateCase, ProvideDbxFirebaseOidcConfig };
942
+ 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, DbxFirebaseOAuthConsentScopeFormComponent, DbxFirebaseOAuthConsentScopeListComponent, DbxFirebaseOAuthConsentScopeListItemComponent, DbxFirebaseOAuthConsentScopeListViewComponent, DbxFirebaseOAuthConsentViewComponent, DbxFirebaseOAuthLoginComponent, DbxFirebaseOAuthLoginViewComponent, DbxFirebaseOidcConfig, DbxFirebaseOidcConfigService, DbxFirebaseOidcEntryClientCreateComponent, DbxFirebaseOidcEntryClientForgeFormComponent, DbxFirebaseOidcEntryClientListComponent, DbxFirebaseOidcEntryClientListViewComponent, DbxFirebaseOidcEntryClientListViewItemClientComponent, DbxFirebaseOidcEntryClientListViewItemComponent, DbxFirebaseOidcEntryClientListViewItemDefaultComponent, DbxFirebaseOidcEntryClientTestComponent, DbxFirebaseOidcEntryClientTestForgeFormComponent, DbxFirebaseOidcEntryClientUpdateComponent, DbxFirebaseOidcEntryClientViewComponent, DbxFirebaseOidcEntryGrantListComponent, DbxFirebaseOidcEntryGrantListContainerComponent, DbxFirebaseOidcEntryGrantListViewComponent, DbxFirebaseOidcEntryGrantListViewItemComponent, DbxFirebaseOidcInteractionService, DbxOAuthConsentComponent, OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_DEFAULT_MESSAGE, OAUTH_CONSENT_SCOPES_REQUIRED_VALIDATOR_KIND, OidcEntryCollectionStore, OidcEntryCollectionStoreDirective, OidcEntryDocumentStore, OidcEntryDocumentStoreDirective, oauthConsentScopesFormConfig, oidcClientHomepageUriForgeField, oidcClientJwksUriForgeField, oidcClientLogoUriForgeField, oidcClientNameForgeField, oidcClientRedirectUrisForgeField, oidcClientTestClientIdForgeField, oidcClientTestRedirectUriForgeField, oidcClientTestScopesForgeField, oidcClientTokenEndpointAuthMethodForgeField, oidcEntryClientForgeFormFields, oidcEntryClientTestForgeFormFields, oidcEntryClientUpdateForgeFormFields, provideDbxFirebaseOidc, provideOidcModelFirestoreCollections };
943
+ export type { DbxFirebaseOAuthConsentScopesViewData, DbxFirebaseOidcEntryClientFormComponentConfig, DbxFirebaseOidcEntryClientTestFormComponentConfig, DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcModelClientUpdateFormValue, DbxOAuthConsentComponentConfig, OAuthConsentScope, OAuthConsentScopesFormFieldsConfig, OAuthConsentScopesFormValue, OidcConsentStateCase, OidcEntryClientFormFieldsConfig, OidcEntryClientTestFormFieldsConfig, OidcEntryWithSelection, OidcLoginStateCase, ProvideDbxFirebaseOidcConfig };