@dereekb/dbx-firebase 5.2.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
- import { urlWithoutParameters, addToSet, removeFromSet, filterMaybeValues, mapIterable, asArray, excludeValuesFromArray, containsStringAnyCase, forEachKeyValue, readableError, isMaybeSo } from '@dereekb/util';
1
+ import { urlWithoutParameters, cachedGetter, addToSet, removeFromSet, filterMaybeValues, mapIterable, asArray, excludeValuesFromArray, containsStringAnyCase, addToSetCopy, forEachKeyValue, readableError, isMaybeSo } from '@dereekb/util';
2
2
  import * as i0 from '@angular/core';
3
3
  import { InjectionToken, Injectable, Inject, Optional, Component, Input, Directive, EventEmitter, Output, NgModule, Injector, forwardRef, Host } from '@angular/core';
4
4
  import { getToken, initializeAppCheck, ReCaptchaV3Provider } from 'firebase/app-check';
5
- import { switchMap, from, first, map, of, shareReplay, timeout, startWith, distinctUntilChanged, BehaviorSubject, combineLatest, tap, firstValueFrom, Subject, throttleTime, NEVER, filter, take, exhaustMap } from 'rxjs';
5
+ import { switchMap, from, first, map, of, shareReplay, timeout, startWith, distinctUntilChanged, firstValueFrom, BehaviorSubject, combineLatest, tap, Subject, throttleTime, NEVER, filter, take, exhaustMap } from 'rxjs';
6
6
  import * as i1 from '@angular/fire/app-check';
7
7
  import { provideAppCheck } from '@angular/fire/app-check';
8
8
  import * as i4 from '@angular/material/button';
@@ -118,6 +118,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
118
118
  args: [DBX_FIREBASE_OPTIONS_TOKEN]
119
119
  }] }, { type: i1.AppCheck }]; } });
120
120
 
121
+ function authUserInfoFromAuthUser(user) {
122
+ return {
123
+ displayName: user?.displayName,
124
+ email: user.email,
125
+ phoneNumber: user.phoneNumber,
126
+ photoURL: user.photoURL,
127
+ uid: user.uid
128
+ };
129
+ }
130
+ function firebaseAuthTokenFromUser(user) {
131
+ return {
132
+ email: user.email,
133
+ emailVerified: user.emailVerified,
134
+ phoneNumber: user.phoneNumber
135
+ };
136
+ }
137
+
121
138
  /**
122
139
  * Derives a user state from the input firebase auth service.
123
140
  *
@@ -156,16 +173,7 @@ function readValueFromIdToken(dbxFirebaseAuthService, readBooleanFromIdToken, de
156
173
  }));
157
174
  }
158
175
 
159
- function authUserInfoFromAuthUser(user) {
160
- return {
161
- displayName: user?.displayName,
162
- email: user.email,
163
- phoneNumber: user.phoneNumber,
164
- photoURL: user.photoURL,
165
- uid: user.uid
166
- };
167
- }
168
-
176
+ // MARK: Delegate
169
177
  class DbxFirebaseAuthServiceDelegate {
170
178
  }
171
179
  const DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE = {
@@ -179,6 +187,7 @@ const DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE = {
179
187
  return dbxFirebaseAuthService.authUserState$.pipe(map((x) => x === 'user'));
180
188
  }
181
189
  };
190
+ // MARK: Service
182
191
  class DbxFirebaseAuthService {
183
192
  constructor(firebaseAuth, delegate) {
184
193
  this.firebaseAuth = firebaseAuth;
@@ -204,6 +213,21 @@ class DbxFirebaseAuthService {
204
213
  this.authUserState$ = delegate.authUserStateObs(this).pipe(distinctUntilChanged(), shareReplay(1));
205
214
  this.authRoles$ = delegate.authRolesObs(this);
206
215
  this.isOnboarded$ = delegate.isOnboarded(this);
216
+ this._authRoleClaimsService = delegate.authRoleClaimsService;
217
+ }
218
+ rolesForClaims(claims) {
219
+ let result;
220
+ if (this._authRoleClaimsService) {
221
+ return this._authRoleClaimsService.toRoles(claims);
222
+ }
223
+ else {
224
+ console.warn('DbxFirebaseAuthService: rolesForClaims called with no authRoleClaimsService provided. An empty set is returned.');
225
+ result = new Set();
226
+ }
227
+ return result;
228
+ }
229
+ getAuthContextInfo() {
230
+ return firstValueFrom(this.authUser$).then((user) => (user ? new DbxFirebaseAuthContextInfo(this, user) : undefined));
207
231
  }
208
232
  logInWithGoogle() {
209
233
  return this.logInWithPopup(new GoogleAuthProvider());
@@ -254,6 +278,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
254
278
  }], ctorParameters: function () { return [{ type: i1$1.Auth }, { type: DbxFirebaseAuthServiceDelegate, decorators: [{
255
279
  type: Optional
256
280
  }] }]; } });
281
+ /**
282
+ * FirebaseAuthContextInfo implementation from DbxFirebaseAuthService.
283
+ */
284
+ class DbxFirebaseAuthContextInfo {
285
+ constructor(service, user) {
286
+ this.service = service;
287
+ this.user = user;
288
+ this._token = cachedGetter(() => firebaseAuthTokenFromUser(this.user));
289
+ }
290
+ get uid() {
291
+ return this.user.uid;
292
+ }
293
+ loadClaims() {
294
+ return this.user.getIdTokenResult().then((x) => x.claims);
295
+ }
296
+ loadAuthRoles() {
297
+ return this.loadClaims().then((x) => this.service.rolesForClaims(x));
298
+ }
299
+ get token() {
300
+ return this._token();
301
+ }
302
+ }
257
303
 
258
304
  class DbxFirebaseLoginTermsConfig {
259
305
  }
@@ -1340,6 +1386,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
1340
1386
  }]
1341
1387
  }], ctorParameters: function () { return [{ type: DbxFirebaseLoginModuleRootConfig }, { type: DbxFirebaseAuthLoginService }]; } });
1342
1388
 
1389
+ function authRolesObsWithClaimsService(config) {
1390
+ const { addAuthUserStateToRoles: addAuthUserState, claimsService } = config;
1391
+ return (dbxFirebaseAuthService) => {
1392
+ let obs = dbxFirebaseAuthService.idTokenResult$.pipe(map((x) => claimsService.toRoles(x.claims)));
1393
+ if (addAuthUserState) {
1394
+ obs = obs.pipe(switchMap((authRoleSet) => dbxFirebaseAuthService.authUserState$.pipe(map((userState) => addToSetCopy(authRoleSet, [userState])))));
1395
+ }
1396
+ return obs;
1397
+ };
1398
+ }
1399
+ function defaultDbxFirebaseAuthServiceDelegateWithClaimsService(config) {
1400
+ return {
1401
+ authUserStateObs: DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE.authUserStateObs,
1402
+ authRolesObs: authRolesObsWithClaimsService(config),
1403
+ isOnboarded: DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE.isOnboarded,
1404
+ authRoleClaimsService: config.claimsService
1405
+ };
1406
+ }
1407
+
1343
1408
  class DbxFirebaseAuthModule {
1344
1409
  static forRoot(config) {
1345
1410
  const providers = [
@@ -1442,7 +1507,7 @@ DbxFirebaseDefaultAppCheckProviderModule.ɵinj = i0.ɵɵngDeclareInjector({ minV
1442
1507
  provider: new ReCaptchaV3Provider(appCheckOptions.reCaptchaV3),
1443
1508
  isTokenAutoRefreshEnabled: appCheckOptions.isTokenAutoRefreshEnabled ?? true
1444
1509
  });
1445
- console.debug('Enabled AppCheck.');
1510
+ console.log('Enabled AppCheck.');
1446
1511
  }
1447
1512
  else {
1448
1513
  appCheck = undefined;
@@ -1473,7 +1538,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
1473
1538
  provider: new ReCaptchaV3Provider(appCheckOptions.reCaptchaV3),
1474
1539
  isTokenAutoRefreshEnabled: appCheckOptions.isTokenAutoRefreshEnabled ?? true
1475
1540
  });
1476
- console.debug('Enabled AppCheck.');
1541
+ console.log('Enabled AppCheck.');
1477
1542
  }
1478
1543
  else {
1479
1544
  appCheck = undefined;
@@ -2499,5 +2564,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
2499
2564
  * Generated bundle index. Do not edit.
2500
2565
  */
2501
2566
 
2502
- export { AbstractConfiguredDbxFirebaseLoginButtonDirective, AbstractDbxFirebaseCollectionStore, AbstractDbxFirebaseCollectionWithParentStore, AbstractDbxFirebaseDocumentStore, AbstractDbxFirebaseDocumentWithParentStore, DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR, DBX_FIREBASE_OPTIONS_TOKEN, DBX_FIREBASE_ROUTER_SYNC_DEFAULT_ID_PARAM_KEY, DBX_FIRESTORE_CONTEXT_TOKEN, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE, DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN, DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY, DbxFirebaseAppCheckHttpInterceptor, DbxFirebaseAuthLoginService, DbxFirebaseAuthModule, DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseCollectionListDirective, DbxFirebaseCollectionLoaderInstance, DbxFirebaseCollectionStoreDirective, DbxFirebaseCollectionWithParentStoreDirective, DbxFirebaseDefaultAppCheckProviderModule, DbxFirebaseDefaultAuthProviderModule, DbxFirebaseDefaultFirebaseProvidersModule, DbxFirebaseDefaultFirestoreProviderModule, DbxFirebaseDefaultFunctionsProviderModule, DbxFirebaseDefaultStorageProviderModule, DbxFirebaseDocumentAuthIdDirective, DbxFirebaseDocumentStoreDirective, DbxFirebaseDocumentStoreRouteIdDirective, DbxFirebaseEmailFormComponent, DbxFirebaseEmailRecoveryFormComponent, DbxFirebaseEmulatorModule, DbxFirebaseFirestoreCollectionModule, DbxFirebaseFunctionsModule, DbxFirebaseLoginAnonymousComponent, DbxFirebaseLoginAppleComponent, DbxFirebaseLoginButtonComponent, DbxFirebaseLoginButtonContainerComponent, DbxFirebaseLoginComponent, DbxFirebaseLoginContext, DbxFirebaseLoginContextBackButtonComponent, DbxFirebaseLoginContextDirective, DbxFirebaseLoginEmailComponent, DbxFirebaseLoginEmailContentComponent, DbxFirebaseLoginFacebookComponent, DbxFirebaseLoginGitHubComponent, DbxFirebaseLoginGoogleComponent, DbxFirebaseLoginListComponent, DbxFirebaseLoginMicrosoftComponent, DbxFirebaseLoginModule, DbxFirebaseLoginModuleRootConfig, DbxFirebaseLoginTermsComponent, DbxFirebaseLoginTermsSimpleComponent, DbxFirebaseLoginTwitterComponent, DbxFirebaseModelModule, DbxFirebaseModelStoreModule, DbxFirebaseModule, DbxFirebaseParsedEmulatorsConfig, DbxFirebaseRegisterComponent, DbxFirebaseRegisterEmailComponent, DbxFirestoreContextService, FIREBASE_AUTH_NETWORK_REQUEST_ERROR, FIREBASE_AUTH_USER_NOT_FOUND_ERROR, OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY, authUserInfoFromAuthUser, authUserStateFromFirebaseAuthService, dbxFirebaseCollectionLoaderInstance, dbxFirebaseCollectionLoaderInstanceWithCollection, defaultFirebaseAuthLoginProvidersFactory, enableAppCheckDebugTokenGeneration, firebaseAuthErrorToReadableError, modelDoesNotExistError, provideDbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionWithParentStoreDirective, provideDbxFirebaseDocumentStoreDirective, readValueFromIdToken, setParentStoreEffect };
2567
+ export { AbstractConfiguredDbxFirebaseLoginButtonDirective, AbstractDbxFirebaseCollectionStore, AbstractDbxFirebaseCollectionWithParentStore, AbstractDbxFirebaseDocumentStore, AbstractDbxFirebaseDocumentWithParentStore, DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR, DBX_FIREBASE_OPTIONS_TOKEN, DBX_FIREBASE_ROUTER_SYNC_DEFAULT_ID_PARAM_KEY, DBX_FIRESTORE_CONTEXT_TOKEN, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE, DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN, DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY, DbxFirebaseAppCheckHttpInterceptor, DbxFirebaseAuthContextInfo, DbxFirebaseAuthLoginService, DbxFirebaseAuthModule, DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseCollectionListDirective, DbxFirebaseCollectionLoaderInstance, DbxFirebaseCollectionStoreDirective, DbxFirebaseCollectionWithParentStoreDirective, DbxFirebaseDefaultAppCheckProviderModule, DbxFirebaseDefaultAuthProviderModule, DbxFirebaseDefaultFirebaseProvidersModule, DbxFirebaseDefaultFirestoreProviderModule, DbxFirebaseDefaultFunctionsProviderModule, DbxFirebaseDefaultStorageProviderModule, DbxFirebaseDocumentAuthIdDirective, DbxFirebaseDocumentStoreDirective, DbxFirebaseDocumentStoreRouteIdDirective, DbxFirebaseEmailFormComponent, DbxFirebaseEmailRecoveryFormComponent, DbxFirebaseEmulatorModule, DbxFirebaseFirestoreCollectionModule, DbxFirebaseFunctionsModule, DbxFirebaseLoginAnonymousComponent, DbxFirebaseLoginAppleComponent, DbxFirebaseLoginButtonComponent, DbxFirebaseLoginButtonContainerComponent, DbxFirebaseLoginComponent, DbxFirebaseLoginContext, DbxFirebaseLoginContextBackButtonComponent, DbxFirebaseLoginContextDirective, DbxFirebaseLoginEmailComponent, DbxFirebaseLoginEmailContentComponent, DbxFirebaseLoginFacebookComponent, DbxFirebaseLoginGitHubComponent, DbxFirebaseLoginGoogleComponent, DbxFirebaseLoginListComponent, DbxFirebaseLoginMicrosoftComponent, DbxFirebaseLoginModule, DbxFirebaseLoginModuleRootConfig, DbxFirebaseLoginTermsComponent, DbxFirebaseLoginTermsSimpleComponent, DbxFirebaseLoginTwitterComponent, DbxFirebaseModelModule, DbxFirebaseModelStoreModule, DbxFirebaseModule, DbxFirebaseParsedEmulatorsConfig, DbxFirebaseRegisterComponent, DbxFirebaseRegisterEmailComponent, DbxFirestoreContextService, FIREBASE_AUTH_NETWORK_REQUEST_ERROR, FIREBASE_AUTH_USER_NOT_FOUND_ERROR, OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY, authRolesObsWithClaimsService, authUserInfoFromAuthUser, authUserStateFromFirebaseAuthService, dbxFirebaseCollectionLoaderInstance, dbxFirebaseCollectionLoaderInstanceWithCollection, defaultDbxFirebaseAuthServiceDelegateWithClaimsService, defaultFirebaseAuthLoginProvidersFactory, enableAppCheckDebugTokenGeneration, firebaseAuthErrorToReadableError, firebaseAuthTokenFromUser, modelDoesNotExistError, provideDbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionWithParentStoreDirective, provideDbxFirebaseDocumentStoreDirective, readValueFromIdToken, setParentStoreEffect };
2503
2568
  //# sourceMappingURL=dereekb-dbx-firebase.mjs.map