@dereekb/dbx-firebase 8.1.2 → 8.2.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.
- package/esm2020/lib/model/store/store.document.router.directive.mjs +48 -12
- package/fesm2015/dereekb-dbx-firebase.mjs +47 -12
- package/fesm2015/dereekb-dbx-firebase.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-firebase.mjs +47 -11
- package/fesm2020/dereekb-dbx-firebase.mjs.map +1 -1
- package/lib/model/store/store.document.router.directive.d.ts +14 -2
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dereekb-dbx-firebase.mjs","sources":["../../../../packages/dbx-firebase/src/lib/auth/appcheck/appcheck.ts","../../../../packages/dbx-firebase/src/lib/firebase/options.ts","../../../../packages/dbx-firebase/src/lib/auth/appcheck/appcheck.interceptor.ts","../../../../packages/dbx-firebase/src/lib/auth/auth.ts","../../../../packages/dbx-firebase/src/lib/auth/service/firebase.auth.rxjs.ts","../../../../packages/dbx-firebase/src/lib/auth/service/firebase.auth.service.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.terms.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.terms.simple.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.password.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.service.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.context.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.button.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.apple.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.anonymous.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.list.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.context.directive.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.component.ts","../../../../packages/dbx-firebase/src/lib/auth/error.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.form.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.recovery.form.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.content.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.content.component.html","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.facebook.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.google.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/register.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.github.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.twitter.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.microsoft.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/register.email.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/register.email.component.html","../../../../packages/dbx-firebase/src/lib/auth/login/login.terms.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.context.back.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/firebase.login.module.ts","../../../../packages/dbx-firebase/src/lib/auth/service/firebase.auth.service.delegate.ts","../../../../packages/dbx-firebase/src/lib/auth/firebase.auth.module.ts","../../../../packages/dbx-firebase/src/lib/firebase/emulators.ts","../../../../packages/dbx-firebase/src/lib/firebase/firebase.module.ts","../../../../packages/dbx-firebase/src/lib/firebase/firebase.emulator.module.ts","../../../../packages/dbx-firebase/src/lib/firestore/firebase.firestore.ts","../../../../packages/dbx-firebase/src/lib/firestore/firebase.firestore.module.ts","../../../../packages/dbx-firebase/src/lib/firestore/firebase.firestore.context.service.ts","../../../../packages/dbx-firebase/src/lib/function/firebase.function.module.ts","../../../../packages/dbx-firebase/src/lib/model/loader/collection.loader.instance.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.change.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.change.if.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.list.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.auth.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.router.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/model.store.module.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.ts","../../../../packages/dbx-firebase/src/lib/model/error.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.crud.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.subcollection.rxjs.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.subcollection.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.subcollection.document.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.subcollection.directive.ts","../../../../packages/dbx-firebase/src/lib/model/model.module.ts","../../../../packages/dbx-firebase/src/lib/module.ts","../../../../packages/dbx-firebase/src/dereekb-dbx-firebase.ts"],"sourcesContent":["/**\n * Enables debug token generation for AppCheck by setting FIREBASE_APPCHECK_DEBUG_TOKEN in the browser's self/window.\n *\n * https://firebase.google.com/docs/app-check/web/debug-provider\n *\n * @param enable\n */\nexport function enableAppCheckDebugTokenGeneration(enable = true) {\n (self as unknown as { FIREBASE_APPCHECK_DEBUG_TOKEN: boolean }).FIREBASE_APPCHECK_DEBUG_TOKEN = enable;\n}\n","import { InjectionToken } from '@angular/core';\nimport { FirebaseOptions } from 'firebase/app';\nimport { DbxFirebaseLoginModuleRootConfig } from '../auth/login/firebase.login.module';\nimport { DbxFirebaseAppCheckConfig } from './appcheck';\nimport { DbxFirebaseEmulatorsConfig } from './emulators';\n\nexport const DBX_FIREBASE_OPTIONS_TOKEN = new InjectionToken('DbxFirebaseOptions');\n\nexport interface DbxFirebaseOptions extends FirebaseOptions, Pick<DbxFirebaseLoginModuleRootConfig, 'enabledLoginMethods'> {\n emulators: DbxFirebaseEmulatorsConfig;\n /**\n * Firebase AppCheck handling\n */\n appCheck?: DbxFirebaseAppCheckConfig;\n /**\n * Passed to the Functions initialization to set the domain to use when sending requests.\n */\n functionsRegionOrCustomDomain?: string | undefined;\n}\n","import { urlWithoutParameters } from '@dereekb/util';\nimport { DBX_FIREBASE_OPTIONS_TOKEN, DbxFirebaseOptions } from '../../firebase/options';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\nimport { getToken } from 'firebase/app-check';\nimport { Observable, switchMap, first, map, from } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { AppCheck } from '@angular/fire/app-check';\n\ninterface EnabledAppCheckRoute {\n isWildcard: boolean;\n match: string;\n}\n\n/**\n * HTTP Interceptor that sets the X-Firebase-AppCheck for any requests to the routes configured in DbxFirebaseOptions.\n */\n@Injectable()\nexport class DbxFirebaseAppCheckHttpInterceptor implements HttpInterceptor {\n private _isEnabled: boolean;\n private _appCheckRoutes: EnabledAppCheckRoute[];\n\n constructor(@Inject(DBX_FIREBASE_OPTIONS_TOKEN) private dbxFirebaseOptions: DbxFirebaseOptions, private appCheck: AppCheck) {\n let routes: EnabledAppCheckRoute[] = [];\n\n if (appCheck != null) {\n routes = (this.dbxFirebaseOptions.appCheck?.appCheckRoutes ?? ['/api/*']).map((route) => {\n const wildcardIndex = route.indexOf('*');\n const isWildcard = wildcardIndex === route.length - 1;\n const match = isWildcard ? route.substring(0, wildcardIndex) : route;\n\n return {\n isWildcard,\n match\n };\n });\n }\n\n this._appCheckRoutes = routes;\n this._isEnabled = routes.length > 0;\n }\n\n intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n let obs: Observable<HttpEvent<unknown>>;\n\n if (this._isEnabled) {\n obs = this.matchesAnyRoute(req.url).pipe(\n switchMap((isMatch) => {\n let nextEvent: Observable<HttpEvent<unknown>>;\n\n if (isMatch) {\n nextEvent = from(\n getToken(this.appCheck).then((appCheckTokenResponse) => {\n const token = appCheckTokenResponse.token;\n let nextRequest: HttpRequest<unknown> = req;\n\n if (token) {\n nextRequest = req.clone({\n headers: req.headers.set('X-Firebase-AppCheck', token)\n });\n }\n\n return nextRequest;\n })\n ).pipe(switchMap((nextRequest) => next.handle(nextRequest)));\n } else {\n nextEvent = next.handle(req);\n }\n\n return nextEvent;\n })\n );\n } else {\n obs = next.handle(req);\n }\n\n return obs;\n }\n\n private matchesAnyRoute(inputUrl: string): Observable<boolean> {\n const url = urlWithoutParameters(inputUrl);\n\n function isEnabledRouteMatch(enabledRoute: EnabledAppCheckRoute): boolean {\n if (enabledRoute.isWildcard) {\n return url.startsWith(enabledRoute.match);\n } else {\n return url === enabledRoute.match;\n }\n }\n\n return from(this._appCheckRoutes).pipe(\n first((route) => isEnabledRouteMatch(route), false),\n map((x) => Boolean(x))\n );\n }\n}\n","import { FirebaseAuthToken } from '@dereekb/firebase';\nimport { User, UserInfo } from 'firebase/auth';\n\nexport type AuthUserInfo = Omit<UserInfo, 'providerId'>;\n\nexport function authUserInfoFromAuthUser(user: User): AuthUserInfo {\n return {\n displayName: user?.displayName,\n email: user.email,\n phoneNumber: user.phoneNumber,\n photoURL: user.photoURL,\n uid: user.uid\n };\n}\n\nexport function firebaseAuthTokenFromUser(user: User): FirebaseAuthToken {\n return {\n email: user.email,\n emailVerified: user.emailVerified,\n phoneNumber: user.phoneNumber\n };\n}\n","import { AuthUserState } from '@dereekb/dbx-core';\nimport { IdTokenResult } from 'firebase/auth';\nimport { Observable, of, shareReplay, switchMap } from 'rxjs';\nimport { DbxFirebaseAuthService } from './firebase.auth.service';\n\n/**\n * Derives a user state from the input firebase auth service.\n *\n * @param dbxFirebaseAuthService\n * @param stateForLoggedInUser Optional function that returns an observable for the user's state if they are logged in and not an anonymous user.\n * @returns\n */\nexport function authUserStateFromFirebaseAuthService(dbxFirebaseAuthService: DbxFirebaseAuthService, stateForLoggedInUser: (dbxFirebaseAuthService: DbxFirebaseAuthService) => Observable<AuthUserState> = () => of('user')): Observable<AuthUserState> {\n return dbxFirebaseAuthService.hasAuthUser$.pipe(\n switchMap((hasUser) => {\n let obs: Observable<AuthUserState>;\n\n if (hasUser) {\n obs = dbxFirebaseAuthService.isAnonymousUser$.pipe(switchMap((isAnon) => (isAnon ? of('anon' as AuthUserState) : stateForLoggedInUser(dbxFirebaseAuthService))));\n } else {\n obs = of('none');\n }\n\n return obs;\n }),\n shareReplay(1)\n );\n}\n\n/**\n * Convenience function to read a value from an IdTokenResult off of the current user.\n *\n * @param dbxFirebaseAuthService\n * @param readBooleanFromIdToken\n * @param defaultValue\n * @returns\n */\nexport function readValueFromIdToken<T>(dbxFirebaseAuthService: DbxFirebaseAuthService, readBooleanFromIdToken: (idToken: IdTokenResult) => Observable<T>, defaultValue: T): Observable<T> {\n return dbxFirebaseAuthService.currentAuthUserInfo$.pipe(\n switchMap((x) => {\n if (x) {\n return dbxFirebaseAuthService.idTokenResult$.pipe(switchMap((x) => readBooleanFromIdToken(x)));\n } else {\n return of(defaultValue);\n }\n })\n );\n}\n","import { filterMaybe, isNot } from '@dereekb/rxjs';\nimport { Injectable, Optional } from '@angular/core';\nimport { AuthUserState, DbxAuthService, loggedOutObsFromIsLoggedIn, loggedInObsFromIsLoggedIn, AuthUserIdentifier, authUserIdentifier } from '@dereekb/dbx-core';\nimport { Auth, authState, User, IdTokenResult, ParsedToken, GoogleAuthProvider, signInWithPopup, AuthProvider, PopupRedirectResolver, signInAnonymously, signInWithEmailAndPassword, UserCredential, FacebookAuthProvider, GithubAuthProvider, TwitterAuthProvider, createUserWithEmailAndPassword } from '@angular/fire/auth';\nimport { Observable, timeout, startWith, distinctUntilChanged, shareReplay, map, switchMap, firstValueFrom } from 'rxjs';\nimport { AuthClaims, AuthClaimsObject, AuthRoleClaimsService, AuthRoleSet, AUTH_ADMIN_ROLE, cachedGetter, Maybe } from '@dereekb/util';\nimport { AuthUserInfo, authUserInfoFromAuthUser, firebaseAuthTokenFromUser } from '../auth';\nimport { sendPasswordResetEmail } from 'firebase/auth';\nimport { authUserStateFromFirebaseAuthService } from './firebase.auth.rxjs';\nimport { FirebaseAuthContextInfo, FirebaseAuthToken } from '@dereekb/firebase';\n\n// MARK: Delegate\nexport abstract class DbxFirebaseAuthServiceDelegate {\n abstract authUserStateObs(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthUserState>;\n abstract authRolesObs(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthRoleSet>;\n abstract isOnboarded(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<boolean>;\n /**\n * Whether or not the input roles imply the admin priviledges.\n */\n abstract isAdminInAuthRoleSet(authRoleSet: AuthRoleSet): boolean;\n abstract authRoleClaimsService?: Maybe<AuthRoleClaimsService<AuthClaimsObject>>;\n}\n\nexport const DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE: DbxFirebaseAuthServiceDelegate = {\n authUserStateObs(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthUserState> {\n return authUserStateFromFirebaseAuthService(dbxFirebaseAuthService);\n },\n authRolesObs(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthRoleSet> {\n return dbxFirebaseAuthService.authUserState$.pipe(map((x) => (x === 'user' ? new Set(['user']) : new Set())));\n },\n isOnboarded(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<boolean> {\n return dbxFirebaseAuthService.authUserState$.pipe(map((x) => x === 'user'));\n },\n isAdminInAuthRoleSet(authRoleSet: AuthRoleSet): boolean {\n return authRoleSet.has(AUTH_ADMIN_ROLE);\n }\n};\n\n// MARK: Service\n@Injectable()\nexport class DbxFirebaseAuthService implements DbxAuthService {\n private readonly _authState$: Observable<Maybe<User>> = authState(this.firebaseAuth);\n\n readonly currentAuthUser$: Observable<Maybe<User>> = this._authState$.pipe(\n timeout({\n first: 1000,\n with: () => this._authState$.pipe(startWith(null))\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly currentAuthUserInfo$: Observable<Maybe<AuthUserInfo>> = this.currentAuthUser$.pipe(map((x) => (x ? authUserInfoFromAuthUser(x) : undefined)));\n\n readonly authUser$: Observable<User> = this.currentAuthUser$.pipe(filterMaybe());\n readonly authUserInfo$: Observable<AuthUserInfo> = this.authUser$.pipe(map(authUserInfoFromAuthUser));\n\n readonly hasAuthUser$: Observable<boolean> = this.currentAuthUser$.pipe(\n map((x) => Boolean(x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n readonly isAnonymousUser$: Observable<boolean> = this.authUser$.pipe(\n map((x) => x.isAnonymous),\n distinctUntilChanged(),\n shareReplay(1)\n );\n readonly isNotAnonymousUser$: Observable<boolean> = this.isAnonymousUser$.pipe(isNot());\n\n readonly isLoggedIn$: Observable<boolean> = this.hasAuthUser$;\n\n readonly isNotLoggedIn$: Observable<boolean> = this.isLoggedIn$.pipe(isNot());\n readonly onLogIn$: Observable<void> = loggedInObsFromIsLoggedIn(this.isLoggedIn$);\n readonly onLogOut$: Observable<void> = loggedOutObsFromIsLoggedIn(this.isLoggedIn$);\n readonly userIdentifier$: Observable<AuthUserIdentifier> = this.currentAuthUser$.pipe(map((x) => authUserIdentifier(x?.uid)));\n readonly uid$: Observable<AuthUserIdentifier> = this.userIdentifier$;\n\n readonly idTokenResult$: Observable<IdTokenResult> = this.authUser$.pipe(switchMap((x) => x.getIdTokenResult()));\n\n readonly claims$: Observable<ParsedToken> = this.idTokenResult$.pipe(map((x) => x.claims));\n readonly currentAuthContextInfo$: Observable<Maybe<DbxFirebaseAuthContextInfo>> = this.currentAuthUser$.pipe(\n switchMap((x) => this.loadAuthContextInfoForUser(x)),\n shareReplay(1)\n );\n readonly authContextInfo$: Observable<Maybe<DbxFirebaseAuthContextInfo>> = this.currentAuthContextInfo$.pipe(filterMaybe());\n\n readonly authUserState$: Observable<AuthUserState>;\n readonly authRoles$: Observable<AuthRoleSet>;\n readonly isOnboarded$: Observable<boolean>;\n\n private _authRoleClaimsService?: Maybe<AuthRoleClaimsService<AuthClaimsObject>>;\n readonly isAdminInAuthRoleSet: (authRoleSet: AuthRoleSet) => boolean;\n\n constructor(readonly firebaseAuth: Auth, @Optional() delegate: DbxFirebaseAuthServiceDelegate) {\n delegate = delegate ?? DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE;\n this.authUserState$ = delegate.authUserStateObs(this).pipe(distinctUntilChanged(), shareReplay(1));\n this.authRoles$ = delegate.authRolesObs(this);\n this.isOnboarded$ = delegate.isOnboarded(this);\n this._authRoleClaimsService = delegate.authRoleClaimsService;\n this.isAdminInAuthRoleSet = delegate.isAdminInAuthRoleSet;\n }\n\n rolesForClaims<T extends AuthClaimsObject = AuthClaimsObject>(claims: AuthClaims<T>): AuthRoleSet {\n let result: AuthRoleSet;\n\n if (this._authRoleClaimsService) {\n return this._authRoleClaimsService.toRoles(claims);\n } else {\n console.warn('DbxFirebaseAuthService: rolesForClaims called with no authRoleClaimsService provided. An empty set is returned.');\n result = new Set();\n }\n\n return result;\n }\n\n getAuthContextInfo(): Promise<Maybe<DbxFirebaseAuthContextInfo>> {\n return firstValueFrom(this.authUser$).then((user) => this.loadAuthContextInfoForUser(user));\n }\n\n async loadAuthContextInfoForUser(user: Maybe<User>): Promise<Maybe<DbxFirebaseAuthContextInfo>> {\n let result: Maybe<DbxFirebaseAuthContextInfo>;\n\n if (user) {\n const jwtToken: IdTokenResult = await user.getIdTokenResult();\n result = new DbxFirebaseAuthContextInfo(this, user, jwtToken);\n }\n\n return result;\n }\n\n logInWithGoogle(): Promise<UserCredential> {\n return this.logInWithPopup(new GoogleAuthProvider());\n }\n\n logInWithFacebook(): Promise<UserCredential> {\n return this.logInWithPopup(new FacebookAuthProvider());\n }\n\n logInWithTwitter(): Promise<UserCredential> {\n return this.logInWithPopup(new TwitterAuthProvider());\n }\n\n logInWithGithub(): Promise<UserCredential> {\n return this.logInWithPopup(new GithubAuthProvider());\n }\n\n logInWithApple(): Promise<UserCredential> {\n throw new Error('todo');\n }\n\n logInWithMicrosoft(): Promise<UserCredential> {\n // return this.logInWithPopup(new MicrosoftAuthProvider());\n throw new Error('todo');\n }\n\n logInWithPhone(): Promise<UserCredential> {\n throw new Error('todo');\n // return signInWithPhoneNumber(this.firebaseAuth, )\n }\n\n logInWithPopup(provider: AuthProvider, resolver?: PopupRedirectResolver): Promise<UserCredential> {\n return signInWithPopup(this.firebaseAuth, provider, resolver);\n }\n\n registerWithEmailAndPassword(email: string, password: string): Promise<UserCredential> {\n return createUserWithEmailAndPassword(this.firebaseAuth, email, password);\n }\n\n sendPasswordResetEmail(email: string): Promise<void> {\n return sendPasswordResetEmail(this.firebaseAuth, email);\n }\n\n logInWithEmailAndPassword(email: string, password: string): Promise<UserCredential> {\n return signInWithEmailAndPassword(this.firebaseAuth, email, password);\n }\n\n logInAsAnonymous(): Promise<UserCredential> {\n return signInAnonymously(this.firebaseAuth);\n }\n\n logOut(): Promise<void> {\n return this.firebaseAuth.signOut();\n }\n}\n\n/**\n * FirebaseAuthContextInfo implementation from DbxFirebaseAuthService.\n */\nexport class DbxFirebaseAuthContextInfo implements FirebaseAuthContextInfo {\n private _token = cachedGetter(() => firebaseAuthTokenFromUser(this.user));\n private _roles = cachedGetter(() => this.service.rolesForClaims(this.getClaims()));\n private _isAdmin = cachedGetter(() => this.service.isAdminInAuthRoleSet(this._roles()));\n\n constructor(readonly service: DbxFirebaseAuthService, readonly user: User, readonly jwtToken: IdTokenResult) {}\n\n get uid() {\n return this.user.uid;\n }\n\n isAdmin(): boolean {\n return this._isAdmin();\n }\n\n getClaims<T extends AuthClaimsObject = AuthClaimsObject>(): AuthClaims<T> {\n return this.jwtToken.claims as AuthClaims<T>;\n }\n\n getAuthRoles(): AuthRoleSet {\n return this._roles();\n }\n\n get token(): FirebaseAuthToken {\n return this._token();\n }\n}\n","export abstract class DbxFirebaseLoginTermsConfig {\n abstract readonly tosUrl: string;\n abstract readonly privacyUrl: string;\n}\n","import { ClickableAnchor } from '@dereekb/dbx-core';\nimport { Component } from '@angular/core';\nimport { DbxFirebaseLoginTermsConfig } from './login.terms';\n\n@Component({\n template: `\n <div class=\"dbx-firebase-login-terms-view\">\n <dbx-link [anchor]=\"tosAnchor\">Terms</dbx-link>\n <span class=\"dbx-link-spacer\"></span>\n <dbx-link [anchor]=\"privacyAnchor\">Privacy</dbx-link>\n </div>\n `\n})\nexport class DbxFirebaseLoginTermsSimpleComponent {\n readonly tosAnchor: ClickableAnchor = {\n url: this.dbxFirebaseLoginTermsConfig.tosUrl,\n target: '_blank'\n };\n\n readonly privacyAnchor: ClickableAnchor = {\n url: this.dbxFirebaseLoginTermsConfig.privacyUrl,\n target: '_blank'\n };\n\n constructor(readonly dbxFirebaseLoginTermsConfig: DbxFirebaseLoginTermsConfig) {}\n}\n","import { TextPasswordFieldPasswordParameters } from '@dereekb/dbx-form';\n\nexport type DbxFirebaseAuthLoginPasswordConfig = TextPasswordFieldPasswordParameters;\n\nexport const DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG: DbxFirebaseAuthLoginPasswordConfig = {\n minLength: 6\n};\n","import { mapIterable, addToSet, removeFromSet, Maybe, ArrayOrValue, filterMaybeValues } from '@dereekb/util';\nimport { Inject, Injectable, InjectionToken, Optional, Type } from '@angular/core';\nimport { FirebaseLoginMethodCategory, FirebaseLoginMethodType, KnownFirebaseLoginMethodType } from './login';\nimport { DbxFirebaseLoginTermsSimpleComponent } from './login.terms.simple.component';\nimport { DbxFirebaseAuthLoginPasswordConfig, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG } from './login.password';\n\n/**\n * Default providers to inject.\n */\nexport const DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN = new InjectionToken('DefaultDbxFirebaseAuthLoginProviders');\nexport const DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN = new InjectionToken('DefaultDbxFirebaseAuthLoginTermsComponentClass');\nexport const DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN = new InjectionToken('DefaultDbxFirebaseAuthLoginPasswordConfig');\n\nexport interface DbxFirebaseAuthLoginProvider<D = unknown> {\n /**\n * Category for this login method.\n */\n readonly category?: FirebaseLoginMethodCategory;\n /**\n * Login method key for this type.\n */\n readonly loginMethodType: KnownFirebaseLoginMethodType | FirebaseLoginMethodType;\n /**\n * Login/Registration class to use.\n */\n readonly componentClass: Type<unknown>;\n /**\n * Custom registration type to use instead. If false, registration is not allowd for this type.\n */\n readonly registrationComponentClass?: Type<unknown> | false;\n /**\n * Custom data available to the components.\n *\n * Components are responsible for knowing the typing information of this data.\n */\n readonly componentData?: D;\n /**\n * Asset configuration for this type.\n */\n readonly assets: DbxFirebaseAuthLoginProviderAssets;\n}\n\n/**\n * Asset configurations for a provider.\n */\nexport interface DbxFirebaseAuthLoginProviderAssets {\n /**\n * URL of the logo to use.\n */\n readonly logoUrl?: string;\n /**\n * Icon to use in place of the logo.\n */\n readonly loginIcon?: string;\n /**\n * Log in text to display next to the logo.\n */\n readonly loginText?: string;\n /**\n * Optional background color to apply.\n */\n readonly backgroundColor?: string;\n /**\n * Optional background color to apply.\n */\n readonly textColor?: string;\n}\n\n/**\n * Service used for registering components used for logging in.\n *\n * Default providers can be configured by the DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN injectable value.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxFirebaseAuthLoginService {\n private _enableAll = false;\n private _passwordConfig: DbxFirebaseAuthLoginPasswordConfig;\n private _providers = new Map<FirebaseLoginMethodType, DbxFirebaseAuthLoginProvider>();\n private _assets = new Map<FirebaseLoginMethodType, DbxFirebaseAuthLoginProviderAssets>();\n private _enabled = new Set<FirebaseLoginMethodType>();\n\n constructor(@Optional() @Inject(DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN) defaultProviders: DbxFirebaseAuthLoginProvider[], @Optional() @Inject(DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN) passwordConfig: DbxFirebaseAuthLoginPasswordConfig, @Optional() @Inject(DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN) readonly termsComponentClass: Type<unknown> = DbxFirebaseLoginTermsSimpleComponent) {\n if (defaultProviders) {\n defaultProviders.forEach((x) => this.register(x, false));\n }\n\n this._passwordConfig = passwordConfig ?? DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG;\n }\n\n /**\n * Used to register a provider. If a provider is already registered, this will override it by default.\n *\n * @param provider\n * @param override\n */\n register(provider: DbxFirebaseAuthLoginProvider, override: boolean = true): boolean {\n if (override || !this._providers.has(provider.loginMethodType)) {\n this._providers.set(provider.loginMethodType, provider);\n\n if (provider.assets) {\n this.updateAssetsForProvider(provider.loginMethodType, provider.assets);\n }\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Updates the assets for a provider type.\n *\n * @param type\n * @param assets\n */\n updateAssetsForProvider(type: FirebaseLoginMethodType, assets: Partial<DbxFirebaseAuthLoginProviderAssets>): void {\n const current = this._assets.get(type);\n const update = {\n ...current,\n ...assets\n };\n\n this._assets.set(type, update);\n }\n\n // MARK: Enable/Disable\n /**\n * Enables all providers and any providers that will be registered.\n */\n setEnableAll(enableAll = true) {\n this._enableAll = enableAll;\n }\n\n clearEnabled(): void {\n this._enabled = new Set();\n }\n\n /**\n * Enables all of the specified types.\n *\n * @param types\n */\n enable(types: ArrayOrValue<FirebaseLoginMethodType>): void {\n addToSet(this._enabled, types);\n }\n\n disable(types: ArrayOrValue<FirebaseLoginMethodType>): void {\n removeFromSet(this._enabled, types);\n }\n\n // MARK: Get\n getRegisteredTypes(): FirebaseLoginMethodType[] {\n return Array.from(this._providers.keys());\n }\n\n getEnabledTypes(): FirebaseLoginMethodType[] {\n return this._enableAll ? this.getRegisteredTypes() : Array.from(this._enabled);\n }\n\n getLoginProvider(type: FirebaseLoginMethodType): Maybe<DbxFirebaseAuthLoginProvider> {\n return this._providers.get(type);\n }\n\n getLoginProviders(types: Iterable<FirebaseLoginMethodType>): DbxFirebaseAuthLoginProvider[] {\n return filterMaybeValues(mapIterable(types ?? [], (x) => this._providers.get(x)));\n }\n\n getRegisterProvider(type: FirebaseLoginMethodType): Maybe<DbxFirebaseAuthLoginProvider> {\n return this._providers.get(type);\n }\n\n getRegisterProviders(types: Iterable<FirebaseLoginMethodType>): DbxFirebaseAuthLoginProvider[] {\n return filterMaybeValues(mapIterable(types ?? [], (x) => this._providers.get(x))).filter((x) => x.registrationComponentClass !== false);\n }\n\n getProviderAssets(type: FirebaseLoginMethodType): Maybe<DbxFirebaseAuthLoginProviderAssets> {\n return this._assets.get(type);\n }\n\n getPasswordConfig() {\n return this._passwordConfig;\n }\n\n setPasswordConfig(passwordConfig: DbxFirebaseAuthLoginPasswordConfig) {\n this._passwordConfig = passwordConfig;\n }\n}\n","import { DbxInjectionContext } from '@dereekb/dbx-core';\n\n/**\n * Injection token for a DbxInjectionContext for DbxFirebaseLoginContext.\n */\nexport abstract class DbxFirebaseLoginContext extends DbxInjectionContext {}\n","import { Component, Directive, Input, OnInit } from '@angular/core';\nimport { HandleActionFunction } from '@dereekb/dbx-core';\nimport { from } from 'rxjs';\nimport { DbxFirebaseAuthService } from '../service/firebase.auth.service';\nimport { FirebaseLoginMethodType } from './login';\nimport { DbxFirebaseAuthLoginService } from './login.service';\nimport { DbxFirebaseLoginContext } from './login.context';\n\nexport interface DbxFirebaseLoginButtonConfig {\n text: string;\n iconUrl?: string;\n icon?: string;\n buttonColor?: string;\n buttonTextColor?: string;\n handleLogin: () => Promise<unknown>;\n}\n\n/**\n * Login button and action.\n */\n@Component({\n selector: 'dbx-firebase-login-button',\n template: `\n <ng-container dbxAction [dbxActionHandler]=\"handleAction\" dbxActionValue [dbxActionSuccessHandler]=\"onActionSuccess\">\n <dbx-button dbxActionButton [customTextColor]=\"buttonTextColor\" [customButtonColor]=\"buttonColor\" [raised]=\"true\">\n <div class=\"dbx-firebase-login-button-content\">\n <span class=\"dbx-firebase-login-button-icon dbx-icon-spacer\">\n <img *ngIf=\"iconUrl\" [src]=\"iconUrl\" />\n <mat-icon *ngIf=\"icon\">{{ icon }}</mat-icon>\n </span>\n <span class=\"dbx-firebase-login-button-text\">{{ text }}</span>\n </div>\n </dbx-button>\n </ng-container>\n `,\n host: {\n class: 'dbx-firebase-login-button'\n }\n})\nexport class DbxFirebaseLoginButtonComponent {\n @Input()\n config!: DbxFirebaseLoginButtonConfig;\n\n get iconUrl() {\n return this.config?.iconUrl;\n }\n\n get icon() {\n return this.config?.icon;\n }\n\n get text() {\n return this.config?.text;\n }\n\n get buttonColor() {\n return this.config?.buttonColor ?? 'transparent';\n }\n\n get buttonTextColor() {\n return this.config?.buttonTextColor;\n }\n\n readonly handleAction: HandleActionFunction = () => {\n const loginPromise = this.config.handleLogin();\n return from(loginPromise);\n };\n\n onActionSuccess = () => {\n // todo: show checkmark on success?\n };\n}\n\n@Component({\n selector: 'dbx-firebase-login-button-container',\n template: `\n <div class=\"dbx-firebase-login-button-container\">\n <ng-content></ng-content>\n </div>\n `\n})\nexport class DbxFirebaseLoginButtonContainerComponent {}\n\nexport const DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE = `\n <dbx-firebase-login-button-container>\n <dbx-firebase-login-button [config]=\"config\"></dbx-firebase-login-button>\n </dbx-firebase-login-button-container>\n`;\n\n@Directive()\nexport abstract class AbstractConfiguredDbxFirebaseLoginButtonDirective implements OnInit {\n private _config!: DbxFirebaseLoginButtonConfig;\n\n abstract readonly loginProvider: FirebaseLoginMethodType;\n\n constructor(readonly dbxFirebaseAuthService: DbxFirebaseAuthService, readonly dbxFirebaseAuthLoginService: DbxFirebaseAuthLoginService, readonly dbxFirebaseLoginContext: DbxFirebaseLoginContext) {}\n\n ngOnInit(): void {\n const assets = this.assetConfig;\n\n this._config = {\n text: assets.loginText ?? `<loginText not configured>`,\n icon: assets.loginIcon,\n iconUrl: assets.logoUrl,\n buttonColor: assets.backgroundColor,\n buttonTextColor: assets.textColor,\n handleLogin: () => this.handleLogin()\n };\n }\n\n abstract handleLogin(): Promise<unknown>;\n\n get providerConfig() {\n return this.dbxFirebaseAuthLoginService.getLoginProvider(this.loginProvider);\n }\n\n get assetConfig() {\n return this.dbxFirebaseAuthLoginService.getProviderAssets(this.loginProvider) ?? {};\n }\n\n get config() {\n return this._config;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginAppleComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'apple';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithApple();\n }\n}\n","export type FirebaseLoginMethodType = string;\nexport type FirebaseLoginMethodCategory = string;\n\nexport type KnownFirebaseLoginMethodType = 'email' | 'phone' | 'google' | 'facebook' | 'github' | 'twitter' | 'apple' | 'microsoft' | 'anonymous'; // TODO: Add more\n\nexport const DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY = 'default';\nexport const OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY = 'oauth';\n\nexport type KnownFirebaseLoginMethodCategory = typeof DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY | typeof OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY;\n\nexport type DbxFirebaseLoginMode = 'login' | 'register';\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginAnonymousComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'anonymous';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInAsAnonymous();\n }\n}\n","import { Observable, BehaviorSubject, map, shareReplay, combineLatest } from 'rxjs';\nimport { DbxFirebaseAuthLoginProvider, DbxFirebaseAuthLoginService } from './login.service';\nimport { DbxFirebaseLoginMode, FirebaseLoginMethodType, FirebaseLoginMethodCategory } from './login';\nimport { Component, Input, OnDestroy } from '@angular/core';\nimport { containsStringAnyCase, Maybe, ArrayOrValue, excludeValuesFromArray, asArray } from '@dereekb/util';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\n\n/**\n * Pre-configured login component that displays all configured login types.\n */\n@Component({\n selector: 'dbx-firebase-login-list',\n template: `\n <div class=\"dbx-firebase-login-item\" *ngFor=\"let config of providerInjectionConfigs$ | async\">\n <dbx-injection [config]=\"config\"></dbx-injection>\n </div>\n `,\n host: {\n class: 'dbx-firebase-login-list'\n }\n})\nexport class DbxFirebaseLoginListComponent implements OnDestroy {\n private _loginMode = new BehaviorSubject<DbxFirebaseLoginMode>('login');\n private _inputProviderCategories = new BehaviorSubject<Maybe<ArrayOrValue<FirebaseLoginMethodCategory>>>(undefined);\n private _omitProviderTypes = new BehaviorSubject<Maybe<ArrayOrValue<FirebaseLoginMethodType>>>(undefined);\n private _inputProviderTypes = new BehaviorSubject<Maybe<ArrayOrValue<FirebaseLoginMethodType>>>(undefined);\n\n readonly providerTypes$: Observable<string[]> = combineLatest([this._inputProviderTypes, this._omitProviderTypes]).pipe(\n map(([providerTypes, omitProviderTypes]) => {\n const baseTypes = providerTypes ? asArray(providerTypes) : this.dbxFirebaseAuthLoginService.getEnabledTypes();\n const types = omitProviderTypes ? excludeValuesFromArray(baseTypes, asArray(omitProviderTypes)) : baseTypes;\n return types;\n }),\n shareReplay(1)\n );\n\n readonly providers$ = combineLatest([this.providerTypes$, this._inputProviderCategories]).pipe(\n map(([x, inputProviderCategories]) => {\n const providerCategories = asArray(inputProviderCategories);\n let providers = this.dbxFirebaseAuthLoginService.getLoginProviders(x);\n\n if (providerCategories.length) {\n const categories = new Set(providerCategories);\n providers = providers.filter((x) => containsStringAnyCase(categories, x.category ?? ''));\n }\n\n return providers;\n })\n );\n\n readonly providerInjectionConfigs$: Observable<DbxInjectionComponentConfig[]> = combineLatest([this._loginMode, this.providers$]).pipe(\n map(([mode, providers]: [DbxFirebaseLoginMode, DbxFirebaseAuthLoginProvider[]]) => {\n const mapFn = mode === 'register' ? (x: DbxFirebaseAuthLoginProvider) => ({ componentClass: x.registrationComponentClass ?? x.componentClass } as DbxInjectionComponentConfig) : (x: DbxFirebaseAuthLoginProvider) => ({ componentClass: x.componentClass } as DbxInjectionComponentConfig);\n return providers.map(mapFn);\n })\n );\n\n constructor(readonly dbxFirebaseAuthLoginService: DbxFirebaseAuthLoginService) {}\n\n ngOnDestroy(): void {\n this._loginMode.complete();\n this._inputProviderCategories.complete();\n this._omitProviderTypes.complete();\n this._inputProviderTypes.complete();\n }\n\n @Input()\n set loginMode(loginMode: DbxFirebaseLoginMode) {\n this._loginMode.next(loginMode);\n }\n\n @Input()\n set providerTypes(providerTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>) {\n this._inputProviderTypes.next(providerTypes);\n }\n\n @Input()\n set omitProviderTypes(providerTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>) {\n this._omitProviderTypes.next(providerTypes);\n }\n\n @Input()\n set providerCategories(providerCategories: Maybe<ArrayOrValue<FirebaseLoginMethodCategory>>) {\n this._inputProviderCategories.next(providerCategories);\n }\n}\n","import { Directive } from '@angular/core';\nimport { AbstractForwardDbxInjectionContextDirective } from '@dereekb/dbx-core';\nimport { DbxFirebaseLoginContext } from './login.context';\n\n/**\n * DbxFirebaseLoginContext implementation.\n */\n@Directive({\n selector: '[dbxFirebaseLoginContext]',\n providers: [\n {\n provide: DbxFirebaseLoginContext,\n useExisting: DbxFirebaseLoginContextDirective\n }\n ]\n})\nexport class DbxFirebaseLoginContextDirective extends AbstractForwardDbxInjectionContextDirective implements DbxFirebaseLoginContext {}\n","import { DbxFirebaseLoginMode, FirebaseLoginMethodCategory, FirebaseLoginMethodType } from './login';\nimport { Component, Input } from '@angular/core';\nimport { ArrayOrValue, Maybe } from '@dereekb/util';\n\n/**\n * Pre-configured login component that displays all configured login types.\n */\n@Component({\n selector: 'dbx-firebase-login',\n template: `\n <ng-container *dbxInjectionContext dbxFirebaseLoginContext>\n <dbx-firebase-login-list [providerTypes]=\"providerTypes\" [omitProviderTypes]=\"omitProviderTypes\" [providerCategories]=\"providerCategories\" [loginMode]=\"loginMode\"></dbx-firebase-login-list>\n </ng-container>\n `,\n host: {\n class: 'd-block dbx-firebase-login',\n '[class]': '{ \"dbx-firebase-register\": loginMode === \"register\" }'\n }\n})\nexport class DbxFirebaseLoginComponent {\n @Input()\n loginMode: DbxFirebaseLoginMode = 'login';\n\n @Input()\n providerTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>;\n\n @Input()\n omitProviderTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>;\n\n @Input()\n providerCategories: Maybe<ArrayOrValue<FirebaseLoginMethodCategory>>;\n}\n","import { ReadableError } from '@dereekb/util';\n\nexport interface FirebaseAuthError {\n code: string;\n name: string;\n customData: unknown;\n}\n\nexport const FIREBASE_AUTH_USER_NOT_FOUND_ERROR = 'auth/user-not-found';\nexport const FIREBASE_AUTH_NETWORK_REQUEST_ERROR = 'auth/network-request-error';\n\nexport function firebaseAuthErrorToReadableError(inputError: FirebaseAuthError): ReadableError {\n const code = inputError.code;\n let error: ReadableError;\n\n switch (code) {\n case FIREBASE_AUTH_USER_NOT_FOUND_ERROR:\n error = {\n code,\n message: 'A user with this email address was not found.'\n };\n break;\n case FIREBASE_AUTH_NETWORK_REQUEST_ERROR:\n error = {\n code,\n message: 'Could not reach the server.'\n };\n break;\n default:\n error = {\n code,\n message: 'An error occured.'\n };\n break;\n }\n\n return error;\n}\n","import { Component, Input, OnDestroy } from '@angular/core';\nimport { TextPasswordFieldConfig, provideFormlyContext, AbstractAsyncFormlyFormDirective, usernamePasswordLoginFields, DefaultUsernameLoginFieldsValue } from '@dereekb/dbx-form';\nimport { Maybe } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { DbxFirebaseLoginMode } from './login';\n\nexport type DbxFirebaseEmailFormValue = DefaultUsernameLoginFieldsValue;\n\nexport interface DbxFirebaseEmailFormConfig {\n loginMode: DbxFirebaseLoginMode;\n passwordConfig?: TextPasswordFieldConfig;\n}\n\n@Component({\n template: `\n <dbx-formly></dbx-formly>\n `,\n selector: 'dbx-firebase-email-form',\n providers: [provideFormlyContext()]\n})\nexport class DbxFirebaseEmailFormComponent extends AbstractAsyncFormlyFormDirective<DbxFirebaseEmailFormValue> implements OnDestroy {\n private _config = new BehaviorSubject<DbxFirebaseEmailFormConfig>({ loginMode: 'login' });\n\n readonly fields$: Observable<Maybe<FormlyFieldConfig[]>> = this._config.pipe(\n map(({ loginMode = 'login', passwordConfig }) => {\n const fields: FormlyFieldConfig[] = usernamePasswordLoginFields({ username: 'email', password: passwordConfig, verifyPassword: loginMode === 'register' });\n return fields;\n })\n );\n\n @Input()\n set config(config: DbxFirebaseEmailFormConfig) {\n this._config.next(config);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this._config.complete();\n }\n}\n","import { Component } from '@angular/core';\nimport { provideFormlyContext, AbstractSyncFormlyFormDirective, emailField } from '@dereekb/dbx-form';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\n\nexport interface DbxFirebaseEmailRecoveryFormValue {\n email: string;\n}\n\n@Component({\n template: `\n <dbx-formly></dbx-formly>\n `,\n selector: 'dbx-firebase-email-recovery-form',\n providers: [provideFormlyContext()]\n})\nexport class DbxFirebaseEmailRecoveryFormComponent extends AbstractSyncFormlyFormDirective<DbxFirebaseEmailRecoveryFormValue> {\n readonly fields: FormlyFieldConfig[] = [emailField({ required: true })];\n}\n","import { DbxFirebaseEmailRecoveryFormValue } from './login.email.recovery.form.component';\nimport { HandleActionFunction, DBX_INJECTION_COMPONENT_DATA, ClickableAnchor } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from './../service/firebase.auth.service';\nimport { firstValueFrom, from, tap, BehaviorSubject } from 'rxjs';\nimport { Component, EventEmitter, OnDestroy, Inject } from '@angular/core';\nimport { DbxFirebaseLoginContext } from './login.context';\nimport { DbxFirebaseEmailFormValue, DbxFirebaseEmailFormConfig } from './login.email.form.component';\nimport { DbxFirebaseLoginMode } from './login';\nimport { firebaseAuthErrorToReadableError } from '../error';\nimport { Maybe } from '@dereekb/util';\n\nexport interface DbxFirebaseLoginEmailContentComponentConfig extends DbxFirebaseEmailFormConfig {\n loginMode: DbxFirebaseLoginMode;\n}\n\nexport type DbxFirebaseLoginEmailContentMode = 'login' | 'recover' | 'recovering';\n\n@Component({\n templateUrl: './login.email.content.component.html'\n})\nexport class DbxFirebaseLoginEmailContentComponent implements OnDestroy {\n readonly formConfig: DbxFirebaseEmailFormConfig = {\n loginMode: this.config.loginMode,\n passwordConfig: this.config.passwordConfig\n };\n\n emailFormValue: Maybe<DbxFirebaseEmailFormValue>;\n recoveryFormValue: Maybe<DbxFirebaseEmailRecoveryFormValue>;\n\n private _emailMode = new BehaviorSubject<DbxFirebaseLoginEmailContentMode>('login');\n readonly emailMode$ = this._emailMode.asObservable();\n\n readonly forgotAnchor: ClickableAnchor = {\n onClick: () => {\n this.openRecovery();\n }\n };\n\n readonly doneOrCancelled = new EventEmitter<boolean>();\n\n constructor(readonly dbxFirebaseAuthService: DbxFirebaseAuthService, @Inject(DBX_INJECTION_COMPONENT_DATA) readonly config: DbxFirebaseLoginEmailContentComponentConfig) {}\n\n static openEmailLoginContext(dbxFirebaseLoginContext: DbxFirebaseLoginContext, config: DbxFirebaseLoginEmailContentComponentConfig): Promise<boolean> {\n return dbxFirebaseLoginContext.showContext({\n config: {\n componentClass: DbxFirebaseLoginEmailContentComponent,\n data: config\n },\n use: (instance) => firstValueFrom(instance.doneOrCancelled)\n });\n }\n\n ngOnDestroy(): void {\n this._emailMode.complete();\n }\n\n get loginMode() {\n return this.config.loginMode;\n }\n\n get isLoginMode() {\n return this.loginMode === 'login';\n }\n\n get isRegisterMode() {\n return this.loginMode === 'register';\n }\n\n get buttonText() {\n return this.config.loginMode === 'register' ? 'Register' : 'Log In';\n }\n\n readonly handleLoginAction: HandleActionFunction<DbxFirebaseEmailFormValue> = (value: DbxFirebaseEmailFormValue) => {\n this.emailFormValue = value;\n this.recoveryFormValue = { email: value.username }; // cache value for recovery\n\n let result;\n\n if (this.loginMode === 'register') {\n result = this.dbxFirebaseAuthService.registerWithEmailAndPassword(value.username, value.password);\n } else {\n result = this.dbxFirebaseAuthService.logInWithEmailAndPassword(value.username, value.password).catch((error) => {\n throw firebaseAuthErrorToReadableError(error);\n });\n }\n\n return from(result).pipe(\n tap(() => {\n this.doneOrCancelled.next(true);\n })\n );\n };\n\n // MARK: Recovery\n openRecovery() {\n this._emailMode.next('recover');\n }\n\n readonly handleRecoveryAction: HandleActionFunction<DbxFirebaseEmailRecoveryFormValue> = (value) => {\n this.recoveryFormValue = value;\n this.emailFormValue = { username: value.email, password: '' };\n\n const result = this.dbxFirebaseAuthService.sendPasswordResetEmail(value.email);\n\n return from(result).pipe(\n tap(() => {\n this.onRecoveringSuccess();\n })\n );\n };\n\n // MARK: Recovering\n onRecoveringSuccess() {\n // optionally override in parent\n }\n\n // MARK: Cancel\n onCancel() {\n this.doneOrCancelled.next(false);\n }\n\n onCancelReset() {\n this.doneOrCancelled.next(false);\n }\n}\n","<div class=\"dbx-firebase-login-email-content\">\n <ng-container [ngSwitch]=\"emailMode$ | async\">\n <ng-container *ngSwitchCase=\"'login'\">\n <ng-container *ngTemplateOutlet=\"loginView\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'recover'\">\n <ng-container *ngTemplateOutlet=\"resetPassword\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<!-- Login View -->\n<ng-template #loginView>\n <ng-container dbxAction [dbxActionHandler]=\"handleLoginAction\">\n <dbx-firebase-email-form [config]=\"formConfig\" dbxActionForm [dbxFormSource]=\"emailFormValue\"></dbx-firebase-email-form>\n <div class=\"dbx-firebase-login-email-forgot-prompt\" *ngIf=\"isLoginMode\">\n <dbx-link [anchor]=\"forgotAnchor\">Forgot Password?</dbx-link>\n </div>\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-wide-button\" [text]=\"buttonText\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancel()\">Cancel</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </ng-container>\n</ng-template>\n\n<!-- Reset Password View -->\n<ng-template #resetPassword>\n <ng-container dbxAction [dbxActionHandler]=\"handleRecoveryAction\">\n <dbx-firebase-email-recovery-form dbxActionForm [dbxFormSource]=\"recoveryFormValue\"></dbx-firebase-email-recovery-form>\n <p class=\"dbx-hint\">An email will be sent to the above address to help you reset your password.</p>\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-wide-button\" text=\"Send Recovery Email\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancelReset()\">Cancel Recovery</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </ng-container>\n</ng-template>\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\nimport { DbxFirebaseLoginEmailContentComponent } from './login.email.content.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginEmailComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'email';\n\n handleLogin() {\n return DbxFirebaseLoginEmailContentComponent.openEmailLoginContext(this.dbxFirebaseLoginContext, { loginMode: 'login', passwordConfig: this.dbxFirebaseAuthLoginService.getPasswordConfig() });\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginFacebookComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'facebook';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithFacebook();\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginGoogleComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'google';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithGoogle();\n }\n}\n","import { FirebaseLoginMethodCategory, FirebaseLoginMethodType } from './login';\nimport { Component, Input } from '@angular/core';\nimport { ArrayOrValue, Maybe } from '@dereekb/util';\n\n/**\n * Pre-configured register component that displays all configured login types and their registration components.\n */\n@Component({\n selector: 'dbx-firebase-register',\n template: `\n <dbx-firebase-login loginMode=\"register\" [providerTypes]=\"providerTypes\" [omitProviderTypes]=\"omitProviderTypes\" [providerCategories]=\"providerCategories\"></dbx-firebase-login>\n `\n})\nexport class DbxFirebaseRegisterComponent {\n @Input()\n providerTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>;\n\n @Input()\n omitProviderTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>;\n\n @Input()\n providerCategories: Maybe<ArrayOrValue<FirebaseLoginMethodCategory>>;\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginGitHubComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'github';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithGithub();\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginTwitterComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'twitter';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithTwitter();\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginMicrosoftComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'microsoft';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithMicrosoft();\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective } from './login.button.component';\nimport { DbxFirebaseLoginEmailContentComponent } from './login.email.content.component';\n\n@Component({\n templateUrl: './register.email.component.html'\n})\nexport class DbxFirebaseRegisterEmailComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'email';\n\n handleLogin() {\n return DbxFirebaseLoginEmailContentComponent.openEmailLoginContext(this.dbxFirebaseLoginContext, { loginMode: 'register', passwordConfig: this.dbxFirebaseAuthLoginService.getPasswordConfig() });\n }\n}\n","<dbx-firebase-login-button-container>\n <dbx-firebase-login-button [config]=\"config\"></dbx-firebase-login-button>\n</dbx-firebase-login-button-container>\n","import { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\n\nimport { Component } from '@angular/core';\nimport { DbxFirebaseAuthLoginService } from './login.service';\n\n@Component({\n selector: 'dbx-firebase-login-terms',\n template: `\n <dbx-injection [config]=\"config\"></dbx-injection>\n `,\n host: {\n class: 'dbx-firebase-login-terms d-block'\n }\n})\nexport class DbxFirebaseLoginTermsComponent {\n readonly config: DbxInjectionComponentConfig = {\n componentClass: this.dbxFirebaseAuthLoginService.termsComponentClass\n };\n\n constructor(readonly dbxFirebaseAuthLoginService: DbxFirebaseAuthLoginService) {}\n}\n","import { ClickableAnchor } from '@dereekb/dbx-core';\nimport { Component, EventEmitter, Output } from '@angular/core';\n\n@Component({\n selector: 'dbx-firebase-login-context-back-button',\n template: `\n <dbx-link [anchor]=\"anchor\">Choose other login method.</dbx-link>\n `\n})\nexport class DbxFirebaseLoginContextBackButtonComponent {\n @Output()\n readonly cancelLogin = new EventEmitter<void>();\n\n readonly anchor: ClickableAnchor = {\n onClick: () => this.cancelLogin.emit()\n };\n}\n","import { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { DbxFirebaseLoginAppleComponent } from './login.apple.component';\nimport { DbxFirebaseLoginButtonComponent, DbxFirebaseLoginButtonContainerComponent } from './login.button.component';\nimport { ModuleWithProviders, NgModule, Type } from '@angular/core';\nimport { DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { DbxActionModule, DbxRouterAnchorModule, DbxButtonModule, DbxReadableErrorModule } from '@dereekb/dbx-web';\nimport { FirebaseLoginMethodType, KnownFirebaseLoginMethodType, OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY, DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY } from './login';\nimport { DbxFirebaseLoginAnonymousComponent } from './login.anonymous.component';\nimport { DbxFirebaseLoginComponent } from './login.component';\nimport { DbxFirebaseLoginEmailComponent } from './login.email.component';\nimport { DbxFirebaseLoginFacebookComponent } from './login.facebook.component';\nimport { DbxFirebaseLoginGoogleComponent } from './login.google.component';\nimport { DbxFirebaseAuthLoginProvider, DbxFirebaseAuthLoginService, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN } from './login.service';\nimport { DbxFirebaseRegisterComponent } from './register.component';\nimport { DbxFirebaseLoginGitHubComponent } from './login.github.component';\nimport { DbxFirebaseLoginTwitterComponent } from './login.twitter.component';\nimport { DbxFirebaseLoginMicrosoftComponent } from './login.microsoft.component';\nimport { DbxFirebaseLoginListComponent } from './login.list.component';\nimport { DbxFirebaseRegisterEmailComponent } from './register.email.component';\nimport { DbxFirebaseLoginContextDirective } from './login.context.directive';\nimport { DbxFirebaseLoginEmailContentComponent } from './login.email.content.component';\nimport { DbxFormActionModule, DbxFormFormlyTextFieldModule, DbxFormIoModule, DbxFormlyModule, DbxFormModule } from '@dereekb/dbx-form';\nimport { DbxFirebaseEmailFormComponent } from './login.email.form.component';\nimport { DbxFirebaseLoginTermsComponent } from './login.terms.component';\nimport { DbxFirebaseLoginTermsSimpleComponent } from './login.terms.simple.component';\nimport { DbxFirebaseLoginContextBackButtonComponent } from './login.context.back.component';\nimport { DbxFirebaseEmailRecoveryFormComponent } from './login.email.recovery.form.component';\nimport { DbxFirebaseAuthLoginPasswordConfig } from './login.password';\nimport { DbxFirebaseLoginTermsConfig } from './login.terms';\n\nexport abstract class DbxFirebaseLoginModuleRootConfig extends DbxFirebaseLoginTermsConfig {\n abstract readonly enabledLoginMethods: FirebaseLoginMethodType[] | true;\n abstract readonly termsComponentClass?: Type<unknown>;\n abstract readonly passwordConfig?: DbxFirebaseAuthLoginPasswordConfig;\n}\n\nexport function defaultFirebaseAuthLoginProvidersFactory(): DbxFirebaseAuthLoginProvider[] {\n // NOTE: Asset URLS are from Firebase.\n // https://firebase.google.com/docs/auth/web/firebaseui\n const baseFirebaseJSUrl = `https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth`;\n\n // NOTE: Colors are from https://brandcolors.net/\n\n return [\n {\n category: DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'email' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginEmailComponent,\n registrationComponentClass: DbxFirebaseRegisterEmailComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/mail.svg`,\n loginText: 'Continue with Email',\n backgroundColor: '#ea4335', // gmail red color\n textColor: '#FFF'\n }\n },\n {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'google' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginGoogleComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/google.svg`,\n loginText: 'Continue with Google',\n backgroundColor: '#FFF',\n textColor: '#757575'\n }\n },\n {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'facebook' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginFacebookComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/facebook.svg`,\n loginText: 'Continue with Facebook',\n backgroundColor: '#4267B2',\n textColor: '#FFF'\n }\n },\n {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'twitter' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginTwitterComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/twitter.svg`,\n loginText: 'Continue with Twitter',\n backgroundColor: '#1da1f2',\n textColor: '#FFF'\n }\n },\n {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'github' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginGitHubComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/github.svg`,\n loginText: 'Continue with Github',\n backgroundColor: '#333',\n textColor: '#FFF'\n }\n },\n /*{\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'apple' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginGitHubComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/apple.svg`,\n loginText: 'Continue with Apple',\n backgroundColor: '#333',\n textColor: '#FFF'\n }\n }, {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'microsoft' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginGitHubComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/microsoft.svg`,\n loginText: 'Continue with Microsoft',\n backgroundColor: '#ea3e23',\n textColor: '#FFF'\n }\n },*/ {\n category: DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'anonymous' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginAnonymousComponent,\n assets: {\n loginIcon: 'account_circle',\n loginText: 'Continue as Guest',\n backgroundColor: '#000',\n textColor: '#FFF'\n }\n }\n ];\n}\n\n/**\n * Contains components related to logging in.\n */\n@NgModule({\n imports: [CommonModule, MatIconModule, MatButtonModule, DbxRouterAnchorModule, DbxFormIoModule, DbxFormModule, DbxFormlyModule, DbxFormActionModule, DbxFormFormlyTextFieldModule, DbxReadableErrorModule, DbxActionModule, DbxButtonModule, DbxInjectionComponentModule],\n declarations: [\n DbxFirebaseLoginComponent,\n DbxFirebaseLoginContextDirective,\n DbxFirebaseLoginContextBackButtonComponent,\n DbxFirebaseRegisterComponent,\n DbxFirebaseLoginListComponent,\n DbxFirebaseLoginButtonComponent,\n DbxFirebaseLoginButtonContainerComponent,\n DbxFirebaseLoginEmailComponent,\n DbxFirebaseLoginEmailContentComponent,\n DbxFirebaseEmailFormComponent,\n DbxFirebaseEmailRecoveryFormComponent,\n DbxFirebaseRegisterEmailComponent,\n DbxFirebaseLoginGoogleComponent,\n DbxFirebaseLoginGitHubComponent,\n DbxFirebaseLoginTwitterComponent,\n DbxFirebaseLoginAppleComponent,\n DbxFirebaseLoginMicrosoftComponent,\n DbxFirebaseLoginFacebookComponent,\n DbxFirebaseLoginAnonymousComponent,\n DbxFirebaseLoginTermsComponent,\n DbxFirebaseLoginTermsSimpleComponent\n ],\n exports: [\n DbxFirebaseLoginComponent,\n DbxFirebaseLoginContextDirective,\n DbxFirebaseLoginContextBackButtonComponent,\n DbxFirebaseRegisterComponent,\n DbxFirebaseLoginListComponent,\n DbxFirebaseLoginButtonComponent,\n DbxFirebaseLoginButtonContainerComponent,\n DbxFirebaseLoginEmailComponent,\n DbxFirebaseLoginEmailContentComponent,\n DbxFirebaseEmailFormComponent,\n DbxFirebaseEmailRecoveryFormComponent,\n DbxFirebaseRegisterEmailComponent,\n DbxFirebaseLoginGoogleComponent,\n DbxFirebaseLoginGitHubComponent,\n DbxFirebaseLoginTwitterComponent,\n DbxFirebaseLoginAppleComponent,\n DbxFirebaseLoginMicrosoftComponent,\n DbxFirebaseLoginFacebookComponent,\n DbxFirebaseLoginAnonymousComponent,\n DbxFirebaseLoginTermsComponent,\n DbxFirebaseLoginTermsSimpleComponent\n ],\n providers: []\n})\nexport class DbxFirebaseLoginModule {\n constructor(config: DbxFirebaseLoginModuleRootConfig, dbxFirebaseAuthLoginService: DbxFirebaseAuthLoginService) {\n if (config.enabledLoginMethods === true) {\n dbxFirebaseAuthLoginService.setEnableAll();\n } else {\n dbxFirebaseAuthLoginService.enable(config.enabledLoginMethods); // enable the types in the service.\n }\n }\n\n static forRoot(config: DbxFirebaseLoginModuleRootConfig): ModuleWithProviders<DbxFirebaseLoginModule> {\n return {\n ngModule: DbxFirebaseLoginModule,\n providers: [\n {\n provide: DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN,\n useFactory: defaultFirebaseAuthLoginProvidersFactory\n },\n {\n provide: DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN,\n useValue: config.termsComponentClass\n },\n {\n provide: DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN,\n useValue: config.passwordConfig\n },\n {\n provide: DbxFirebaseLoginModuleRootConfig,\n useValue: config\n },\n {\n provide: DbxFirebaseLoginTermsConfig,\n useValue: config\n }\n ]\n };\n }\n}\n","import { addToSetCopy, AuthClaims, AuthClaimsObject, AuthRoleClaimsService, AuthRoleSet } from '@dereekb/util';\nimport { map, Observable, switchMap } from 'rxjs';\nimport { DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate, DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE } from './firebase.auth.service';\n\nexport interface AuthRolesObsWithClaimsServiceConfig<T extends AuthClaimsObject> extends Partial<Pick<DbxFirebaseAuthServiceDelegate, 'isAdminInAuthRoleSet'>> {\n readonly claimsService: AuthRoleClaimsService<T>;\n /**\n * Whether or not to also add the current AuthUserState value to decoded roles.\n */\n readonly addAuthUserStateToRoles?: boolean;\n}\n\nexport function authRolesObsWithClaimsService<T extends AuthClaimsObject>(config: AuthRolesObsWithClaimsServiceConfig<T>): (dbxFirebaseAuthService: DbxFirebaseAuthService) => Observable<AuthRoleSet> {\n const { addAuthUserStateToRoles: addAuthUserState, claimsService } = config;\n\n return (dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthRoleSet> => {\n let obs = dbxFirebaseAuthService.idTokenResult$.pipe(map((x) => claimsService.toRoles(x.claims as AuthClaims<T>)));\n\n if (addAuthUserState) {\n obs = obs.pipe(switchMap((authRoleSet: AuthRoleSet) => dbxFirebaseAuthService.authUserState$.pipe(map((userState) => addToSetCopy(authRoleSet, [userState])))));\n }\n\n return obs;\n };\n}\n\nexport type DefaultDbxFirebaseAuthServiceDelegateWithClaimsServiceConfig<T extends AuthClaimsObject> = AuthRolesObsWithClaimsServiceConfig<T>;\n\nexport function defaultDbxFirebaseAuthServiceDelegateWithClaimsService<T extends AuthClaimsObject>(config: DefaultDbxFirebaseAuthServiceDelegateWithClaimsServiceConfig<T>): DbxFirebaseAuthServiceDelegate {\n return {\n authUserStateObs: DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE.authUserStateObs,\n authRolesObs: authRolesObsWithClaimsService(config),\n isOnboarded: DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE.isOnboarded,\n isAdminInAuthRoleSet: config.isAdminInAuthRoleSet ?? DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE.isAdminInAuthRoleSet,\n authRoleClaimsService: config.claimsService as unknown as AuthRoleClaimsService<AuthClaimsObject>\n };\n}\n","import { Injector, ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { DbxAuthService } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate } from './service/firebase.auth.service';\n\nexport interface DbxFirebaseAuthModuleConfig {\n delegateFactory?: (injector: Injector) => DbxFirebaseAuthServiceDelegate;\n}\n\n@NgModule({})\nexport class DbxFirebaseAuthModule {\n static forRoot(config: DbxFirebaseAuthModuleConfig): ModuleWithProviders<DbxFirebaseAuthModule> {\n const providers: Provider[] = [\n DbxFirebaseAuthService,\n {\n provide: DbxAuthService,\n useExisting: DbxFirebaseAuthService\n }\n ];\n\n if (config.delegateFactory) {\n providers.push({\n provide: DbxFirebaseAuthServiceDelegate,\n useFactory: config.delegateFactory,\n deps: [Injector]\n });\n }\n\n return {\n ngModule: DbxFirebaseAuthModule,\n providers\n };\n }\n}\n","export interface DbxFirebaseEmulatorConfig {\n /**\n * Port to target.\n */\n port: number;\n /**\n * Defaults to localhost if not provided.\n */\n host?: string;\n}\n\nexport interface DbxFirebaseEmulatorsConfig {\n /**\n * Whether or not to enable the emulators.\n */\n useEmulators?: boolean;\n /**\n * Default host to target. Defaults to localhost if not provided.\n */\n host?: string;\n /**\n * emulator UI configuration\n */\n ui?: DbxFirebaseEmulatorConfig;\n /**\n * Auth emulator configuration\n */\n auth?: DbxFirebaseEmulatorConfig;\n /**\n * Firestore emulator configuration\n */\n firestore?: DbxFirebaseEmulatorConfig;\n /**\n * Firestore emulator configuration\n */\n storage?: DbxFirebaseEmulatorConfig;\n /**\n * Functions emulator configuration\n */\n functions?: DbxFirebaseEmulatorConfig;\n /**\n * Database emulator configuration\n */\n database?: DbxFirebaseEmulatorConfig;\n}\n\nexport abstract class DbxFirebaseParsedEmulatorsConfig implements DbxFirebaseEmulatorsConfig {\n useEmulators?: boolean;\n auth?: Required<DbxFirebaseEmulatorConfig>;\n firestore?: Required<DbxFirebaseEmulatorConfig>;\n storage?: Required<DbxFirebaseEmulatorConfig>;\n functions?: Required<DbxFirebaseEmulatorConfig>;\n database?: Required<DbxFirebaseEmulatorConfig>;\n}\n","import { ModuleWithProviders, NgModule, Injector } from '@angular/core';\nimport { FirebaseOptions, initializeApp } from 'firebase/app';\nimport { initializeAppCheck, ReCaptchaV3Provider } from 'firebase/app-check';\nimport { FirebaseApp, provideFirebaseApp } from '@angular/fire/app';\nimport { provideStorage, getStorage, connectStorageEmulator } from '@angular/fire/storage';\nimport { provideFunctions, getFunctions, connectFunctionsEmulator } from '@angular/fire/functions';\nimport { provideFirestore, getFirestore, connectFirestoreEmulator, enableIndexedDbPersistence } from '@angular/fire/firestore';\nimport { provideAuth, getAuth, connectAuthEmulator } from '@angular/fire/auth';\nimport { AppCheck, provideAppCheck } from '@angular/fire/app-check';\nimport { DbxFirebaseParsedEmulatorsConfig } from './emulators';\nimport { DbxFirebaseOptions, DBX_FIREBASE_OPTIONS_TOKEN } from './options';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { enableAppCheckDebugTokenGeneration } from '../auth/appcheck';\nimport { DbxFirebaseAppCheckHttpInterceptor } from '../auth/appcheck/appcheck.interceptor';\n\n// TODO: remove \"as any\" typescript casting - https://github.com/angular/angularfire/issues/3086\n\n/**\n * Default firebase firestore provider module.\n */\n@NgModule({\n imports: [\n provideFirestore(((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const firestore = getFirestore(firebaseApp);\n const emulators = injector.get<DbxFirebaseParsedEmulatorsConfig>(DbxFirebaseParsedEmulatorsConfig, undefined);\n\n if (emulators?.useEmulators && emulators?.firestore) {\n connectFirestoreEmulator(firestore, emulators.firestore.host, emulators.firestore.port, {});\n }\n\n enableIndexedDbPersistence(firestore);\n\n return firestore;\n }) as any)\n ]\n})\nexport class DbxFirebaseDefaultFirestoreProviderModule {}\n\n/**\n * Default firebase app check provider module.\n *\n * Also configures the DbxFirebaseAppCheckHttpInterceptor with HTTP_INTERCEPTORS in order for appCheck to be appended to requests to the api.\n */\n@NgModule({\n imports: [\n provideAppCheck((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const firebaseOptions = injector.get<DbxFirebaseOptions>(DBX_FIREBASE_OPTIONS_TOKEN);\n const appCheckOptions = firebaseOptions.appCheck;\n const appCheckKnowinglyDisabled = appCheckOptions?.disabled === true || firebaseOptions.emulators?.useEmulators === true;\n let appCheck: AppCheck;\n\n if (appCheckOptions && !appCheckKnowinglyDisabled) {\n // enable the debug tokens if not using emulators and allowDebugTokens is set true\n if (firebaseOptions.emulators?.useEmulators !== true && appCheckOptions.allowDebugTokens) {\n enableAppCheckDebugTokenGeneration(true);\n }\n\n // Only enabled outside of app-check environments. The emulators will not use appcheck.\n appCheck = initializeAppCheck(firebaseApp, {\n provider: new ReCaptchaV3Provider(appCheckOptions.reCaptchaV3),\n isTokenAutoRefreshEnabled: appCheckOptions.isTokenAutoRefreshEnabled ?? true\n });\n\n console.log('Enabled AppCheck.');\n } else {\n appCheck = undefined as unknown as AppCheck;\n\n if (!appCheckKnowinglyDisabled) {\n console.error('dbx-firebase: No appcheck configuration for the app, and not specifically disabled in config either.');\n }\n }\n\n return appCheck;\n })\n ],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: DbxFirebaseAppCheckHttpInterceptor,\n multi: true\n }\n ]\n})\nexport class DbxFirebaseDefaultAppCheckProviderModule {}\n\n/**\n * Default firebase auth provider module.\n */\n@NgModule({\n imports: [\n provideAuth((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const auth = getAuth(firebaseApp);\n const emulators = injector.get<DbxFirebaseParsedEmulatorsConfig>(DbxFirebaseParsedEmulatorsConfig, undefined);\n\n if (emulators?.useEmulators && emulators?.auth) {\n connectAuthEmulator(auth, `http://${emulators.auth.host}:${emulators.auth.port}`);\n }\n\n return auth;\n })\n ]\n})\nexport class DbxFirebaseDefaultAuthProviderModule {}\n\n/**\n * Default firebase storage provider module.\n */\n@NgModule({\n imports: [\n provideStorage((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const storage = getStorage(firebaseApp);\n const emulators = injector.get<DbxFirebaseParsedEmulatorsConfig>(DbxFirebaseParsedEmulatorsConfig, undefined);\n\n if (emulators?.useEmulators && emulators?.storage) {\n connectStorageEmulator(storage, emulators.storage.host, emulators.storage.port, {});\n }\n\n return storage;\n })\n ]\n})\nexport class DbxFirebaseDefaultStorageProviderModule {}\n\n/**\n * Default firebase functions provider module.\n */\n@NgModule({\n imports: [\n provideFunctions((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const firebaseOptions = injector.get<DbxFirebaseOptions>(DBX_FIREBASE_OPTIONS_TOKEN);\n const { functionsRegionOrCustomDomain } = firebaseOptions;\n\n const functions = getFunctions(firebaseApp, functionsRegionOrCustomDomain);\n const emulators = injector.get<DbxFirebaseParsedEmulatorsConfig>(DbxFirebaseParsedEmulatorsConfig, undefined);\n\n if (emulators?.useEmulators && emulators?.functions) {\n connectFunctionsEmulator(functions, emulators.functions.host, emulators.functions.port);\n }\n\n return functions;\n })\n ]\n})\nexport class DbxFirebaseDefaultFunctionsProviderModule {}\n\n/**\n * Default provider module.\n */\n@NgModule({\n imports: [\n provideFirebaseApp((injector: Injector) => {\n const firebaseOptions = injector.get<DbxFirebaseOptions>(DBX_FIREBASE_OPTIONS_TOKEN);\n return initializeApp(firebaseOptions);\n }),\n DbxFirebaseDefaultAppCheckProviderModule,\n DbxFirebaseDefaultFirestoreProviderModule,\n DbxFirebaseDefaultAuthProviderModule,\n DbxFirebaseDefaultStorageProviderModule,\n DbxFirebaseDefaultFunctionsProviderModule\n ]\n})\nexport class DbxFirebaseDefaultFirebaseProvidersModule {\n static forRoot(firebaseOptions: FirebaseOptions): ModuleWithProviders<DbxFirebaseDefaultFirebaseProvidersModule> {\n return {\n ngModule: DbxFirebaseDefaultFirebaseProvidersModule,\n providers: [\n {\n provide: DBX_FIREBASE_OPTIONS_TOKEN,\n useValue: firebaseOptions\n }\n ]\n };\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DbxFirebaseEmulatorConfig, DbxFirebaseEmulatorsConfig, DbxFirebaseParsedEmulatorsConfig } from './emulators';\nimport { Maybe } from '@dereekb/util';\n\n/**\n * Used to configure the DbxFirebaseEmulatorsConfig provider.\n */\n@NgModule()\nexport class DbxFirebaseEmulatorModule {\n static forRoot(config: DbxFirebaseEmulatorsConfig): ModuleWithProviders<DbxFirebaseEmulatorModule> {\n const defaultHost = config.host ?? 'localhost';\n\n function emulatorConfig(emulator: Maybe<DbxFirebaseEmulatorConfig>): Required<DbxFirebaseEmulatorConfig> | undefined {\n return emulator ? { host: emulator.host ?? defaultHost, port: emulator.port } : undefined;\n }\n\n const finalConfig: DbxFirebaseParsedEmulatorsConfig = {\n useEmulators: config.useEmulators !== false,\n auth: emulatorConfig(config.auth),\n firestore: emulatorConfig(config.firestore),\n storage: emulatorConfig(config.storage),\n functions: emulatorConfig(config.functions),\n database: emulatorConfig(config.database)\n };\n\n return {\n ngModule: DbxFirebaseEmulatorModule,\n providers: [\n {\n provide: DbxFirebaseParsedEmulatorsConfig,\n useValue: finalConfig\n }\n ]\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Token to access the FirestoreContext value.\n */\nexport const DBX_FIRESTORE_CONTEXT_TOKEN = new InjectionToken('DBX_FIRESTORE_CONTEXT_TOKEN');\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { firebaseFirestoreContextFactory, FirestoreContext } from '@dereekb/firebase';\nimport { DBX_FIRESTORE_CONTEXT_TOKEN } from './firebase.firestore';\nimport { Firestore } from '@angular/fire/firestore';\nimport { ClassLikeType } from '@dereekb/util';\n\nexport interface DbxFirebaseFirestoreCollectionModuleConfig<T> {\n appCollectionClass: ClassLikeType<T>;\n collectionFactory: (context: FirestoreContext) => T;\n}\n\n/**\n * Used to initialize the FirestoreCollection for a DbxFirebase app.\n */\n@NgModule()\nexport class DbxFirebaseFirestoreCollectionModule {\n static forRoot<T>(config: DbxFirebaseFirestoreCollectionModuleConfig<T>): ModuleWithProviders<DbxFirebaseFirestoreCollectionModule> {\n return {\n ngModule: DbxFirebaseFirestoreCollectionModule,\n providers: [\n {\n provide: DBX_FIRESTORE_CONTEXT_TOKEN,\n useFactory: firebaseFirestoreContextFactory,\n deps: [Firestore]\n },\n {\n provide: config.appCollectionClass,\n useFactory: config.collectionFactory,\n deps: [DBX_FIRESTORE_CONTEXT_TOKEN]\n }\n ]\n };\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { FirestoreContext } from '@dereekb/firebase';\nimport { DBX_FIRESTORE_CONTEXT_TOKEN } from './firebase.firestore';\n\n/**\n * Service that provides access to the app's FirestoreContext.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxFirestoreContextService {\n constructor(@Inject(DBX_FIRESTORE_CONTEXT_TOKEN) readonly firestoreContext: FirestoreContext) {}\n}\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { Functions } from '@angular/fire/functions';\nimport { FirebaseFunctionsConfigMap, FirebaseFunctionsMap, LazyFirebaseFunctions } from '@dereekb/firebase';\nimport { ClassLikeType, forEachKeyValue } from '@dereekb/util';\n\nexport interface DbxFirebaseFunctionsModuleConfig<T, M extends FirebaseFunctionsMap = FirebaseFunctionsMap> {\n functionsGetterToken: ClassLikeType<T>;\n functionsGetterFactory: (functions: Functions) => T;\n /**\n * Optional functions config map to provide.\n *\n * If provided, will inject all the types with factory functions so they can be injected into the app.\n */\n functionsConfigMap?: FirebaseFunctionsConfigMap<M>;\n}\n\n/**\n * Used to initialize the LazyFirebaseFunctions type for a DbxFirebase app.\n */\n@NgModule()\nexport class DbxFirebaseFunctionsModule {\n static forRoot<T, M extends FirebaseFunctionsMap = FirebaseFunctionsMap>(config: DbxFirebaseFunctionsModuleConfig<T, M>): ModuleWithProviders<DbxFirebaseFunctionsModule> {\n const providers: Provider[] = [\n {\n provide: config.functionsGetterToken,\n useFactory: config.functionsGetterFactory,\n deps: [Functions]\n }\n ];\n\n if (config.functionsConfigMap) {\n forEachKeyValue(config.functionsConfigMap, {\n forEach: ([key, entry]) => {\n const provide = entry[0];\n\n providers.push({\n provide,\n useFactory: (lazyFunctions: LazyFirebaseFunctions<M>) => {\n const getter = lazyFunctions[key as string];\n\n if (!getter) {\n throw new Error(`Could not create provider for firebase function getter \"${provide}\" as the getter was unavailable.`);\n } else {\n return getter();\n }\n },\n deps: [config.functionsGetterToken]\n });\n }\n });\n }\n\n return {\n ngModule: DbxFirebaseFunctionsModule,\n providers\n };\n }\n}\n","import { PageListLoadingState, cleanupDestroyable, filterMaybe, useFirst, SubscriptionObject, accumulatorFlattenPageListLoadingState } from '@dereekb/rxjs';\nimport { BehaviorSubject, combineLatest, map, shareReplay, distinctUntilChanged, Subject, throttleTime, switchMap, Observable, tap, startWith, NEVER } from 'rxjs';\nimport { FirebaseQueryItemAccumulator, firebaseQueryItemAccumulator, FirestoreCollectionLike, FirestoreDocument, FirestoreItemPageIterationInstance, FirestoreItemPageIteratorFilter, FirestoreQueryConstraint, IterationQueryDocChangeWatcher, iterationQueryDocChangeWatcher } from '@dereekb/firebase';\nimport { ArrayOrValue, Destroyable, Initialized, Maybe } from '@dereekb/util';\nimport { DbxFirebaseCollectionLoader } from './collection.loader';\n\nexport interface DbxFirebaseCollectionLoaderInstanceInitConfig<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {\n collection?: Maybe<FirestoreCollectionLike<T, D>>;\n maxPages?: Maybe<number>;\n itemsPerPage?: Maybe<number>;\n constraints?: Maybe<ArrayOrValue<FirestoreQueryConstraint>>;\n}\n\nexport interface DbxFirebaseCollectionLoaderInstanceData<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {\n readonly firestoreIteration$: Observable<FirestoreItemPageIterationInstance<T>>;\n readonly accumulator$: Observable<FirebaseQueryItemAccumulator<T>>;\n readonly pageLoadingState$: Observable<PageListLoadingState<T>>;\n}\n\n/**\n * DbxFirebaseModelLoader implementation within an instance.\n */\nexport class DbxFirebaseCollectionLoaderInstance<T = unknown, D extends FirestoreDocument<T> = FirestoreDocument<T>> implements DbxFirebaseCollectionLoader<T>, DbxFirebaseCollectionLoaderInstanceData<T, D>, Initialized, Destroyable {\n protected readonly _collection = new BehaviorSubject<Maybe<FirestoreCollectionLike<T, D>>>(this._initConfig?.collection);\n\n protected readonly _maxPages = new BehaviorSubject<Maybe<number>>(this._initConfig?.maxPages);\n protected readonly _itemsPerPage = new BehaviorSubject<Maybe<number>>(this._initConfig?.itemsPerPage);\n protected readonly _constraints = new BehaviorSubject<Maybe<ArrayOrValue<FirestoreQueryConstraint>>>(this._initConfig?.constraints);\n protected readonly _restart = new Subject<void>();\n\n private readonly _maxPagesSub = new SubscriptionObject();\n\n readonly collection$ = this._collection.pipe(distinctUntilChanged());\n readonly constraints$ = this._constraints.pipe(distinctUntilChanged());\n\n readonly iteratorFilter$: Observable<FirestoreItemPageIteratorFilter> = combineLatest([this._itemsPerPage.pipe(distinctUntilChanged()), this.constraints$]).pipe(\n map(([limit, constraints]) => ({ limit, constraints, maxPageLoadLimit: this.maxPages } as FirestoreItemPageIteratorFilter)),\n shareReplay(1)\n );\n\n readonly firestoreIteration$: Observable<FirestoreItemPageIterationInstance<T>> = this.collection$.pipe(\n switchMap((collection) => {\n if (collection) {\n return combineLatest([this.iteratorFilter$, this._restart.pipe(startWith(undefined))]).pipe(\n throttleTime(100, undefined, { trailing: true }), // prevent rapid changes and executing filters too quickly.\n map(([iteratorFilter]) => collection.firestoreIteration(iteratorFilter)),\n cleanupDestroyable(), // cleanup the iteration\n shareReplay(1)\n );\n } else {\n return NEVER; // don't emit anything until collection is provided.\n }\n }),\n cleanupDestroyable(), // cleanup the iteration\n shareReplay(1)\n );\n\n readonly queryChangeWatcher$: Observable<IterationQueryDocChangeWatcher<T>> = this.firestoreIteration$.pipe(\n map((instance) => iterationQueryDocChangeWatcher({ instance })),\n shareReplay(1)\n );\n\n readonly accumulator$: Observable<FirebaseQueryItemAccumulator<T>> = this.firestoreIteration$.pipe(\n map((x) => firebaseQueryItemAccumulator<T>(x)),\n cleanupDestroyable(),\n shareReplay(1)\n );\n\n readonly pageLoadingState$: Observable<PageListLoadingState<T>> = this.accumulator$.pipe(\n switchMap((x) => accumulatorFlattenPageListLoadingState(x) as Observable<PageListLoadingState<T>>),\n shareReplay(1)\n );\n\n constructor(private readonly _initConfig?: DbxFirebaseCollectionLoaderInstanceInitConfig<T, D>) {}\n\n init(): void {\n // When max pages changes, update the iteration's max page limit.\n this._maxPagesSub.subscription = this._maxPages\n .pipe(\n distinctUntilChanged(),\n filterMaybe(), // do not pass null/undefined values\n switchMap((maxPageLoadLimit) =>\n this.firestoreIteration$.pipe(\n tap((iteration) => {\n iteration.maxPageLoadLimit = maxPageLoadLimit;\n })\n )\n )\n )\n .subscribe();\n }\n\n destroy(): void {\n this._maxPages.complete();\n this._collection.complete();\n this._constraints.complete();\n this._itemsPerPage.complete();\n this._restart.complete();\n this._maxPagesSub.destroy();\n }\n\n // MARK: Inputs\n get maxPages(): Maybe<number> {\n return this._maxPages.value;\n }\n\n set maxPages(maxPages: Maybe<number>) {\n if (this.maxPages != maxPages) {\n this._maxPages.next(maxPages);\n }\n }\n\n get itemsPerPage(): Maybe<number> {\n return this._itemsPerPage.value;\n }\n\n set itemsPerPage(itemsPerPage: Maybe<number>) {\n if (this.itemsPerPage != itemsPerPage) {\n this._itemsPerPage.next(itemsPerPage);\n }\n }\n\n get constraints(): Maybe<ArrayOrValue<FirestoreQueryConstraint>> {\n return this._constraints.value;\n }\n\n set constraints(constraints: Maybe<ArrayOrValue<FirestoreQueryConstraint>>) {\n this._constraints.next(constraints);\n }\n\n get collection(): Maybe<FirestoreCollectionLike<T, D>> {\n return this._collection.value;\n }\n\n set collection(collection: Maybe<FirestoreCollectionLike<T, D>>) {\n this._collection.next(collection);\n }\n\n // MARK: DbxFirebaseModelList\n next() {\n useFirst(this.firestoreIteration$, (x) => x.next());\n }\n\n restart() {\n this._restart.next();\n }\n\n setConstraints(constraints: Maybe<ArrayOrValue<FirestoreQueryConstraint>>) {\n this.constraints = constraints;\n }\n\n setCollection(firestoreCollection: Maybe<FirestoreCollectionLike<T, D>>) {\n this.collection = firestoreCollection;\n }\n}\n\nexport function dbxFirebaseCollectionLoaderInstance<T, D extends FirestoreDocument<T> = FirestoreDocument<T>>(config: DbxFirebaseCollectionLoaderInstanceInitConfig<T, D>): DbxFirebaseCollectionLoaderInstance<T, D> {\n return new DbxFirebaseCollectionLoaderInstance<T, D>(config);\n}\n\nexport function dbxFirebaseCollectionLoaderInstanceWithCollection<T, D extends FirestoreDocument<T> = FirestoreDocument<T>>(collection: Maybe<FirestoreCollectionLike<T, D>>): DbxFirebaseCollectionLoaderInstance<T, D> {\n return new DbxFirebaseCollectionLoaderInstance<T, D>({ collection });\n}\n","import { Directive, forwardRef, Input, Provider, Type } from '@angular/core';\nimport { FirestoreDocument, FirestoreQueryConstraint } from '@dereekb/firebase';\nimport { Maybe, ArrayOrValue } from '@dereekb/util';\nimport { DbxFirebaseCollectionStore } from './store.collection';\n\n/**\n * Abstract directive that contains a DbxFirebaseCollectionStore and provides an interface for communicating with other directives.\n */\n@Directive()\nexport abstract class DbxFirebaseCollectionStoreDirective<T = unknown, D extends FirestoreDocument<T> = FirestoreDocument<T>, S extends DbxFirebaseCollectionStore<T, D> = DbxFirebaseCollectionStore<T, D>> {\n constructor(readonly store: S) {}\n\n readonly pageLoadingState$ = this.store.pageLoadingState$;\n\n // MARK: Inputs\n @Input()\n set maxPages(maxPages: Maybe<number>) {\n this.store.setMaxPages(maxPages);\n }\n\n @Input()\n set itemsPerPage(itemsPerPage: Maybe<number>) {\n this.store.setItemsPerPage(itemsPerPage);\n }\n\n @Input()\n set constraints(constraints: Maybe<ArrayOrValue<FirestoreQueryConstraint>>) {\n this.store.setConstraints(constraints);\n }\n\n next() {\n this.store.next();\n }\n\n restart() {\n this.store.restart();\n }\n\n setConstraints(constraints: Maybe<ArrayOrValue<FirestoreQueryConstraint>>) {\n this.store.setConstraints(constraints);\n }\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// The use of any here does not degrade the type-safety; we want to simply match that the Store type S is used in the Directive type C to provide it.\n\n/**\n * Configures providers for a DbxFirebaseCollectionStoreDirective.\n *\n * Can optionally also provide the actual store type to include in the providers array so it is instantiated by Angular.\n *\n * @param sourceType\n */\nexport function provideDbxFirebaseCollectionStoreDirective<S extends DbxFirebaseCollectionStoreDirective<any, any, any>>(sourceType: Type<S>): Provider[];\nexport function provideDbxFirebaseCollectionStoreDirective<S extends DbxFirebaseCollectionStore<any, any>, C extends DbxFirebaseCollectionStoreDirective<any, any, S> = DbxFirebaseCollectionStoreDirective<any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[];\nexport function provideDbxFirebaseCollectionStoreDirective<S extends DbxFirebaseCollectionStore<any, any>, C extends DbxFirebaseCollectionStoreDirective<any, any, S> = DbxFirebaseCollectionStoreDirective<any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[] {\n const providers: Provider[] = [\n {\n provide: DbxFirebaseCollectionStoreDirective,\n useExisting: forwardRef(() => sourceType)\n }\n ];\n\n if (storeType) {\n providers.push(storeType);\n }\n\n return providers;\n}\n","import { shareReplay, startWith, Observable, switchMap, BehaviorSubject, distinctUntilChanged, combineLatest, map, filter, take } from 'rxjs';\nimport { Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FirestoreDocument, IterationQueryDocChangeWatcherChangeType, IterationQueryDocChangeWatcherEvent } from '@dereekb/firebase';\nimport { Maybe } from '@dereekb/util';\nimport { DbxFirebaseCollectionStore } from './store.collection';\nimport { DbxFirebaseCollectionStoreDirective } from './store.collection.directive';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\n\n/**\n * Refresh mode\n */\nexport type DbxFirebaseCollectionChangeDirectiveMode = 'auto' | 'manual';\nexport type DbxFirebaseCollectionChangeDirectiveEvent = Pick<IterationQueryDocChangeWatcherEvent<unknown>, 'time' | 'type'>;\n\n/**\n * Used to watch query doc changes and respond to them accordingly.\n */\n@Directive({\n selector: '[dbxFirebaseCollectionChange]'\n})\nexport class DbxFirebaseCollectionChangeDirective<T = unknown, D extends FirestoreDocument<T> = FirestoreDocument<T>, S extends DbxFirebaseCollectionStore<T, D> = DbxFirebaseCollectionStore<T, D>> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n private _mode = new BehaviorSubject<DbxFirebaseCollectionChangeDirectiveMode>('manual');\n readonly mode$ = this._mode.pipe(distinctUntilChanged());\n\n readonly event$: Observable<DbxFirebaseCollectionChangeDirectiveEvent> = this.dbxFirebaseCollectionStoreDirective.store.queryChangeWatcher$.pipe(\n switchMap((x) =>\n x.event$.pipe(\n filter((x) => x.type !== 'none'), // do not share 'none' events.\n take(1), // only need one event to mark as change is available.\n startWith({\n time: new Date(),\n type: 'none' as IterationQueryDocChangeWatcherChangeType\n })\n )\n ),\n shareReplay(1)\n );\n\n readonly hasChangeAvailable$: Observable<boolean> = this.event$.pipe(\n map((x) => x.type !== 'none'),\n shareReplay(1)\n );\n\n constructor(readonly dbxFirebaseCollectionStoreDirective: DbxFirebaseCollectionStoreDirective<T, D, S>) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = combineLatest([this.mode$, this.hasChangeAvailable$])\n .pipe(filter(([mode, hasChange]) => mode === 'auto' && hasChange))\n .subscribe(() => {\n this.restart();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._mode.complete();\n }\n\n @Input('dbxFirebaseCollectionChange')\n get mode(): DbxFirebaseCollectionChangeDirectiveMode {\n return this._mode.value;\n }\n\n set mode(mode: Maybe<DbxFirebaseCollectionChangeDirectiveMode | ''>) {\n this._mode.next(mode || 'manual');\n }\n\n restart() {\n this.dbxFirebaseCollectionStoreDirective.store.restart();\n }\n}\n","import { OnDestroy, TemplateRef, ViewContainerRef, Directive, Input } from '@angular/core';\nimport { AbstractIfDirective } from '@dereekb/dbx-core';\nimport { shareReplay, BehaviorSubject, combineLatest, Observable, map } from 'rxjs';\nimport { DbxFirebaseCollectionChangeDirective } from './store.collection.change.directive';\nimport { IterationQueryDocChangeWatcherChangeType } from '@dereekb/firebase';\nimport { Maybe } from '@dereekb/util';\n\nexport type DbxFirebaseCollectionHasChangeDirectiveMode = 'all' | IterationQueryDocChangeWatcherChangeType;\n\n/**\n * Structural directive that displays the content when the target change is detected.\n *\n * Can specify which changes to appear on.\n */\n@Directive({\n selector: '[dbxFirebaseCollectionHasChange]'\n})\nexport class DbxFirebaseCollectionHasChangeDirective extends AbstractIfDirective implements OnDestroy {\n private _mode = new BehaviorSubject<DbxFirebaseCollectionHasChangeDirectiveMode>('addedAndRemoved');\n\n readonly show$: Observable<boolean> = combineLatest([this._mode, this.directive.event$]).pipe(\n map(([mode, event]) => {\n let show = false;\n\n if (event.type !== 'none') {\n switch (mode) {\n case 'all':\n show = true;\n break;\n case 'addedAndRemoved':\n show = event.type === 'addedAndRemoved' || event.type === 'added' || event.type === 'removed';\n break;\n default:\n show = event.type === mode;\n break;\n }\n }\n\n return show;\n }),\n shareReplay(1)\n );\n\n constructor(templateRef: TemplateRef<unknown>, viewContainer: ViewContainerRef, public readonly directive: DbxFirebaseCollectionChangeDirective<unknown>) {\n super(templateRef, viewContainer);\n }\n\n @Input('dbxFirebaseCollectionHasChange')\n get mode(): DbxFirebaseCollectionHasChangeDirectiveMode {\n return this._mode.value;\n }\n\n set mode(mode: Maybe<DbxFirebaseCollectionHasChangeDirectiveMode | ''>) {\n this._mode.next(mode || 'addedAndRemoved');\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._mode.complete();\n }\n}\n","import { DbxListViewWrapper } from '@dereekb/dbx-web';\nimport { Directive, Host } from '@angular/core';\nimport { DbxFirebaseCollectionStoreDirective } from './store.collection.directive';\n\n/**\n * Directive that connects a host DbxListView to a DbxFirebaseCollectionStoreDirective to pass data for rendering items from a collection and query parameters.\n */\n@Directive({\n selector: '[dbxFirebaseCollectionList]'\n})\nexport class DbxFirebaseCollectionListDirective<T> {\n constructor(readonly dbxFirebaseCollectionStoreDirective: DbxFirebaseCollectionStoreDirective<T>, @Host() readonly dbxListViewWrapper: DbxListViewWrapper<T>) {\n this.dbxListViewWrapper.state$ = this.dbxFirebaseCollectionStoreDirective.pageLoadingState$;\n }\n}\n","import { Directive, forwardRef, Input, Provider, Type } from '@angular/core';\nimport { DocumentReference, FirestoreDocument } from '@dereekb/firebase';\nimport { ModelKey } from '@dereekb/util';\nimport { DbxFirebaseDocumentStore } from './store.document';\n\n/**\n * Abstract directive that contains a DbxFirebaseDocumentStore and provides an interface for communicating with other directives.\n */\n@Directive()\nexport abstract class DbxFirebaseDocumentStoreDirective<T = unknown, D extends FirestoreDocument<T> = FirestoreDocument<T>, S extends DbxFirebaseDocumentStore<T, D> = DbxFirebaseDocumentStore<T, D>> {\n constructor(readonly store: S) {}\n\n readonly exists$ = this.store.exists$;\n\n readonly document$ = this.store.document$;\n readonly documentLoadingState$ = this.store.documentLoadingState$;\n\n readonly id$ = this.store.id$;\n readonly ref$ = this.store.ref$;\n\n readonly snapshot$ = this.store.snapshot$;\n readonly snapshotLoadingState$ = this.store.snapshotLoadingState$;\n\n readonly data$ = this.store.data$;\n readonly loadingState$ = this.store.dataLoadingState$;\n\n // MARK: Inputs\n @Input()\n set id(id: ModelKey) {\n this.store.setId(id);\n }\n\n @Input()\n set ref(ref: DocumentReference<T>) {\n this.store.setRef(ref);\n }\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// The use of any here does not degrade the type-safety; we want to simply match that the Store type S is used in the Directive type C to provide it.\n\n/**\n * Configures providers for a DbxFirebaseDocumentStoreDirective.\n *\n * Can optionally also provide the actual store type to include in the providers array so it is instantiated by Angular.\n *\n * @param sourceType\n */\nexport function provideDbxFirebaseDocumentStoreDirective<S extends DbxFirebaseDocumentStoreDirective<any, any, any>>(sourceType: Type<S>): Provider[];\nexport function provideDbxFirebaseDocumentStoreDirective<S extends DbxFirebaseDocumentStore<any, any>, C extends DbxFirebaseDocumentStoreDirective<any, any, S> = DbxFirebaseDocumentStoreDirective<any, any, S>>(sourceType: Type<C>, storeType: Type<S>): Provider[];\nexport function provideDbxFirebaseDocumentStoreDirective<S extends DbxFirebaseDocumentStore<any, any>, C extends DbxFirebaseDocumentStoreDirective<any, any, S> = DbxFirebaseDocumentStoreDirective<any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[] {\n const providers: Provider[] = [\n {\n provide: DbxFirebaseDocumentStoreDirective,\n useExisting: forwardRef(() => sourceType)\n }\n ];\n\n if (storeType) {\n providers.push(storeType);\n }\n\n return providers;\n}\n","import { Directive, Host, OnInit } from '@angular/core';\nimport { FirestoreDocument } from '@dereekb/firebase';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from '../../auth/service/firebase.auth.service';\nimport { DbxFirebaseDocumentStoreDirective } from './store.document.directive';\n\n/**\n * Utility directive for a host DbxFirebaseDocumentStoreDirective that sets the document's ID to match the ID of the current user.\n *\n * This is useful for cases where each document is keyed by the user (I.E. implements UserRelatedById).\n */\n@Directive({\n selector: '[dbxFirebaseDocumentAuthId]'\n})\nexport class DbxFirebaseDocumentAuthIdDirective<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> extends AbstractSubscriptionDirective implements OnInit {\n constructor(readonly dbxFirebaseAuthService: DbxFirebaseAuthService, @Host() readonly dbxFirebaseDocumentStoreDirective: DbxFirebaseDocumentStoreDirective<T, D>) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.dbxFirebaseDocumentStoreDirective.store.setId(this.dbxFirebaseAuthService.userIdentifier$);\n }\n}\n","import { shareReplay, Observable, distinctUntilChanged, BehaviorSubject, combineLatest, map } from 'rxjs';\nimport { OnDestroy, Directive, Host, Input, OnInit } from '@angular/core';\nimport { DbxRouterService, AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxFirebaseDocumentStoreDirective } from './store.document.directive';\nimport { Maybe, ModelKey } from '@dereekb/util';\n\nexport const DBX_FIREBASE_ROUTER_SYNC_DEFAULT_ID_PARAM_KEY = 'id';\n\n/**\n * Used for synchronizing the document store id to the param of the route.\n */\n@Directive({\n selector: '[dbxFirebaseDocumentStoreRouteId]'\n})\nexport class DbxFirebaseDocumentStoreRouteIdDirective<T = unknown> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n private _idParamKey = new BehaviorSubject<string>(DBX_FIREBASE_ROUTER_SYNC_DEFAULT_ID_PARAM_KEY);\n readonly idParamKey$ = this._idParamKey.asObservable();\n\n readonly idFromParams$: Observable<Maybe<ModelKey>> = combineLatest([this.idParamKey$, this.dbxRouterService.params$]).pipe(\n map(([key, params]) => {\n return (params[key] as Maybe<string>) ?? undefined;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n constructor(@Host() readonly dbxFirebaseDocumentStoreDirective: DbxFirebaseDocumentStoreDirective<T>, readonly dbxRouterService: DbxRouterService) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.dbxFirebaseDocumentStoreDirective.store.setId(this.idFromParams$);\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._idParamKey.complete();\n }\n\n // MARK: Input\n @Input('dbxFirebaseDocumentStoreRouteId')\n get idParam() {\n return this._idParamKey.value;\n }\n\n set idParam(idParam: string) {\n this._idParamKey.next(idParam || DBX_FIREBASE_ROUTER_SYNC_DEFAULT_ID_PARAM_KEY);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFirebaseCollectionChangeDirective } from './store.collection.change.directive';\nimport { DbxFirebaseCollectionHasChangeDirective } from './store.collection.change.if.directive';\nimport { DbxFirebaseCollectionListDirective } from './store.collection.list.directive';\nimport { DbxFirebaseDocumentAuthIdDirective } from './store.document.auth.directive';\nimport { DbxFirebaseDocumentStoreRouteIdDirective } from './store.document.router.directive';\n\n@NgModule({\n imports: [],\n declarations: [DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseDocumentStoreRouteIdDirective, DbxFirebaseDocumentAuthIdDirective],\n exports: [DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseDocumentStoreRouteIdDirective, DbxFirebaseDocumentAuthIdDirective]\n})\nexport class DbxFirebaseModelStoreModule {}\n","import { Injectable } from '@angular/core';\nimport { Observable, shareReplay, distinctUntilChanged, Subscription, exhaustMap, first, map, switchMap, tap } from 'rxjs';\nimport { FirebaseQueryItemAccumulator, FirestoreCollectionLike, FirestoreDocument, FirestoreItemPageIterationInstance, FirestoreQueryConstraint, IterationQueryDocChangeWatcher } from '@dereekb/firebase';\nimport { ObservableOrValue, cleanupDestroyable, PageListLoadingState, filterMaybe } from '@dereekb/rxjs';\nimport { ArrayOrValue, Maybe } from '@dereekb/util';\nimport { LockSetComponentStore } from '@dereekb/dbx-core';\nimport { DbxFirebaseCollectionLoaderInstance, dbxFirebaseCollectionLoaderInstance, DbxFirebaseCollectionLoaderInstanceData } from '../loader/collection.loader.instance';\n\nexport interface DbxFirebaseCollectionStore<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> extends DbxFirebaseCollectionLoaderInstanceData<T, D> {\n readonly firestoreCollection$: Observable<Maybe<FirestoreCollectionLike<T, D>>>;\n readonly loader$: Observable<DbxFirebaseCollectionLoaderInstance<T, D>>;\n\n readonly firestoreIteration$: Observable<FirestoreItemPageIterationInstance<T>>;\n readonly queryChangeWatcher$: Observable<IterationQueryDocChangeWatcher<T>>;\n readonly accumulator$: Observable<FirebaseQueryItemAccumulator<T>>;\n readonly pageLoadingState$: Observable<PageListLoadingState<T>>;\n\n setMaxPages(observableOrValue: ObservableOrValue<Maybe<number>>): Subscription;\n setItemsPerPage(observableOrValue: ObservableOrValue<Maybe<number>>): Subscription;\n setConstraints(observableOrValue: ObservableOrValue<Maybe<ArrayOrValue<FirestoreQueryConstraint>>>): Subscription;\n next(observableOrValue: ObservableOrValue<void>): void;\n restart(observableOrValue: ObservableOrValue<void>): void;\n\n readonly setFirestoreCollection: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<FirestoreCollectionLike<T, D>>>) => Subscription);\n}\n\nexport interface DbxFirebaseCollectionStoreContextState<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {\n readonly firestoreCollection?: Maybe<FirestoreCollectionLike<T, D>>;\n readonly maxPages?: Maybe<number>;\n readonly itemsPerPage?: Maybe<number>;\n readonly constraints?: Maybe<ArrayOrValue<FirestoreQueryConstraint>>;\n}\n\n/**\n * Used for storing the state of a Person and related email threads.\n */\n@Injectable()\nexport class AbstractDbxFirebaseCollectionStore<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, C extends DbxFirebaseCollectionStoreContextState<T, D> = DbxFirebaseCollectionStoreContextState<T, D>> extends LockSetComponentStore<C> implements DbxFirebaseCollectionStore<T, D> {\n // MARK: Effects\n readonly setMaxPages = this.effect((input: Observable<Maybe<number>>) => {\n return input.pipe(switchMap((maxPages) => this.loader$.pipe(tap((x) => (x.maxPages = maxPages)))));\n });\n\n readonly setItemsPerPage = this.effect((input: Observable<Maybe<number>>) => {\n return input.pipe(switchMap((itemsPerPage) => this.loader$.pipe(tap((x) => (x.itemsPerPage = itemsPerPage)))));\n });\n\n readonly setConstraints = this.effect((input: Observable<Maybe<ArrayOrValue<FirestoreQueryConstraint>>>) => {\n return input.pipe(switchMap((constraints) => this.loader$.pipe(tap((x) => x.setConstraints(constraints)))));\n });\n\n readonly next = this.effect((input: Observable<void>) => {\n return input.pipe(\n exhaustMap(() =>\n this.loader$.pipe(\n first(),\n tap((x) => x.next())\n )\n )\n );\n });\n\n readonly restart = this.effect((input: Observable<void>) => {\n return input.pipe(\n exhaustMap(() =>\n this.loader$.pipe(\n first(),\n tap((x) => x.restart())\n )\n )\n );\n });\n\n // MARK: Accessors\n readonly currentFirestoreCollection$: Observable<Maybe<FirestoreCollectionLike<T, D>>> = this.state$.pipe(\n map((x) => x.firestoreCollection),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly firestoreCollection$: Observable<FirestoreCollectionLike<T, D>> = this.currentFirestoreCollection$.pipe(filterMaybe());\n\n readonly loader$: Observable<DbxFirebaseCollectionLoaderInstance<T, D>> = this.currentFirestoreCollection$.pipe(\n switchMap((collection) =>\n this.state$.pipe(\n first(),\n map((x) =>\n dbxFirebaseCollectionLoaderInstance({\n collection,\n maxPages: x.maxPages,\n itemsPerPage: x.itemsPerPage,\n constraints: x.constraints\n })\n )\n )\n ),\n cleanupDestroyable(),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly firestoreIteration$: Observable<FirestoreItemPageIterationInstance<T>> = this.loader$.pipe(switchMap((x) => x.firestoreIteration$));\n readonly queryChangeWatcher$: Observable<IterationQueryDocChangeWatcher<T>> = this.loader$.pipe(switchMap((x) => x.queryChangeWatcher$));\n readonly accumulator$: Observable<FirebaseQueryItemAccumulator<T>> = this.loader$.pipe(switchMap((x) => x.accumulator$));\n readonly pageLoadingState$: Observable<PageListLoadingState<T>> = this.loader$.pipe(switchMap((x) => x.pageLoadingState$));\n\n readonly setFirestoreCollection = this.updater((state, firestoreCollection: FirestoreCollectionLike<T, D> | null | undefined) => ({ ...state, firestoreCollection }));\n}\n","import { readableError } from '@dereekb/util';\n\nexport const DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR = 'DOES_NOT_EXIST';\n\nexport function modelDoesNotExistError() {\n return readableError(DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR, 'The document does not exist.');\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, shareReplay, distinctUntilChanged, map, switchMap, combineLatest, Subscription, of } from 'rxjs';\nimport { DocumentSnapshot, DocumentReference, FirestoreCollection, FirestoreDocument, documentDataWithId, DocumentDataWithId, FirestoreModelId, FirestoreModelKey, FirestoreCollectionLike, FirestoreModelIdentity } from '@dereekb/firebase';\nimport { filterMaybe, LoadingState, beginLoading, successResult, loadingStateFromObs, errorResult, ObservableOrValue } from '@dereekb/rxjs';\nimport { Maybe, isMaybeSo } from '@dereekb/util';\nimport { LockSetComponent, LockSetComponentStore } from '@dereekb/dbx-core';\nimport { modelDoesNotExistError } from '../error';\n\nexport interface DbxFirebaseDocumentStore<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> extends LockSetComponent {\n readonly firestoreCollectionLike$: Observable<FirestoreCollectionLike<T, D>>;\n readonly firestoreCollection$: Observable<FirestoreCollection<T, D>>;\n\n readonly currentInputId$: Observable<Maybe<FirestoreModelId>>;\n readonly inputId$: Observable<FirestoreModelId>;\n readonly currentInputKey$: Observable<Maybe<FirestoreModelKey>>;\n readonly inputKey$: Observable<FirestoreModelKey>;\n readonly currentInputRef$: Observable<Maybe<DocumentReference<T>>>;\n readonly inputRef$: Observable<DocumentReference<T>>;\n\n readonly currentDocument$: Observable<Maybe<D>>;\n readonly document$: Observable<D>;\n readonly id$: Observable<FirestoreModelId>;\n readonly key$: Observable<FirestoreModelKey>;\n readonly ref$: Observable<DocumentReference<T>>;\n readonly documentLoadingState$: Observable<LoadingState<D>>;\n readonly snapshot$: Observable<DocumentSnapshot<T>>;\n readonly snapshotLoadingState$: Observable<LoadingState<DocumentSnapshot<T>>>;\n readonly currentData$: Observable<Maybe<DocumentDataWithId<T>>>;\n readonly data$: Observable<DocumentDataWithId<T>>;\n readonly dataLoadingState$: Observable<LoadingState<DocumentDataWithId<T>>>;\n readonly exists$: Observable<boolean>;\n readonly modelIdentity$: Observable<FirestoreModelIdentity>;\n\n setId: (observableOrValue: ObservableOrValue<Maybe<FirestoreModelId>>) => Subscription;\n setKey: (observableOrValue: ObservableOrValue<Maybe<FirestoreModelKey>>) => Subscription;\n setRef: (observableOrValue: ObservableOrValue<Maybe<DocumentReference<T>>>) => Subscription;\n\n /**\n * Clears the key/id/ref and current document from the store.\n */\n clearRefs: () => void;\n\n /**\n * Sets the FirestoreCollection to retrieve documents from.\n */\n readonly setFirestoreCollection: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<FirestoreCollection<T, D>>>) => Subscription);\n\n /**\n * Sets the FirestoreCollectionLike to retrieve documents from.\n */\n readonly setFirestoreCollectionLike: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<FirestoreCollectionLike<T, D>>>) => Subscription);\n}\n\nexport interface DbxFirebaseDocumentStoreContextState<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {\n readonly firestoreCollectionLike?: Maybe<FirestoreCollectionLike<T, D>>;\n readonly firestoreCollection?: Maybe<FirestoreCollection<T, D>>;\n readonly id?: Maybe<FirestoreModelId>;\n readonly key?: Maybe<FirestoreModelKey>;\n readonly ref?: Maybe<DocumentReference<T>>;\n}\n\n/**\n * Used for storing the state of a Person and related email threads.\n */\n@Injectable()\nexport class AbstractDbxFirebaseDocumentStore<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, C extends DbxFirebaseDocumentStoreContextState<T, D> = DbxFirebaseDocumentStoreContextState<T, D>> extends LockSetComponentStore<C> implements DbxFirebaseDocumentStore<T, D> {\n // MARK: Effects\n\n // MARK: Accessors\n readonly currentFirestoreCollectionLike$: Observable<Maybe<FirestoreCollectionLike<T, D>>> = this.state$.pipe(\n map((x) => x.firestoreCollection ?? x.firestoreCollectionLike),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly currentFirestoreCollection$: Observable<Maybe<FirestoreCollection<T, D>>> = this.state$.pipe(\n map((x) => x.firestoreCollection),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly firestoreCollectionLike$: Observable<FirestoreCollectionLike<T, D>> = this.currentFirestoreCollectionLike$.pipe(filterMaybe());\n readonly firestoreCollection$: Observable<FirestoreCollection<T, D>> = this.currentFirestoreCollection$.pipe(filterMaybe());\n\n readonly currentInputId$: Observable<Maybe<FirestoreModelId>> = this.state$.pipe(\n map((x) => x.id),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputId$: Observable<FirestoreModelId> = this.currentInputId$.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly currentInputKey$: Observable<Maybe<FirestoreModelKey>> = this.state$.pipe(\n map((x) => x.key),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputKey$: Observable<FirestoreModelKey> = this.currentInputKey$.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly currentInputRef$: Observable<Maybe<DocumentReference<T>>> = this.state$.pipe(\n map((x) => x.ref),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputRef$: Observable<DocumentReference<T>> = this.currentInputRef$.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly currentDocument$: Observable<Maybe<D>> = combineLatest([this.currentInputId$, this.currentInputKey$, this.currentInputRef$]).pipe(\n switchMap(([id, key, ref]) => {\n let document: Observable<Maybe<D>>;\n\n if (ref) {\n document = this.firestoreCollectionLike$.pipe(map((x) => x.documentAccessor().loadDocument(ref)));\n } else if (key) {\n document = this.firestoreCollectionLike$.pipe(map((x) => x.documentAccessor().loadDocumentForKey(key)));\n } else if (id) {\n document = this.firestoreCollection$.pipe(map((x) => x.documentAccessor().loadDocumentForId(id)));\n } else {\n document = of(undefined);\n }\n\n return document;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly document$: Observable<D> = this.currentDocument$.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly documentLoadingState$: Observable<LoadingState<D>> = this.currentDocument$.pipe(\n map((x) => (x ? successResult(x) : beginLoading<D>())),\n shareReplay(1)\n );\n\n readonly id$: Observable<FirestoreModelId> = this.document$.pipe(\n map((x) => x.id),\n shareReplay()\n );\n\n readonly key$: Observable<FirestoreModelKey> = this.document$.pipe(\n map((x) => x.key),\n shareReplay()\n );\n\n readonly ref$: Observable<DocumentReference<T>> = this.document$.pipe(\n map((x) => x.documentRef),\n shareReplay()\n );\n\n readonly snapshot$: Observable<DocumentSnapshot<T>> = this.document$.pipe(\n switchMap((x) => x.accessor.stream()),\n shareReplay(1)\n );\n\n readonly snapshotLoadingState$: Observable<LoadingState<DocumentSnapshot<T>>> = this.currentDocument$.pipe(\n switchMap(() => loadingStateFromObs(this.snapshot$)),\n shareReplay(1)\n );\n\n readonly currentData$: Observable<Maybe<DocumentDataWithId<T>>> = this.document$.pipe(\n switchMap((x) => x.accessor.stream().pipe(map((y) => documentDataWithId(y)))),\n shareReplay(1)\n );\n\n readonly data$: Observable<DocumentDataWithId<T>> = this.currentDocument$.pipe(\n switchMap(() => this.currentData$.pipe(filterMaybe())),\n shareReplay(1)\n );\n\n readonly dataLoadingState$: Observable<LoadingState<DocumentDataWithId<T>>> = this.snapshotLoadingState$.pipe(\n map((x) => {\n let result: LoadingState<DocumentDataWithId<T>>;\n\n if (x.value) {\n const data = documentDataWithId(x.value);\n\n if (data) {\n result = successResult(data);\n } else {\n result = errorResult(modelDoesNotExistError());\n }\n } else {\n result = {\n ...x,\n value: undefined\n };\n }\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly exists$: Observable<boolean> = this.currentData$.pipe(\n map((x) => isMaybeSo(x)),\n shareReplay(1)\n );\n\n readonly doesNotExist$: Observable<boolean> = this.exists$.pipe(\n map((x) => !x),\n shareReplay(1)\n );\n\n readonly modelIdentity$: Observable<FirestoreModelIdentity> = this.document$.pipe(\n map((x) => x.modelIdentity),\n shareReplay(1)\n );\n\n // MARK: State Changes\n /**\n * Sets the id of the document to load.\n */\n readonly setId = this.updater((state, id: Maybe<FirestoreModelId>) => (id ? { ...state, id, ref: undefined } : { ...state, id })) as (observableOrValue: Maybe<string> | Observable<Maybe<string>>) => Subscription;\n\n /**\n * Sets the key of the document to load.\n */\n readonly setKey = this.updater((state, key: Maybe<FirestoreModelKey>) => (key ? { ...state, key, ref: undefined } : { ...state, key })) as (observableOrValue: Maybe<string> | Observable<Maybe<string>>) => Subscription;\n\n /**\n * Sets the ref of the document to load.\n */\n readonly setRef = this.updater((state, ref: Maybe<DocumentReference<T>>) => (ref ? { ...state, id: undefined, ref } : { ...state, ref })) as (observableOrValue: Maybe<DocumentReference<T>> | Observable<Maybe<DocumentReference<T>>>) => Subscription;\n\n readonly clearRefs = this.updater((state) => ({ ...state, id: undefined, key: undefined, ref: undefined }));\n\n readonly setFirestoreCollection = this.updater((state, firestoreCollection: Maybe<FirestoreCollection<T, D>>) => ({ ...state, firestoreCollection }));\n readonly setFirestoreCollectionLike = this.updater((state, firestoreCollectionLike: Maybe<FirestoreCollectionLike<T, D>>) => ({ ...state, firestoreCollectionLike }));\n}\n","import { FirestoreModelKeyRef, ModelFirebaseCreateFunction, ModelFirebaseDeleteFunction, ModelFirebaseUpdateFunction, OnCallCreateModelResult } from '@dereekb/firebase';\nimport { lazyFrom, LoadingState, loadingStateFromObs } from '@dereekb/rxjs';\nimport { firstValue } from '@dereekb/util';\nimport { first, Observable, switchMap } from 'rxjs';\nimport { Writable } from 'ts-essentials';\nimport { DbxFirebaseDocumentStore } from './store.document';\n\n// MARK: Create\nexport type DbxFirebaseDocumentStoreCreateFunction<I, O extends OnCallCreateModelResult = OnCallCreateModelResult> = (params: I) => Observable<LoadingState<O>>;\n\n/**\n * Creates a function for a store that DbxFirebaseDocumentStore captures the ModelFirebaseCreateFunction result and sets the key of the created value.\n *\n * @param store\n * @param fn\n * @returns\n */\nexport function firebaseDocumentStoreCreateFunction<I, O extends OnCallCreateModelResult = OnCallCreateModelResult>(store: DbxFirebaseDocumentStore<any, any>, fn: ModelFirebaseCreateFunction<I, O>): DbxFirebaseDocumentStoreCreateFunction<I, O> {\n return (params: I) =>\n loadingStateFromObs(\n lazyFrom(() =>\n fn(params).then((result) => {\n const modelKeys = result.modelKeys;\n const firstKey = firstValue(modelKeys);\n\n if (firstKey) {\n store.setKey(firstKey);\n }\n\n return result;\n })\n )\n );\n}\n\n// MARK: Update\nexport type DbxFirebaseDocumentStoreUpdateParams = Partial<Writable<FirestoreModelKeyRef>>;\n\nexport type DbxFirebaseDocumentStoreUpdateFunction<I extends DbxFirebaseDocumentStoreUpdateParams> = (params: I) => Observable<LoadingState<void>>;\n\nexport function firebaseDocumentStoreUpdateFunction<I extends DbxFirebaseDocumentStoreUpdateParams>(store: DbxFirebaseDocumentStore<any, any>, fn: ModelFirebaseUpdateFunction<I>): DbxFirebaseDocumentStoreUpdateFunction<I> {\n return (params: I) =>\n loadingStateFromObs(\n store.key$.pipe(\n first(),\n switchMap((key) =>\n fn({\n ...params,\n key // inject key into the parameters.\n })\n )\n )\n );\n}\n\n// MARK: Delete\nexport type DbxFirebaseDocumentStoreDeleteParams = Partial<Writable<FirestoreModelKeyRef>>;\n\nexport type DbxFirebaseDocumentStoreDeleteFunction<I extends DbxFirebaseDocumentStoreDeleteParams> = (params: I) => Observable<LoadingState<void>>;\n\n/**\n * Deletes a function for a store that DbxFirebaseDocumentStore captures the ModelFirebaseDeleteFunction result and sets the key of the created value.\n *\n * @param store\n * @param fn\n * @returns\n */\nexport function firebaseDocumentStoreDeleteFunction<I>(store: DbxFirebaseDocumentStore<any, any>, fn: ModelFirebaseDeleteFunction<I>): DbxFirebaseDocumentStoreDeleteFunction<I> {\n return (params: I) =>\n loadingStateFromObs(\n store.key$.pipe(\n first(),\n switchMap((key) =>\n fn({\n ...params,\n key // inject key into the parameters.\n }).then((result) => {\n store.clearRefs();\n return result;\n })\n )\n )\n );\n}\n","import { LockSetComponentStore } from '@dereekb/dbx-core';\nimport { FirestoreCollectionLike, FirestoreCollectionWithParentFactory, FirestoreDocument } from '@dereekb/firebase';\nimport { cleanup, ObservableOrValue } from '@dereekb/rxjs';\nimport { Maybe } from '@dereekb/util';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { map, Observable, Subscription } from 'rxjs';\nimport { DbxFirebaseDocumentStore } from './store.document';\n\nexport interface DbxFirebaseComponentStoreWithParentContextState<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> {\n readonly parent?: Maybe<PD>;\n readonly collectionFactory?: Maybe<FirestoreCollectionWithParentFactory<T, PT, D, PD>>;\n}\n\nexport type DbxFirebaseComponentStoreSetParentEffectFunction<PD> = (parent: Observable<Maybe<PD>>) => Subscription;\nexport type DbxFirebaseComponentStoreWithParentSetParentEffectFunction<PD> = (observableOrValue: ObservableOrValue<Maybe<PD>>) => Subscription;\nexport type DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction<PT, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> = (observableOrValue: ObservableOrValue<DbxFirebaseDocumentStore<PT, PD>>) => Subscription;\n\nexport interface DbxFirebaseComponentStoreWithParent<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, A extends FirestoreCollectionLike<T, D> = FirestoreCollectionLike<T, D>> extends LockSetComponentStore<object>, Pick<ComponentStore<DbxFirebaseComponentStoreWithParentContextState<T, PT, D, PD>>, 'effect'> {\n readonly currentParent$: Observable<Maybe<PD>>;\n readonly parent$: Observable<PD>;\n readonly currentCollectionFactory$: Observable<Maybe<FirestoreCollectionWithParentFactory<T, PT, D, PD>>>;\n readonly collectionFactory$: Observable<FirestoreCollectionWithParentFactory<T, PT, D, PD>>;\n readonly _setParent: DbxFirebaseComponentStoreSetParentEffectFunction<PD>;\n readonly _setParentDocument: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<PD>>) => Subscription);\n readonly setFirestoreCollection: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<A>>) => Subscription);\n}\n\nexport function setParentStoreEffect<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, A extends FirestoreCollectionLike<T, D> = FirestoreCollectionLike<T, D>>(store: DbxFirebaseComponentStoreWithParent<T, PT, D, PD, A>): DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction<PT, PD> {\n return store.effect((input: Observable<Maybe<DbxFirebaseDocumentStore<PT, PD>>>) => {\n return input.pipe(\n map((parentStore) => {\n let result: Maybe<Subscription>;\n\n if (parentStore) {\n result = store._setParent(parentStore.currentDocument$) as Subscription;\n } else {\n result = undefined;\n }\n\n // set as the parent lock set too\n store.setParentLockSet(parentStore);\n\n return result;\n }),\n cleanup((sub) => {\n if (sub) {\n sub.unsubscribe();\n }\n })\n );\n });\n}\n","import { Maybe } from '@dereekb/util';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { filterMaybe, ObservableOrValue } from '@dereekb/rxjs';\nimport { Observable, shareReplay, distinctUntilChanged, map, Subscription, NEVER, switchMap, tap } from 'rxjs';\nimport { FirestoreCollectionGroup, FirestoreCollectionWithParentFactory, FirestoreDocument } from '@dereekb/firebase';\nimport { AbstractDbxFirebaseCollectionStore, DbxFirebaseCollectionStore, DbxFirebaseCollectionStoreContextState } from './store.collection';\nimport { DbxFirebaseComponentStoreSetParentEffectFunction, DbxFirebaseComponentStoreWithParent, DbxFirebaseComponentStoreWithParentContextState, DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction, setParentStoreEffect } from './store.subcollection.rxjs';\n\n/**\n * Whether or not to load values from a parent or a group.\n */\nexport type DbxFirebaseComponentStoreWithParentSourceMode = 'parent' | 'group';\n\nexport interface DbxFirebaseCollectionWithParentStoreContextState<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends DbxFirebaseCollectionStoreContextState<T, D>, DbxFirebaseComponentStoreWithParentContextState<T, PT, D, PD> {\n readonly mode?: Maybe<DbxFirebaseComponentStoreWithParentSourceMode>;\n readonly collectionGroup?: Maybe<FirestoreCollectionGroup<T, D>>;\n}\n\nexport type DbxFirebaseComponentStoreWithParentSetParentSourceModeFunction = (observableOrValue: ObservableOrValue<Maybe<DbxFirebaseComponentStoreWithParentSourceMode>>) => Subscription;\n\nexport interface DbxFirebaseCollectionWithParentStore<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends DbxFirebaseCollectionStore<T, D>, DbxFirebaseComponentStoreWithParent<T, PT, D, PD> {\n readonly setSourceMode: DbxFirebaseComponentStoreWithParentSetParentSourceModeFunction;\n readonly setCollectionGroup: (observableOrValue: FirestoreCollectionGroup<T, D> | Observable<FirestoreCollectionGroup<T, D>>) => Subscription;\n readonly currentCollectionGroup$: Observable<Maybe<FirestoreCollectionGroup<T, D>>>;\n readonly collectionGroup$: Observable<FirestoreCollectionGroup<T, D>>;\n}\n\n/**\n * Abstract DbxFirebaseCollectionStore that has a parent document from which is derives it's FiresbaseCollection from.\n */\n@Injectable()\nexport class AbstractDbxFirebaseCollectionWithParentStore<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, C extends DbxFirebaseCollectionWithParentStoreContextState<T, PT, D, PD> = DbxFirebaseCollectionWithParentStoreContextState<T, PT, D, PD>> extends AbstractDbxFirebaseCollectionStore<T, D, C> implements DbxFirebaseCollectionWithParentStore<T, PT, D, PD> {\n constructor(@Inject(null) @Optional() state: C, @Inject(null) @Optional() defaultSourceMode?: DbxFirebaseComponentStoreWithParentSourceMode) {\n super(state);\n this.setSourceMode(defaultSourceMode || 'parent');\n }\n\n // MARK: Effects\n readonly setParentStore: DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction<PT, PD> = setParentStoreEffect(this);\n readonly setSourceMode: DbxFirebaseComponentStoreWithParentSetParentSourceModeFunction = this.effect((input: Observable<Maybe<DbxFirebaseComponentStoreWithParentSourceMode>>) => {\n return input.pipe(\n distinctUntilChanged(),\n switchMap((inputMode) => {\n const mode = inputMode?.toLowerCase() ?? 'parent'; // default to parent mode\n\n if (mode === 'group') {\n return this.currentCollectionGroup$.pipe(\n tap((collectionGroup) => {\n this.setFirestoreCollection(collectionGroup);\n })\n );\n } else {\n // parent document collection\n return this.currentParent$.pipe(\n switchMap((parent) => {\n if (parent) {\n return this.collectionFactory$.pipe(\n tap((collectionFactory) => {\n const collection = collectionFactory(parent);\n this.setFirestoreCollection(collection);\n })\n );\n } else {\n this.setFirestoreCollection(undefined);\n return NEVER;\n }\n })\n );\n }\n })\n );\n });\n\n // MARK: Accessors\n readonly currentParent$: Observable<Maybe<PD>> = this.state$.pipe(\n map((x) => x.parent),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly parent$: Observable<PD> = this.currentParent$.pipe(filterMaybe());\n\n readonly currentCollectionFactory$: Observable<Maybe<FirestoreCollectionWithParentFactory<T, PT, D, PD>>> = this.state$.pipe(\n map((x) => x.collectionFactory),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly collectionFactory$: Observable<FirestoreCollectionWithParentFactory<T, PT, D, PD>> = this.currentCollectionFactory$.pipe(filterMaybe());\n\n readonly currentCollectionGroup$: Observable<Maybe<FirestoreCollectionGroup<T, D>>> = this.state$.pipe(\n map((x) => x.collectionGroup),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly collectionGroup$: Observable<FirestoreCollectionGroup<T, D>> = this.currentCollectionGroup$.pipe(filterMaybe());\n\n // MARK: State Changes\n /**\n * Sets the collection factory function to use.\n */\n readonly setCollectionFactory = this.updater((state, collectionFactory: FirestoreCollectionWithParentFactory<T, PT, D, PD>) => ({ ...state, collectionFactory }));\n\n /**\n * Sets the collection group to use.\n */\n readonly setCollectionGroup = this.updater((state, collectionGroup: Maybe<FirestoreCollectionGroup<T, D>>) => ({ ...state, collectionGroup })) as (observableOrValue: Maybe<FirestoreCollectionGroup<T, D>> | Observable<Maybe<FirestoreCollectionGroup<T, D>>>) => Subscription;\n\n /**\n * Sets the parent on the current state.\n */\n readonly _setParentDocument = this.updater((state, parent: Maybe<PD>) => ({ ...state, parent }));\n readonly _setParent = this._setParentDocument as DbxFirebaseComponentStoreSetParentEffectFunction<PD>;\n}\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { Injectable } from '@angular/core';\nimport { Observable, shareReplay, distinctUntilChanged, map, NEVER, switchMap, tap } from 'rxjs';\nimport { FirestoreDocument, FirestoreCollectionWithParentFactory, FirestoreCollection } from '@dereekb/firebase';\nimport { Maybe } from '@dereekb/util';\nimport { AbstractDbxFirebaseDocumentStore, DbxFirebaseDocumentStore, DbxFirebaseDocumentStoreContextState } from './store.document';\nimport { DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction, setParentStoreEffect, DbxFirebaseComponentStoreWithParent, DbxFirebaseComponentStoreWithParentContextState, DbxFirebaseComponentStoreWithParentSetParentEffectFunction } from './store.subcollection.rxjs';\n\nexport interface DbxFirebaseDocumentWithParentStoreContextState<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends DbxFirebaseDocumentStoreContextState<T, D>, DbxFirebaseComponentStoreWithParentContextState<T, PT, D, PD> {}\n\nexport interface DbxFirebaseDocumentWithParentStore<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends DbxFirebaseDocumentStore<T, D>, DbxFirebaseComponentStoreWithParent<T, PT, D, PD, FirestoreCollection<T, D>> {}\n\n/**\n * Abstract DbxFirebaseDocumentStore that has a parent document from which is derives it's FiresbaseCollection from.\n */\n@Injectable()\nexport class AbstractDbxFirebaseDocumentWithParentStore<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, C extends DbxFirebaseDocumentWithParentStoreContextState<T, PT, D, PD> = DbxFirebaseDocumentWithParentStoreContextState<T, PT, D, PD>> extends AbstractDbxFirebaseDocumentStore<T, D, C> implements DbxFirebaseDocumentWithParentStore<T, PT, D, PD> {\n // MARK: Effects\n readonly setParentStore: DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction<PT, PD> = setParentStoreEffect(this);\n readonly setParent: DbxFirebaseComponentStoreWithParentSetParentEffectFunction<PD> = this.effect((input: Observable<Maybe<PD>>) => {\n return input.pipe(\n switchMap((parent) => {\n this._setParentDocument(parent);\n\n if (parent) {\n return this.collectionFactory$.pipe(\n tap((collectionFactory) => {\n const collection = collectionFactory(parent);\n this.setFirestoreCollection(collection);\n })\n );\n } else {\n // clear the current collection\n this.setFirestoreCollection(undefined);\n\n // do nothing until a parent is returned.\n return NEVER;\n }\n })\n );\n });\n\n readonly _setParent = this.setParent;\n\n // MARK: Accessors\n readonly currentParent$: Observable<Maybe<PD>> = this.state$.pipe(\n map((x) => x.parent),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly parent$: Observable<PD> = this.currentParent$.pipe(filterMaybe());\n\n readonly currentCollectionFactory$: Observable<Maybe<FirestoreCollectionWithParentFactory<T, PT, D, PD>>> = this.state$.pipe(\n map((x) => x.collectionFactory),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly collectionFactory$: Observable<FirestoreCollectionWithParentFactory<T, PT, D, PD>> = this.currentCollectionFactory$.pipe(filterMaybe());\n\n // MARK: State Changes\n /**\n * Sets the collection factory function to use.\n */\n readonly setCollectionFactory = this.updater((state, collectionFactory: FirestoreCollectionWithParentFactory<T, PT, D, PD>) => ({ ...state, collectionFactory }));\n\n /**\n * Sets the parent on the current state.\n */\n readonly _setParentDocument = this.updater((state, parent: Maybe<PD>) => ({ ...state, parent }));\n}\n","import { Directive, forwardRef, Input, Provider, Type } from '@angular/core';\nimport { FirestoreDocument } from '@dereekb/firebase';\nimport { Maybe } from '@dereekb/util';\nimport { DbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionStoreDirective } from './store.collection.directive';\nimport { DbxFirebaseCollectionWithParentStore, DbxFirebaseComponentStoreWithParentSourceMode } from './store.subcollection';\n\n/**\n * Abstract directive that contains a DbxFirebaseCollectionWithParentStore and provides an interface for communicating with other directives.\n */\n@Directive()\nexport abstract class DbxFirebaseCollectionWithParentStoreDirective<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, S extends DbxFirebaseCollectionWithParentStore<T, PT, D, PD> = DbxFirebaseCollectionWithParentStore<T, PT, D, PD>> extends DbxFirebaseCollectionStoreDirective<T, D, S> {\n // MARK: Inputs\n @Input()\n set sourceMode(sourceMode: Maybe<DbxFirebaseComponentStoreWithParentSourceMode>) {\n this.store.setSourceMode(sourceMode);\n }\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// The use of any here does not degrade the type-safety; we want to simply match that the Store type S is used in the Directive type C to provide it.\n\n/**\n * Configures providers for a DbxFirebaseCollectionWithParentStoreDirective.\n *\n * Can optionally also provide the actual store type to include in the providers array so it is instantiated by Angular.\n *\n * @param sourceType\n */\nexport function provideDbxFirebaseCollectionWithParentStoreDirective<S extends DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, any>>(sourceType: Type<S>): Provider[];\nexport function provideDbxFirebaseCollectionWithParentStoreDirective<S extends DbxFirebaseCollectionWithParentStore<any, any, any, any>, C extends DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, S> = DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[];\nexport function provideDbxFirebaseCollectionWithParentStoreDirective<S extends DbxFirebaseCollectionWithParentStore<any, any, any, any>, C extends DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, S> = DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[] {\n const providers: Provider[] = [\n ...provideDbxFirebaseCollectionStoreDirective(sourceType, storeType),\n {\n provide: DbxFirebaseCollectionWithParentStoreDirective,\n useExisting: forwardRef(() => sourceType)\n }\n ];\n\n return providers;\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFirebaseModelStoreModule } from './store/model.store.module';\n\n@NgModule({\n exports: [DbxFirebaseModelStoreModule]\n})\nexport class DbxFirebaseModelModule {}\n","import { NgModule } from '@angular/core';\nimport { DbxFirebaseModelModule } from './model/model.module';\n\n@NgModule({\n exports: [DbxFirebaseModelModule]\n})\nexport class DbxFirebaseModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dereekb-dbx-firebase.mjs","sources":["../../../../packages/dbx-firebase/src/lib/auth/appcheck/appcheck.ts","../../../../packages/dbx-firebase/src/lib/firebase/options.ts","../../../../packages/dbx-firebase/src/lib/auth/appcheck/appcheck.interceptor.ts","../../../../packages/dbx-firebase/src/lib/auth/auth.ts","../../../../packages/dbx-firebase/src/lib/auth/service/firebase.auth.rxjs.ts","../../../../packages/dbx-firebase/src/lib/auth/service/firebase.auth.service.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.terms.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.terms.simple.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.password.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.service.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.context.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.button.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.apple.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.anonymous.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.list.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.context.directive.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.component.ts","../../../../packages/dbx-firebase/src/lib/auth/error.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.form.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.recovery.form.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.content.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.content.component.html","../../../../packages/dbx-firebase/src/lib/auth/login/login.email.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.facebook.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.google.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/register.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.github.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.twitter.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.microsoft.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/register.email.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/register.email.component.html","../../../../packages/dbx-firebase/src/lib/auth/login/login.terms.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/login.context.back.component.ts","../../../../packages/dbx-firebase/src/lib/auth/login/firebase.login.module.ts","../../../../packages/dbx-firebase/src/lib/auth/service/firebase.auth.service.delegate.ts","../../../../packages/dbx-firebase/src/lib/auth/firebase.auth.module.ts","../../../../packages/dbx-firebase/src/lib/firebase/emulators.ts","../../../../packages/dbx-firebase/src/lib/firebase/firebase.module.ts","../../../../packages/dbx-firebase/src/lib/firebase/firebase.emulator.module.ts","../../../../packages/dbx-firebase/src/lib/firestore/firebase.firestore.ts","../../../../packages/dbx-firebase/src/lib/firestore/firebase.firestore.module.ts","../../../../packages/dbx-firebase/src/lib/firestore/firebase.firestore.context.service.ts","../../../../packages/dbx-firebase/src/lib/function/firebase.function.module.ts","../../../../packages/dbx-firebase/src/lib/model/loader/collection.loader.instance.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.change.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.change.if.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.list.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.auth.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.router.directive.ts","../../../../packages/dbx-firebase/src/lib/model/store/model.store.module.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.collection.ts","../../../../packages/dbx-firebase/src/lib/model/error.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.document.crud.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.subcollection.rxjs.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.subcollection.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.subcollection.document.ts","../../../../packages/dbx-firebase/src/lib/model/store/store.subcollection.directive.ts","../../../../packages/dbx-firebase/src/lib/model/model.module.ts","../../../../packages/dbx-firebase/src/lib/module.ts","../../../../packages/dbx-firebase/src/dereekb-dbx-firebase.ts"],"sourcesContent":["/**\n * Enables debug token generation for AppCheck by setting FIREBASE_APPCHECK_DEBUG_TOKEN in the browser's self/window.\n *\n * https://firebase.google.com/docs/app-check/web/debug-provider\n *\n * @param enable\n */\nexport function enableAppCheckDebugTokenGeneration(enable = true) {\n (self as unknown as { FIREBASE_APPCHECK_DEBUG_TOKEN: boolean }).FIREBASE_APPCHECK_DEBUG_TOKEN = enable;\n}\n","import { InjectionToken } from '@angular/core';\nimport { FirebaseOptions } from 'firebase/app';\nimport { DbxFirebaseLoginModuleRootConfig } from '../auth/login/firebase.login.module';\nimport { DbxFirebaseAppCheckConfig } from './appcheck';\nimport { DbxFirebaseEmulatorsConfig } from './emulators';\n\nexport const DBX_FIREBASE_OPTIONS_TOKEN = new InjectionToken('DbxFirebaseOptions');\n\nexport interface DbxFirebaseOptions extends FirebaseOptions, Pick<DbxFirebaseLoginModuleRootConfig, 'enabledLoginMethods'> {\n emulators: DbxFirebaseEmulatorsConfig;\n /**\n * Firebase AppCheck handling\n */\n appCheck?: DbxFirebaseAppCheckConfig;\n /**\n * Passed to the Functions initialization to set the domain to use when sending requests.\n */\n functionsRegionOrCustomDomain?: string | undefined;\n}\n","import { urlWithoutParameters } from '@dereekb/util';\nimport { DBX_FIREBASE_OPTIONS_TOKEN, DbxFirebaseOptions } from '../../firebase/options';\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';\nimport { getToken } from 'firebase/app-check';\nimport { Observable, switchMap, first, map, from } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { AppCheck } from '@angular/fire/app-check';\n\ninterface EnabledAppCheckRoute {\n isWildcard: boolean;\n match: string;\n}\n\n/**\n * HTTP Interceptor that sets the X-Firebase-AppCheck for any requests to the routes configured in DbxFirebaseOptions.\n */\n@Injectable()\nexport class DbxFirebaseAppCheckHttpInterceptor implements HttpInterceptor {\n private _isEnabled: boolean;\n private _appCheckRoutes: EnabledAppCheckRoute[];\n\n constructor(@Inject(DBX_FIREBASE_OPTIONS_TOKEN) private dbxFirebaseOptions: DbxFirebaseOptions, private appCheck: AppCheck) {\n let routes: EnabledAppCheckRoute[] = [];\n\n if (appCheck != null) {\n routes = (this.dbxFirebaseOptions.appCheck?.appCheckRoutes ?? ['/api/*']).map((route) => {\n const wildcardIndex = route.indexOf('*');\n const isWildcard = wildcardIndex === route.length - 1;\n const match = isWildcard ? route.substring(0, wildcardIndex) : route;\n\n return {\n isWildcard,\n match\n };\n });\n }\n\n this._appCheckRoutes = routes;\n this._isEnabled = routes.length > 0;\n }\n\n intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n let obs: Observable<HttpEvent<unknown>>;\n\n if (this._isEnabled) {\n obs = this.matchesAnyRoute(req.url).pipe(\n switchMap((isMatch) => {\n let nextEvent: Observable<HttpEvent<unknown>>;\n\n if (isMatch) {\n nextEvent = from(\n getToken(this.appCheck).then((appCheckTokenResponse) => {\n const token = appCheckTokenResponse.token;\n let nextRequest: HttpRequest<unknown> = req;\n\n if (token) {\n nextRequest = req.clone({\n headers: req.headers.set('X-Firebase-AppCheck', token)\n });\n }\n\n return nextRequest;\n })\n ).pipe(switchMap((nextRequest) => next.handle(nextRequest)));\n } else {\n nextEvent = next.handle(req);\n }\n\n return nextEvent;\n })\n );\n } else {\n obs = next.handle(req);\n }\n\n return obs;\n }\n\n private matchesAnyRoute(inputUrl: string): Observable<boolean> {\n const url = urlWithoutParameters(inputUrl);\n\n function isEnabledRouteMatch(enabledRoute: EnabledAppCheckRoute): boolean {\n if (enabledRoute.isWildcard) {\n return url.startsWith(enabledRoute.match);\n } else {\n return url === enabledRoute.match;\n }\n }\n\n return from(this._appCheckRoutes).pipe(\n first((route) => isEnabledRouteMatch(route), false),\n map((x) => Boolean(x))\n );\n }\n}\n","import { FirebaseAuthToken } from '@dereekb/firebase';\nimport { User, UserInfo } from 'firebase/auth';\n\nexport type AuthUserInfo = Omit<UserInfo, 'providerId'>;\n\nexport function authUserInfoFromAuthUser(user: User): AuthUserInfo {\n return {\n displayName: user?.displayName,\n email: user.email,\n phoneNumber: user.phoneNumber,\n photoURL: user.photoURL,\n uid: user.uid\n };\n}\n\nexport function firebaseAuthTokenFromUser(user: User): FirebaseAuthToken {\n return {\n email: user.email,\n emailVerified: user.emailVerified,\n phoneNumber: user.phoneNumber\n };\n}\n","import { AuthUserState } from '@dereekb/dbx-core';\nimport { IdTokenResult } from 'firebase/auth';\nimport { Observable, of, shareReplay, switchMap } from 'rxjs';\nimport { DbxFirebaseAuthService } from './firebase.auth.service';\n\n/**\n * Derives a user state from the input firebase auth service.\n *\n * @param dbxFirebaseAuthService\n * @param stateForLoggedInUser Optional function that returns an observable for the user's state if they are logged in and not an anonymous user.\n * @returns\n */\nexport function authUserStateFromFirebaseAuthService(dbxFirebaseAuthService: DbxFirebaseAuthService, stateForLoggedInUser: (dbxFirebaseAuthService: DbxFirebaseAuthService) => Observable<AuthUserState> = () => of('user')): Observable<AuthUserState> {\n return dbxFirebaseAuthService.hasAuthUser$.pipe(\n switchMap((hasUser) => {\n let obs: Observable<AuthUserState>;\n\n if (hasUser) {\n obs = dbxFirebaseAuthService.isAnonymousUser$.pipe(switchMap((isAnon) => (isAnon ? of('anon' as AuthUserState) : stateForLoggedInUser(dbxFirebaseAuthService))));\n } else {\n obs = of('none');\n }\n\n return obs;\n }),\n shareReplay(1)\n );\n}\n\n/**\n * Convenience function to read a value from an IdTokenResult off of the current user.\n *\n * @param dbxFirebaseAuthService\n * @param readBooleanFromIdToken\n * @param defaultValue\n * @returns\n */\nexport function readValueFromIdToken<T>(dbxFirebaseAuthService: DbxFirebaseAuthService, readBooleanFromIdToken: (idToken: IdTokenResult) => Observable<T>, defaultValue: T): Observable<T> {\n return dbxFirebaseAuthService.currentAuthUserInfo$.pipe(\n switchMap((x) => {\n if (x) {\n return dbxFirebaseAuthService.idTokenResult$.pipe(switchMap((x) => readBooleanFromIdToken(x)));\n } else {\n return of(defaultValue);\n }\n })\n );\n}\n","import { filterMaybe, isNot } from '@dereekb/rxjs';\nimport { Injectable, Optional } from '@angular/core';\nimport { AuthUserState, DbxAuthService, loggedOutObsFromIsLoggedIn, loggedInObsFromIsLoggedIn, AuthUserIdentifier, authUserIdentifier } from '@dereekb/dbx-core';\nimport { Auth, authState, User, IdTokenResult, ParsedToken, GoogleAuthProvider, signInWithPopup, AuthProvider, PopupRedirectResolver, signInAnonymously, signInWithEmailAndPassword, UserCredential, FacebookAuthProvider, GithubAuthProvider, TwitterAuthProvider, createUserWithEmailAndPassword } from '@angular/fire/auth';\nimport { Observable, timeout, startWith, distinctUntilChanged, shareReplay, map, switchMap, firstValueFrom } from 'rxjs';\nimport { AuthClaims, AuthClaimsObject, AuthRoleClaimsService, AuthRoleSet, AUTH_ADMIN_ROLE, cachedGetter, Maybe } from '@dereekb/util';\nimport { AuthUserInfo, authUserInfoFromAuthUser, firebaseAuthTokenFromUser } from '../auth';\nimport { sendPasswordResetEmail } from 'firebase/auth';\nimport { authUserStateFromFirebaseAuthService } from './firebase.auth.rxjs';\nimport { FirebaseAuthContextInfo, FirebaseAuthToken } from '@dereekb/firebase';\n\n// MARK: Delegate\nexport abstract class DbxFirebaseAuthServiceDelegate {\n abstract authUserStateObs(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthUserState>;\n abstract authRolesObs(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthRoleSet>;\n abstract isOnboarded(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<boolean>;\n /**\n * Whether or not the input roles imply the admin priviledges.\n */\n abstract isAdminInAuthRoleSet(authRoleSet: AuthRoleSet): boolean;\n abstract authRoleClaimsService?: Maybe<AuthRoleClaimsService<AuthClaimsObject>>;\n}\n\nexport const DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE: DbxFirebaseAuthServiceDelegate = {\n authUserStateObs(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthUserState> {\n return authUserStateFromFirebaseAuthService(dbxFirebaseAuthService);\n },\n authRolesObs(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthRoleSet> {\n return dbxFirebaseAuthService.authUserState$.pipe(map((x) => (x === 'user' ? new Set(['user']) : new Set())));\n },\n isOnboarded(dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<boolean> {\n return dbxFirebaseAuthService.authUserState$.pipe(map((x) => x === 'user'));\n },\n isAdminInAuthRoleSet(authRoleSet: AuthRoleSet): boolean {\n return authRoleSet.has(AUTH_ADMIN_ROLE);\n }\n};\n\n// MARK: Service\n@Injectable()\nexport class DbxFirebaseAuthService implements DbxAuthService {\n private readonly _authState$: Observable<Maybe<User>> = authState(this.firebaseAuth);\n\n readonly currentAuthUser$: Observable<Maybe<User>> = this._authState$.pipe(\n timeout({\n first: 1000,\n with: () => this._authState$.pipe(startWith(null))\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly currentAuthUserInfo$: Observable<Maybe<AuthUserInfo>> = this.currentAuthUser$.pipe(map((x) => (x ? authUserInfoFromAuthUser(x) : undefined)));\n\n readonly authUser$: Observable<User> = this.currentAuthUser$.pipe(filterMaybe());\n readonly authUserInfo$: Observable<AuthUserInfo> = this.authUser$.pipe(map(authUserInfoFromAuthUser));\n\n readonly hasAuthUser$: Observable<boolean> = this.currentAuthUser$.pipe(\n map((x) => Boolean(x)),\n distinctUntilChanged(),\n shareReplay(1)\n );\n readonly isAnonymousUser$: Observable<boolean> = this.authUser$.pipe(\n map((x) => x.isAnonymous),\n distinctUntilChanged(),\n shareReplay(1)\n );\n readonly isNotAnonymousUser$: Observable<boolean> = this.isAnonymousUser$.pipe(isNot());\n\n readonly isLoggedIn$: Observable<boolean> = this.hasAuthUser$;\n\n readonly isNotLoggedIn$: Observable<boolean> = this.isLoggedIn$.pipe(isNot());\n readonly onLogIn$: Observable<void> = loggedInObsFromIsLoggedIn(this.isLoggedIn$);\n readonly onLogOut$: Observable<void> = loggedOutObsFromIsLoggedIn(this.isLoggedIn$);\n readonly userIdentifier$: Observable<AuthUserIdentifier> = this.currentAuthUser$.pipe(map((x) => authUserIdentifier(x?.uid)));\n readonly uid$: Observable<AuthUserIdentifier> = this.userIdentifier$;\n\n readonly idTokenResult$: Observable<IdTokenResult> = this.authUser$.pipe(switchMap((x) => x.getIdTokenResult()));\n\n readonly claims$: Observable<ParsedToken> = this.idTokenResult$.pipe(map((x) => x.claims));\n readonly currentAuthContextInfo$: Observable<Maybe<DbxFirebaseAuthContextInfo>> = this.currentAuthUser$.pipe(\n switchMap((x) => this.loadAuthContextInfoForUser(x)),\n shareReplay(1)\n );\n readonly authContextInfo$: Observable<Maybe<DbxFirebaseAuthContextInfo>> = this.currentAuthContextInfo$.pipe(filterMaybe());\n\n readonly authUserState$: Observable<AuthUserState>;\n readonly authRoles$: Observable<AuthRoleSet>;\n readonly isOnboarded$: Observable<boolean>;\n\n private _authRoleClaimsService?: Maybe<AuthRoleClaimsService<AuthClaimsObject>>;\n readonly isAdminInAuthRoleSet: (authRoleSet: AuthRoleSet) => boolean;\n\n constructor(readonly firebaseAuth: Auth, @Optional() delegate: DbxFirebaseAuthServiceDelegate) {\n delegate = delegate ?? DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE;\n this.authUserState$ = delegate.authUserStateObs(this).pipe(distinctUntilChanged(), shareReplay(1));\n this.authRoles$ = delegate.authRolesObs(this);\n this.isOnboarded$ = delegate.isOnboarded(this);\n this._authRoleClaimsService = delegate.authRoleClaimsService;\n this.isAdminInAuthRoleSet = delegate.isAdminInAuthRoleSet;\n }\n\n rolesForClaims<T extends AuthClaimsObject = AuthClaimsObject>(claims: AuthClaims<T>): AuthRoleSet {\n let result: AuthRoleSet;\n\n if (this._authRoleClaimsService) {\n return this._authRoleClaimsService.toRoles(claims);\n } else {\n console.warn('DbxFirebaseAuthService: rolesForClaims called with no authRoleClaimsService provided. An empty set is returned.');\n result = new Set();\n }\n\n return result;\n }\n\n getAuthContextInfo(): Promise<Maybe<DbxFirebaseAuthContextInfo>> {\n return firstValueFrom(this.authUser$).then((user) => this.loadAuthContextInfoForUser(user));\n }\n\n async loadAuthContextInfoForUser(user: Maybe<User>): Promise<Maybe<DbxFirebaseAuthContextInfo>> {\n let result: Maybe<DbxFirebaseAuthContextInfo>;\n\n if (user) {\n const jwtToken: IdTokenResult = await user.getIdTokenResult();\n result = new DbxFirebaseAuthContextInfo(this, user, jwtToken);\n }\n\n return result;\n }\n\n logInWithGoogle(): Promise<UserCredential> {\n return this.logInWithPopup(new GoogleAuthProvider());\n }\n\n logInWithFacebook(): Promise<UserCredential> {\n return this.logInWithPopup(new FacebookAuthProvider());\n }\n\n logInWithTwitter(): Promise<UserCredential> {\n return this.logInWithPopup(new TwitterAuthProvider());\n }\n\n logInWithGithub(): Promise<UserCredential> {\n return this.logInWithPopup(new GithubAuthProvider());\n }\n\n logInWithApple(): Promise<UserCredential> {\n throw new Error('todo');\n }\n\n logInWithMicrosoft(): Promise<UserCredential> {\n // return this.logInWithPopup(new MicrosoftAuthProvider());\n throw new Error('todo');\n }\n\n logInWithPhone(): Promise<UserCredential> {\n throw new Error('todo');\n // return signInWithPhoneNumber(this.firebaseAuth, )\n }\n\n logInWithPopup(provider: AuthProvider, resolver?: PopupRedirectResolver): Promise<UserCredential> {\n return signInWithPopup(this.firebaseAuth, provider, resolver);\n }\n\n registerWithEmailAndPassword(email: string, password: string): Promise<UserCredential> {\n return createUserWithEmailAndPassword(this.firebaseAuth, email, password);\n }\n\n sendPasswordResetEmail(email: string): Promise<void> {\n return sendPasswordResetEmail(this.firebaseAuth, email);\n }\n\n logInWithEmailAndPassword(email: string, password: string): Promise<UserCredential> {\n return signInWithEmailAndPassword(this.firebaseAuth, email, password);\n }\n\n logInAsAnonymous(): Promise<UserCredential> {\n return signInAnonymously(this.firebaseAuth);\n }\n\n logOut(): Promise<void> {\n return this.firebaseAuth.signOut();\n }\n}\n\n/**\n * FirebaseAuthContextInfo implementation from DbxFirebaseAuthService.\n */\nexport class DbxFirebaseAuthContextInfo implements FirebaseAuthContextInfo {\n private _token = cachedGetter(() => firebaseAuthTokenFromUser(this.user));\n private _roles = cachedGetter(() => this.service.rolesForClaims(this.getClaims()));\n private _isAdmin = cachedGetter(() => this.service.isAdminInAuthRoleSet(this._roles()));\n\n constructor(readonly service: DbxFirebaseAuthService, readonly user: User, readonly jwtToken: IdTokenResult) {}\n\n get uid() {\n return this.user.uid;\n }\n\n isAdmin(): boolean {\n return this._isAdmin();\n }\n\n getClaims<T extends AuthClaimsObject = AuthClaimsObject>(): AuthClaims<T> {\n return this.jwtToken.claims as AuthClaims<T>;\n }\n\n getAuthRoles(): AuthRoleSet {\n return this._roles();\n }\n\n get token(): FirebaseAuthToken {\n return this._token();\n }\n}\n","export abstract class DbxFirebaseLoginTermsConfig {\n abstract readonly tosUrl: string;\n abstract readonly privacyUrl: string;\n}\n","import { ClickableAnchor } from '@dereekb/dbx-core';\nimport { Component } from '@angular/core';\nimport { DbxFirebaseLoginTermsConfig } from './login.terms';\n\n@Component({\n template: `\n <div class=\"dbx-firebase-login-terms-view\">\n <dbx-link [anchor]=\"tosAnchor\">Terms</dbx-link>\n <span class=\"dbx-link-spacer\"></span>\n <dbx-link [anchor]=\"privacyAnchor\">Privacy</dbx-link>\n </div>\n `\n})\nexport class DbxFirebaseLoginTermsSimpleComponent {\n readonly tosAnchor: ClickableAnchor = {\n url: this.dbxFirebaseLoginTermsConfig.tosUrl,\n target: '_blank'\n };\n\n readonly privacyAnchor: ClickableAnchor = {\n url: this.dbxFirebaseLoginTermsConfig.privacyUrl,\n target: '_blank'\n };\n\n constructor(readonly dbxFirebaseLoginTermsConfig: DbxFirebaseLoginTermsConfig) {}\n}\n","import { TextPasswordFieldPasswordParameters } from '@dereekb/dbx-form';\n\nexport type DbxFirebaseAuthLoginPasswordConfig = TextPasswordFieldPasswordParameters;\n\nexport const DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG: DbxFirebaseAuthLoginPasswordConfig = {\n minLength: 6\n};\n","import { mapIterable, addToSet, removeFromSet, Maybe, ArrayOrValue, filterMaybeValues } from '@dereekb/util';\nimport { Inject, Injectable, InjectionToken, Optional, Type } from '@angular/core';\nimport { FirebaseLoginMethodCategory, FirebaseLoginMethodType, KnownFirebaseLoginMethodType } from './login';\nimport { DbxFirebaseLoginTermsSimpleComponent } from './login.terms.simple.component';\nimport { DbxFirebaseAuthLoginPasswordConfig, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG } from './login.password';\n\n/**\n * Default providers to inject.\n */\nexport const DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN = new InjectionToken('DefaultDbxFirebaseAuthLoginProviders');\nexport const DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN = new InjectionToken('DefaultDbxFirebaseAuthLoginTermsComponentClass');\nexport const DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN = new InjectionToken('DefaultDbxFirebaseAuthLoginPasswordConfig');\n\nexport interface DbxFirebaseAuthLoginProvider<D = unknown> {\n /**\n * Category for this login method.\n */\n readonly category?: FirebaseLoginMethodCategory;\n /**\n * Login method key for this type.\n */\n readonly loginMethodType: KnownFirebaseLoginMethodType | FirebaseLoginMethodType;\n /**\n * Login/Registration class to use.\n */\n readonly componentClass: Type<unknown>;\n /**\n * Custom registration type to use instead. If false, registration is not allowd for this type.\n */\n readonly registrationComponentClass?: Type<unknown> | false;\n /**\n * Custom data available to the components.\n *\n * Components are responsible for knowing the typing information of this data.\n */\n readonly componentData?: D;\n /**\n * Asset configuration for this type.\n */\n readonly assets: DbxFirebaseAuthLoginProviderAssets;\n}\n\n/**\n * Asset configurations for a provider.\n */\nexport interface DbxFirebaseAuthLoginProviderAssets {\n /**\n * URL of the logo to use.\n */\n readonly logoUrl?: string;\n /**\n * Icon to use in place of the logo.\n */\n readonly loginIcon?: string;\n /**\n * Log in text to display next to the logo.\n */\n readonly loginText?: string;\n /**\n * Optional background color to apply.\n */\n readonly backgroundColor?: string;\n /**\n * Optional background color to apply.\n */\n readonly textColor?: string;\n}\n\n/**\n * Service used for registering components used for logging in.\n *\n * Default providers can be configured by the DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN injectable value.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxFirebaseAuthLoginService {\n private _enableAll = false;\n private _passwordConfig: DbxFirebaseAuthLoginPasswordConfig;\n private _providers = new Map<FirebaseLoginMethodType, DbxFirebaseAuthLoginProvider>();\n private _assets = new Map<FirebaseLoginMethodType, DbxFirebaseAuthLoginProviderAssets>();\n private _enabled = new Set<FirebaseLoginMethodType>();\n\n constructor(@Optional() @Inject(DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN) defaultProviders: DbxFirebaseAuthLoginProvider[], @Optional() @Inject(DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN) passwordConfig: DbxFirebaseAuthLoginPasswordConfig, @Optional() @Inject(DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN) readonly termsComponentClass: Type<unknown> = DbxFirebaseLoginTermsSimpleComponent) {\n if (defaultProviders) {\n defaultProviders.forEach((x) => this.register(x, false));\n }\n\n this._passwordConfig = passwordConfig ?? DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG;\n }\n\n /**\n * Used to register a provider. If a provider is already registered, this will override it by default.\n *\n * @param provider\n * @param override\n */\n register(provider: DbxFirebaseAuthLoginProvider, override: boolean = true): boolean {\n if (override || !this._providers.has(provider.loginMethodType)) {\n this._providers.set(provider.loginMethodType, provider);\n\n if (provider.assets) {\n this.updateAssetsForProvider(provider.loginMethodType, provider.assets);\n }\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Updates the assets for a provider type.\n *\n * @param type\n * @param assets\n */\n updateAssetsForProvider(type: FirebaseLoginMethodType, assets: Partial<DbxFirebaseAuthLoginProviderAssets>): void {\n const current = this._assets.get(type);\n const update = {\n ...current,\n ...assets\n };\n\n this._assets.set(type, update);\n }\n\n // MARK: Enable/Disable\n /**\n * Enables all providers and any providers that will be registered.\n */\n setEnableAll(enableAll = true) {\n this._enableAll = enableAll;\n }\n\n clearEnabled(): void {\n this._enabled = new Set();\n }\n\n /**\n * Enables all of the specified types.\n *\n * @param types\n */\n enable(types: ArrayOrValue<FirebaseLoginMethodType>): void {\n addToSet(this._enabled, types);\n }\n\n disable(types: ArrayOrValue<FirebaseLoginMethodType>): void {\n removeFromSet(this._enabled, types);\n }\n\n // MARK: Get\n getRegisteredTypes(): FirebaseLoginMethodType[] {\n return Array.from(this._providers.keys());\n }\n\n getEnabledTypes(): FirebaseLoginMethodType[] {\n return this._enableAll ? this.getRegisteredTypes() : Array.from(this._enabled);\n }\n\n getLoginProvider(type: FirebaseLoginMethodType): Maybe<DbxFirebaseAuthLoginProvider> {\n return this._providers.get(type);\n }\n\n getLoginProviders(types: Iterable<FirebaseLoginMethodType>): DbxFirebaseAuthLoginProvider[] {\n return filterMaybeValues(mapIterable(types ?? [], (x) => this._providers.get(x)));\n }\n\n getRegisterProvider(type: FirebaseLoginMethodType): Maybe<DbxFirebaseAuthLoginProvider> {\n return this._providers.get(type);\n }\n\n getRegisterProviders(types: Iterable<FirebaseLoginMethodType>): DbxFirebaseAuthLoginProvider[] {\n return filterMaybeValues(mapIterable(types ?? [], (x) => this._providers.get(x))).filter((x) => x.registrationComponentClass !== false);\n }\n\n getProviderAssets(type: FirebaseLoginMethodType): Maybe<DbxFirebaseAuthLoginProviderAssets> {\n return this._assets.get(type);\n }\n\n getPasswordConfig() {\n return this._passwordConfig;\n }\n\n setPasswordConfig(passwordConfig: DbxFirebaseAuthLoginPasswordConfig) {\n this._passwordConfig = passwordConfig;\n }\n}\n","import { DbxInjectionContext } from '@dereekb/dbx-core';\n\n/**\n * Injection token for a DbxInjectionContext for DbxFirebaseLoginContext.\n */\nexport abstract class DbxFirebaseLoginContext extends DbxInjectionContext {}\n","import { Component, Directive, Input, OnInit } from '@angular/core';\nimport { HandleActionFunction } from '@dereekb/dbx-core';\nimport { from } from 'rxjs';\nimport { DbxFirebaseAuthService } from '../service/firebase.auth.service';\nimport { FirebaseLoginMethodType } from './login';\nimport { DbxFirebaseAuthLoginService } from './login.service';\nimport { DbxFirebaseLoginContext } from './login.context';\n\nexport interface DbxFirebaseLoginButtonConfig {\n text: string;\n iconUrl?: string;\n icon?: string;\n buttonColor?: string;\n buttonTextColor?: string;\n handleLogin: () => Promise<unknown>;\n}\n\n/**\n * Login button and action.\n */\n@Component({\n selector: 'dbx-firebase-login-button',\n template: `\n <ng-container dbxAction [dbxActionHandler]=\"handleAction\" dbxActionValue [dbxActionSuccessHandler]=\"onActionSuccess\">\n <dbx-button dbxActionButton [customTextColor]=\"buttonTextColor\" [customButtonColor]=\"buttonColor\" [raised]=\"true\">\n <div class=\"dbx-firebase-login-button-content\">\n <span class=\"dbx-firebase-login-button-icon dbx-icon-spacer\">\n <img *ngIf=\"iconUrl\" [src]=\"iconUrl\" />\n <mat-icon *ngIf=\"icon\">{{ icon }}</mat-icon>\n </span>\n <span class=\"dbx-firebase-login-button-text\">{{ text }}</span>\n </div>\n </dbx-button>\n </ng-container>\n `,\n host: {\n class: 'dbx-firebase-login-button'\n }\n})\nexport class DbxFirebaseLoginButtonComponent {\n @Input()\n config!: DbxFirebaseLoginButtonConfig;\n\n get iconUrl() {\n return this.config?.iconUrl;\n }\n\n get icon() {\n return this.config?.icon;\n }\n\n get text() {\n return this.config?.text;\n }\n\n get buttonColor() {\n return this.config?.buttonColor ?? 'transparent';\n }\n\n get buttonTextColor() {\n return this.config?.buttonTextColor;\n }\n\n readonly handleAction: HandleActionFunction = () => {\n const loginPromise = this.config.handleLogin();\n return from(loginPromise);\n };\n\n onActionSuccess = () => {\n // todo: show checkmark on success?\n };\n}\n\n@Component({\n selector: 'dbx-firebase-login-button-container',\n template: `\n <div class=\"dbx-firebase-login-button-container\">\n <ng-content></ng-content>\n </div>\n `\n})\nexport class DbxFirebaseLoginButtonContainerComponent {}\n\nexport const DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE = `\n <dbx-firebase-login-button-container>\n <dbx-firebase-login-button [config]=\"config\"></dbx-firebase-login-button>\n </dbx-firebase-login-button-container>\n`;\n\n@Directive()\nexport abstract class AbstractConfiguredDbxFirebaseLoginButtonDirective implements OnInit {\n private _config!: DbxFirebaseLoginButtonConfig;\n\n abstract readonly loginProvider: FirebaseLoginMethodType;\n\n constructor(readonly dbxFirebaseAuthService: DbxFirebaseAuthService, readonly dbxFirebaseAuthLoginService: DbxFirebaseAuthLoginService, readonly dbxFirebaseLoginContext: DbxFirebaseLoginContext) {}\n\n ngOnInit(): void {\n const assets = this.assetConfig;\n\n this._config = {\n text: assets.loginText ?? `<loginText not configured>`,\n icon: assets.loginIcon,\n iconUrl: assets.logoUrl,\n buttonColor: assets.backgroundColor,\n buttonTextColor: assets.textColor,\n handleLogin: () => this.handleLogin()\n };\n }\n\n abstract handleLogin(): Promise<unknown>;\n\n get providerConfig() {\n return this.dbxFirebaseAuthLoginService.getLoginProvider(this.loginProvider);\n }\n\n get assetConfig() {\n return this.dbxFirebaseAuthLoginService.getProviderAssets(this.loginProvider) ?? {};\n }\n\n get config() {\n return this._config;\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginAppleComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'apple';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithApple();\n }\n}\n","export type FirebaseLoginMethodType = string;\nexport type FirebaseLoginMethodCategory = string;\n\nexport type KnownFirebaseLoginMethodType = 'email' | 'phone' | 'google' | 'facebook' | 'github' | 'twitter' | 'apple' | 'microsoft' | 'anonymous'; // TODO: Add more\n\nexport const DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY = 'default';\nexport const OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY = 'oauth';\n\nexport type KnownFirebaseLoginMethodCategory = typeof DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY | typeof OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY;\n\nexport type DbxFirebaseLoginMode = 'login' | 'register';\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginAnonymousComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'anonymous';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInAsAnonymous();\n }\n}\n","import { Observable, BehaviorSubject, map, shareReplay, combineLatest } from 'rxjs';\nimport { DbxFirebaseAuthLoginProvider, DbxFirebaseAuthLoginService } from './login.service';\nimport { DbxFirebaseLoginMode, FirebaseLoginMethodType, FirebaseLoginMethodCategory } from './login';\nimport { Component, Input, OnDestroy } from '@angular/core';\nimport { containsStringAnyCase, Maybe, ArrayOrValue, excludeValuesFromArray, asArray } from '@dereekb/util';\nimport { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\n\n/**\n * Pre-configured login component that displays all configured login types.\n */\n@Component({\n selector: 'dbx-firebase-login-list',\n template: `\n <div class=\"dbx-firebase-login-item\" *ngFor=\"let config of providerInjectionConfigs$ | async\">\n <dbx-injection [config]=\"config\"></dbx-injection>\n </div>\n `,\n host: {\n class: 'dbx-firebase-login-list'\n }\n})\nexport class DbxFirebaseLoginListComponent implements OnDestroy {\n private _loginMode = new BehaviorSubject<DbxFirebaseLoginMode>('login');\n private _inputProviderCategories = new BehaviorSubject<Maybe<ArrayOrValue<FirebaseLoginMethodCategory>>>(undefined);\n private _omitProviderTypes = new BehaviorSubject<Maybe<ArrayOrValue<FirebaseLoginMethodType>>>(undefined);\n private _inputProviderTypes = new BehaviorSubject<Maybe<ArrayOrValue<FirebaseLoginMethodType>>>(undefined);\n\n readonly providerTypes$: Observable<string[]> = combineLatest([this._inputProviderTypes, this._omitProviderTypes]).pipe(\n map(([providerTypes, omitProviderTypes]) => {\n const baseTypes = providerTypes ? asArray(providerTypes) : this.dbxFirebaseAuthLoginService.getEnabledTypes();\n const types = omitProviderTypes ? excludeValuesFromArray(baseTypes, asArray(omitProviderTypes)) : baseTypes;\n return types;\n }),\n shareReplay(1)\n );\n\n readonly providers$ = combineLatest([this.providerTypes$, this._inputProviderCategories]).pipe(\n map(([x, inputProviderCategories]) => {\n const providerCategories = asArray(inputProviderCategories);\n let providers = this.dbxFirebaseAuthLoginService.getLoginProviders(x);\n\n if (providerCategories.length) {\n const categories = new Set(providerCategories);\n providers = providers.filter((x) => containsStringAnyCase(categories, x.category ?? ''));\n }\n\n return providers;\n })\n );\n\n readonly providerInjectionConfigs$: Observable<DbxInjectionComponentConfig[]> = combineLatest([this._loginMode, this.providers$]).pipe(\n map(([mode, providers]: [DbxFirebaseLoginMode, DbxFirebaseAuthLoginProvider[]]) => {\n const mapFn = mode === 'register' ? (x: DbxFirebaseAuthLoginProvider) => ({ componentClass: x.registrationComponentClass ?? x.componentClass } as DbxInjectionComponentConfig) : (x: DbxFirebaseAuthLoginProvider) => ({ componentClass: x.componentClass } as DbxInjectionComponentConfig);\n return providers.map(mapFn);\n })\n );\n\n constructor(readonly dbxFirebaseAuthLoginService: DbxFirebaseAuthLoginService) {}\n\n ngOnDestroy(): void {\n this._loginMode.complete();\n this._inputProviderCategories.complete();\n this._omitProviderTypes.complete();\n this._inputProviderTypes.complete();\n }\n\n @Input()\n set loginMode(loginMode: DbxFirebaseLoginMode) {\n this._loginMode.next(loginMode);\n }\n\n @Input()\n set providerTypes(providerTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>) {\n this._inputProviderTypes.next(providerTypes);\n }\n\n @Input()\n set omitProviderTypes(providerTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>) {\n this._omitProviderTypes.next(providerTypes);\n }\n\n @Input()\n set providerCategories(providerCategories: Maybe<ArrayOrValue<FirebaseLoginMethodCategory>>) {\n this._inputProviderCategories.next(providerCategories);\n }\n}\n","import { Directive } from '@angular/core';\nimport { AbstractForwardDbxInjectionContextDirective } from '@dereekb/dbx-core';\nimport { DbxFirebaseLoginContext } from './login.context';\n\n/**\n * DbxFirebaseLoginContext implementation.\n */\n@Directive({\n selector: '[dbxFirebaseLoginContext]',\n providers: [\n {\n provide: DbxFirebaseLoginContext,\n useExisting: DbxFirebaseLoginContextDirective\n }\n ]\n})\nexport class DbxFirebaseLoginContextDirective extends AbstractForwardDbxInjectionContextDirective implements DbxFirebaseLoginContext {}\n","import { DbxFirebaseLoginMode, FirebaseLoginMethodCategory, FirebaseLoginMethodType } from './login';\nimport { Component, Input } from '@angular/core';\nimport { ArrayOrValue, Maybe } from '@dereekb/util';\n\n/**\n * Pre-configured login component that displays all configured login types.\n */\n@Component({\n selector: 'dbx-firebase-login',\n template: `\n <ng-container *dbxInjectionContext dbxFirebaseLoginContext>\n <dbx-firebase-login-list [providerTypes]=\"providerTypes\" [omitProviderTypes]=\"omitProviderTypes\" [providerCategories]=\"providerCategories\" [loginMode]=\"loginMode\"></dbx-firebase-login-list>\n </ng-container>\n `,\n host: {\n class: 'd-block dbx-firebase-login',\n '[class]': '{ \"dbx-firebase-register\": loginMode === \"register\" }'\n }\n})\nexport class DbxFirebaseLoginComponent {\n @Input()\n loginMode: DbxFirebaseLoginMode = 'login';\n\n @Input()\n providerTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>;\n\n @Input()\n omitProviderTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>;\n\n @Input()\n providerCategories: Maybe<ArrayOrValue<FirebaseLoginMethodCategory>>;\n}\n","import { ReadableError } from '@dereekb/util';\n\nexport interface FirebaseAuthError {\n code: string;\n name: string;\n customData: unknown;\n}\n\nexport const FIREBASE_AUTH_USER_NOT_FOUND_ERROR = 'auth/user-not-found';\nexport const FIREBASE_AUTH_NETWORK_REQUEST_ERROR = 'auth/network-request-error';\n\nexport function firebaseAuthErrorToReadableError(inputError: FirebaseAuthError): ReadableError {\n const code = inputError.code;\n let error: ReadableError;\n\n switch (code) {\n case FIREBASE_AUTH_USER_NOT_FOUND_ERROR:\n error = {\n code,\n message: 'A user with this email address was not found.'\n };\n break;\n case FIREBASE_AUTH_NETWORK_REQUEST_ERROR:\n error = {\n code,\n message: 'Could not reach the server.'\n };\n break;\n default:\n error = {\n code,\n message: 'An error occured.'\n };\n break;\n }\n\n return error;\n}\n","import { Component, Input, OnDestroy } from '@angular/core';\nimport { TextPasswordFieldConfig, provideFormlyContext, AbstractAsyncFormlyFormDirective, usernamePasswordLoginFields, DefaultUsernameLoginFieldsValue } from '@dereekb/dbx-form';\nimport { Maybe } from '@dereekb/util';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { DbxFirebaseLoginMode } from './login';\n\nexport type DbxFirebaseEmailFormValue = DefaultUsernameLoginFieldsValue;\n\nexport interface DbxFirebaseEmailFormConfig {\n loginMode: DbxFirebaseLoginMode;\n passwordConfig?: TextPasswordFieldConfig;\n}\n\n@Component({\n template: `\n <dbx-formly></dbx-formly>\n `,\n selector: 'dbx-firebase-email-form',\n providers: [provideFormlyContext()]\n})\nexport class DbxFirebaseEmailFormComponent extends AbstractAsyncFormlyFormDirective<DbxFirebaseEmailFormValue> implements OnDestroy {\n private _config = new BehaviorSubject<DbxFirebaseEmailFormConfig>({ loginMode: 'login' });\n\n readonly fields$: Observable<Maybe<FormlyFieldConfig[]>> = this._config.pipe(\n map(({ loginMode = 'login', passwordConfig }) => {\n const fields: FormlyFieldConfig[] = usernamePasswordLoginFields({ username: 'email', password: passwordConfig, verifyPassword: loginMode === 'register' });\n return fields;\n })\n );\n\n @Input()\n set config(config: DbxFirebaseEmailFormConfig) {\n this._config.next(config);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this._config.complete();\n }\n}\n","import { Component } from '@angular/core';\nimport { provideFormlyContext, AbstractSyncFormlyFormDirective, emailField } from '@dereekb/dbx-form';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\n\nexport interface DbxFirebaseEmailRecoveryFormValue {\n email: string;\n}\n\n@Component({\n template: `\n <dbx-formly></dbx-formly>\n `,\n selector: 'dbx-firebase-email-recovery-form',\n providers: [provideFormlyContext()]\n})\nexport class DbxFirebaseEmailRecoveryFormComponent extends AbstractSyncFormlyFormDirective<DbxFirebaseEmailRecoveryFormValue> {\n readonly fields: FormlyFieldConfig[] = [emailField({ required: true })];\n}\n","import { DbxFirebaseEmailRecoveryFormValue } from './login.email.recovery.form.component';\nimport { HandleActionFunction, DBX_INJECTION_COMPONENT_DATA, ClickableAnchor } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from './../service/firebase.auth.service';\nimport { firstValueFrom, from, tap, BehaviorSubject } from 'rxjs';\nimport { Component, EventEmitter, OnDestroy, Inject } from '@angular/core';\nimport { DbxFirebaseLoginContext } from './login.context';\nimport { DbxFirebaseEmailFormValue, DbxFirebaseEmailFormConfig } from './login.email.form.component';\nimport { DbxFirebaseLoginMode } from './login';\nimport { firebaseAuthErrorToReadableError } from '../error';\nimport { Maybe } from '@dereekb/util';\n\nexport interface DbxFirebaseLoginEmailContentComponentConfig extends DbxFirebaseEmailFormConfig {\n loginMode: DbxFirebaseLoginMode;\n}\n\nexport type DbxFirebaseLoginEmailContentMode = 'login' | 'recover' | 'recovering';\n\n@Component({\n templateUrl: './login.email.content.component.html'\n})\nexport class DbxFirebaseLoginEmailContentComponent implements OnDestroy {\n readonly formConfig: DbxFirebaseEmailFormConfig = {\n loginMode: this.config.loginMode,\n passwordConfig: this.config.passwordConfig\n };\n\n emailFormValue: Maybe<DbxFirebaseEmailFormValue>;\n recoveryFormValue: Maybe<DbxFirebaseEmailRecoveryFormValue>;\n\n private _emailMode = new BehaviorSubject<DbxFirebaseLoginEmailContentMode>('login');\n readonly emailMode$ = this._emailMode.asObservable();\n\n readonly forgotAnchor: ClickableAnchor = {\n onClick: () => {\n this.openRecovery();\n }\n };\n\n readonly doneOrCancelled = new EventEmitter<boolean>();\n\n constructor(readonly dbxFirebaseAuthService: DbxFirebaseAuthService, @Inject(DBX_INJECTION_COMPONENT_DATA) readonly config: DbxFirebaseLoginEmailContentComponentConfig) {}\n\n static openEmailLoginContext(dbxFirebaseLoginContext: DbxFirebaseLoginContext, config: DbxFirebaseLoginEmailContentComponentConfig): Promise<boolean> {\n return dbxFirebaseLoginContext.showContext({\n config: {\n componentClass: DbxFirebaseLoginEmailContentComponent,\n data: config\n },\n use: (instance) => firstValueFrom(instance.doneOrCancelled)\n });\n }\n\n ngOnDestroy(): void {\n this._emailMode.complete();\n }\n\n get loginMode() {\n return this.config.loginMode;\n }\n\n get isLoginMode() {\n return this.loginMode === 'login';\n }\n\n get isRegisterMode() {\n return this.loginMode === 'register';\n }\n\n get buttonText() {\n return this.config.loginMode === 'register' ? 'Register' : 'Log In';\n }\n\n readonly handleLoginAction: HandleActionFunction<DbxFirebaseEmailFormValue> = (value: DbxFirebaseEmailFormValue) => {\n this.emailFormValue = value;\n this.recoveryFormValue = { email: value.username }; // cache value for recovery\n\n let result;\n\n if (this.loginMode === 'register') {\n result = this.dbxFirebaseAuthService.registerWithEmailAndPassword(value.username, value.password);\n } else {\n result = this.dbxFirebaseAuthService.logInWithEmailAndPassword(value.username, value.password).catch((error) => {\n throw firebaseAuthErrorToReadableError(error);\n });\n }\n\n return from(result).pipe(\n tap(() => {\n this.doneOrCancelled.next(true);\n })\n );\n };\n\n // MARK: Recovery\n openRecovery() {\n this._emailMode.next('recover');\n }\n\n readonly handleRecoveryAction: HandleActionFunction<DbxFirebaseEmailRecoveryFormValue> = (value) => {\n this.recoveryFormValue = value;\n this.emailFormValue = { username: value.email, password: '' };\n\n const result = this.dbxFirebaseAuthService.sendPasswordResetEmail(value.email);\n\n return from(result).pipe(\n tap(() => {\n this.onRecoveringSuccess();\n })\n );\n };\n\n // MARK: Recovering\n onRecoveringSuccess() {\n // optionally override in parent\n }\n\n // MARK: Cancel\n onCancel() {\n this.doneOrCancelled.next(false);\n }\n\n onCancelReset() {\n this.doneOrCancelled.next(false);\n }\n}\n","<div class=\"dbx-firebase-login-email-content\">\n <ng-container [ngSwitch]=\"emailMode$ | async\">\n <ng-container *ngSwitchCase=\"'login'\">\n <ng-container *ngTemplateOutlet=\"loginView\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'recover'\">\n <ng-container *ngTemplateOutlet=\"resetPassword\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<!-- Login View -->\n<ng-template #loginView>\n <ng-container dbxAction [dbxActionHandler]=\"handleLoginAction\">\n <dbx-firebase-email-form [config]=\"formConfig\" dbxActionForm [dbxFormSource]=\"emailFormValue\"></dbx-firebase-email-form>\n <div class=\"dbx-firebase-login-email-forgot-prompt\" *ngIf=\"isLoginMode\">\n <dbx-link [anchor]=\"forgotAnchor\">Forgot Password?</dbx-link>\n </div>\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-wide-button\" [text]=\"buttonText\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancel()\">Cancel</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </ng-container>\n</ng-template>\n\n<!-- Reset Password View -->\n<ng-template #resetPassword>\n <ng-container dbxAction [dbxActionHandler]=\"handleRecoveryAction\">\n <dbx-firebase-email-recovery-form dbxActionForm [dbxFormSource]=\"recoveryFormValue\"></dbx-firebase-email-recovery-form>\n <p class=\"dbx-hint\">An email will be sent to the above address to help you reset your password.</p>\n <div class=\"dbx-flex\">\n <dbx-button class=\"dbx-wide-button\" text=\"Send Recovery Email\" [raised]=\"true\" color=\"primary\" dbxActionButton></dbx-button>\n <span class=\"dbx-spacer\"></span>\n <button mat-flat-button (click)=\"onCancelReset()\">Cancel Recovery</button>\n </div>\n <dbx-error dbxActionError></dbx-error>\n </ng-container>\n</ng-template>\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\nimport { DbxFirebaseLoginEmailContentComponent } from './login.email.content.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginEmailComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'email';\n\n handleLogin() {\n return DbxFirebaseLoginEmailContentComponent.openEmailLoginContext(this.dbxFirebaseLoginContext, { loginMode: 'login', passwordConfig: this.dbxFirebaseAuthLoginService.getPasswordConfig() });\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginFacebookComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'facebook';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithFacebook();\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginGoogleComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'google';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithGoogle();\n }\n}\n","import { FirebaseLoginMethodCategory, FirebaseLoginMethodType } from './login';\nimport { Component, Input } from '@angular/core';\nimport { ArrayOrValue, Maybe } from '@dereekb/util';\n\n/**\n * Pre-configured register component that displays all configured login types and their registration components.\n */\n@Component({\n selector: 'dbx-firebase-register',\n template: `\n <dbx-firebase-login loginMode=\"register\" [providerTypes]=\"providerTypes\" [omitProviderTypes]=\"omitProviderTypes\" [providerCategories]=\"providerCategories\"></dbx-firebase-login>\n `\n})\nexport class DbxFirebaseRegisterComponent {\n @Input()\n providerTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>;\n\n @Input()\n omitProviderTypes: Maybe<ArrayOrValue<FirebaseLoginMethodType>>;\n\n @Input()\n providerCategories: Maybe<ArrayOrValue<FirebaseLoginMethodCategory>>;\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginGitHubComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'github';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithGithub();\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginTwitterComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'twitter';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithTwitter();\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective, DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE } from './login.button.component';\n\n@Component({\n template: DEFAULT_CONFIGURED_DBX_FIREBASE_LOGIN_BUTTON_TEMPLATE\n})\nexport class DbxFirebaseLoginMicrosoftComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'microsoft';\n\n handleLogin() {\n return this.dbxFirebaseAuthService.logInWithMicrosoft();\n }\n}\n","import { Component } from '@angular/core';\nimport { AbstractConfiguredDbxFirebaseLoginButtonDirective } from './login.button.component';\nimport { DbxFirebaseLoginEmailContentComponent } from './login.email.content.component';\n\n@Component({\n templateUrl: './register.email.component.html'\n})\nexport class DbxFirebaseRegisterEmailComponent extends AbstractConfiguredDbxFirebaseLoginButtonDirective {\n readonly loginProvider = 'email';\n\n handleLogin() {\n return DbxFirebaseLoginEmailContentComponent.openEmailLoginContext(this.dbxFirebaseLoginContext, { loginMode: 'register', passwordConfig: this.dbxFirebaseAuthLoginService.getPasswordConfig() });\n }\n}\n","<dbx-firebase-login-button-container>\n <dbx-firebase-login-button [config]=\"config\"></dbx-firebase-login-button>\n</dbx-firebase-login-button-container>\n","import { DbxInjectionComponentConfig } from '@dereekb/dbx-core';\n\nimport { Component } from '@angular/core';\nimport { DbxFirebaseAuthLoginService } from './login.service';\n\n@Component({\n selector: 'dbx-firebase-login-terms',\n template: `\n <dbx-injection [config]=\"config\"></dbx-injection>\n `,\n host: {\n class: 'dbx-firebase-login-terms d-block'\n }\n})\nexport class DbxFirebaseLoginTermsComponent {\n readonly config: DbxInjectionComponentConfig = {\n componentClass: this.dbxFirebaseAuthLoginService.termsComponentClass\n };\n\n constructor(readonly dbxFirebaseAuthLoginService: DbxFirebaseAuthLoginService) {}\n}\n","import { ClickableAnchor } from '@dereekb/dbx-core';\nimport { Component, EventEmitter, Output } from '@angular/core';\n\n@Component({\n selector: 'dbx-firebase-login-context-back-button',\n template: `\n <dbx-link [anchor]=\"anchor\">Choose other login method.</dbx-link>\n `\n})\nexport class DbxFirebaseLoginContextBackButtonComponent {\n @Output()\n readonly cancelLogin = new EventEmitter<void>();\n\n readonly anchor: ClickableAnchor = {\n onClick: () => this.cancelLogin.emit()\n };\n}\n","import { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { DbxFirebaseLoginAppleComponent } from './login.apple.component';\nimport { DbxFirebaseLoginButtonComponent, DbxFirebaseLoginButtonContainerComponent } from './login.button.component';\nimport { ModuleWithProviders, NgModule, Type } from '@angular/core';\nimport { DbxInjectionComponentModule } from '@dereekb/dbx-core';\nimport { DbxActionModule, DbxRouterAnchorModule, DbxButtonModule, DbxReadableErrorModule } from '@dereekb/dbx-web';\nimport { FirebaseLoginMethodType, KnownFirebaseLoginMethodType, OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY, DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY } from './login';\nimport { DbxFirebaseLoginAnonymousComponent } from './login.anonymous.component';\nimport { DbxFirebaseLoginComponent } from './login.component';\nimport { DbxFirebaseLoginEmailComponent } from './login.email.component';\nimport { DbxFirebaseLoginFacebookComponent } from './login.facebook.component';\nimport { DbxFirebaseLoginGoogleComponent } from './login.google.component';\nimport { DbxFirebaseAuthLoginProvider, DbxFirebaseAuthLoginService, DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN, DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN } from './login.service';\nimport { DbxFirebaseRegisterComponent } from './register.component';\nimport { DbxFirebaseLoginGitHubComponent } from './login.github.component';\nimport { DbxFirebaseLoginTwitterComponent } from './login.twitter.component';\nimport { DbxFirebaseLoginMicrosoftComponent } from './login.microsoft.component';\nimport { DbxFirebaseLoginListComponent } from './login.list.component';\nimport { DbxFirebaseRegisterEmailComponent } from './register.email.component';\nimport { DbxFirebaseLoginContextDirective } from './login.context.directive';\nimport { DbxFirebaseLoginEmailContentComponent } from './login.email.content.component';\nimport { DbxFormActionModule, DbxFormFormlyTextFieldModule, DbxFormIoModule, DbxFormlyModule, DbxFormModule } from '@dereekb/dbx-form';\nimport { DbxFirebaseEmailFormComponent } from './login.email.form.component';\nimport { DbxFirebaseLoginTermsComponent } from './login.terms.component';\nimport { DbxFirebaseLoginTermsSimpleComponent } from './login.terms.simple.component';\nimport { DbxFirebaseLoginContextBackButtonComponent } from './login.context.back.component';\nimport { DbxFirebaseEmailRecoveryFormComponent } from './login.email.recovery.form.component';\nimport { DbxFirebaseAuthLoginPasswordConfig } from './login.password';\nimport { DbxFirebaseLoginTermsConfig } from './login.terms';\n\nexport abstract class DbxFirebaseLoginModuleRootConfig extends DbxFirebaseLoginTermsConfig {\n abstract readonly enabledLoginMethods: FirebaseLoginMethodType[] | true;\n abstract readonly termsComponentClass?: Type<unknown>;\n abstract readonly passwordConfig?: DbxFirebaseAuthLoginPasswordConfig;\n}\n\nexport function defaultFirebaseAuthLoginProvidersFactory(): DbxFirebaseAuthLoginProvider[] {\n // NOTE: Asset URLS are from Firebase.\n // https://firebase.google.com/docs/auth/web/firebaseui\n const baseFirebaseJSUrl = `https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth`;\n\n // NOTE: Colors are from https://brandcolors.net/\n\n return [\n {\n category: DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'email' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginEmailComponent,\n registrationComponentClass: DbxFirebaseRegisterEmailComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/mail.svg`,\n loginText: 'Continue with Email',\n backgroundColor: '#ea4335', // gmail red color\n textColor: '#FFF'\n }\n },\n {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'google' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginGoogleComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/google.svg`,\n loginText: 'Continue with Google',\n backgroundColor: '#FFF',\n textColor: '#757575'\n }\n },\n {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'facebook' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginFacebookComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/facebook.svg`,\n loginText: 'Continue with Facebook',\n backgroundColor: '#4267B2',\n textColor: '#FFF'\n }\n },\n {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'twitter' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginTwitterComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/twitter.svg`,\n loginText: 'Continue with Twitter',\n backgroundColor: '#1da1f2',\n textColor: '#FFF'\n }\n },\n {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'github' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginGitHubComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/github.svg`,\n loginText: 'Continue with Github',\n backgroundColor: '#333',\n textColor: '#FFF'\n }\n },\n /*{\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'apple' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginGitHubComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/apple.svg`,\n loginText: 'Continue with Apple',\n backgroundColor: '#333',\n textColor: '#FFF'\n }\n }, {\n category: OAUTH_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'microsoft' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginGitHubComponent,\n assets: {\n logoUrl: `${baseFirebaseJSUrl}/microsoft.svg`,\n loginText: 'Continue with Microsoft',\n backgroundColor: '#ea3e23',\n textColor: '#FFF'\n }\n },*/ {\n category: DEFAULT_FIREBASE_LOGIN_METHOD_CATEGORY,\n loginMethodType: 'anonymous' as KnownFirebaseLoginMethodType,\n componentClass: DbxFirebaseLoginAnonymousComponent,\n assets: {\n loginIcon: 'account_circle',\n loginText: 'Continue as Guest',\n backgroundColor: '#000',\n textColor: '#FFF'\n }\n }\n ];\n}\n\n/**\n * Contains components related to logging in.\n */\n@NgModule({\n imports: [CommonModule, MatIconModule, MatButtonModule, DbxRouterAnchorModule, DbxFormIoModule, DbxFormModule, DbxFormlyModule, DbxFormActionModule, DbxFormFormlyTextFieldModule, DbxReadableErrorModule, DbxActionModule, DbxButtonModule, DbxInjectionComponentModule],\n declarations: [\n DbxFirebaseLoginComponent,\n DbxFirebaseLoginContextDirective,\n DbxFirebaseLoginContextBackButtonComponent,\n DbxFirebaseRegisterComponent,\n DbxFirebaseLoginListComponent,\n DbxFirebaseLoginButtonComponent,\n DbxFirebaseLoginButtonContainerComponent,\n DbxFirebaseLoginEmailComponent,\n DbxFirebaseLoginEmailContentComponent,\n DbxFirebaseEmailFormComponent,\n DbxFirebaseEmailRecoveryFormComponent,\n DbxFirebaseRegisterEmailComponent,\n DbxFirebaseLoginGoogleComponent,\n DbxFirebaseLoginGitHubComponent,\n DbxFirebaseLoginTwitterComponent,\n DbxFirebaseLoginAppleComponent,\n DbxFirebaseLoginMicrosoftComponent,\n DbxFirebaseLoginFacebookComponent,\n DbxFirebaseLoginAnonymousComponent,\n DbxFirebaseLoginTermsComponent,\n DbxFirebaseLoginTermsSimpleComponent\n ],\n exports: [\n DbxFirebaseLoginComponent,\n DbxFirebaseLoginContextDirective,\n DbxFirebaseLoginContextBackButtonComponent,\n DbxFirebaseRegisterComponent,\n DbxFirebaseLoginListComponent,\n DbxFirebaseLoginButtonComponent,\n DbxFirebaseLoginButtonContainerComponent,\n DbxFirebaseLoginEmailComponent,\n DbxFirebaseLoginEmailContentComponent,\n DbxFirebaseEmailFormComponent,\n DbxFirebaseEmailRecoveryFormComponent,\n DbxFirebaseRegisterEmailComponent,\n DbxFirebaseLoginGoogleComponent,\n DbxFirebaseLoginGitHubComponent,\n DbxFirebaseLoginTwitterComponent,\n DbxFirebaseLoginAppleComponent,\n DbxFirebaseLoginMicrosoftComponent,\n DbxFirebaseLoginFacebookComponent,\n DbxFirebaseLoginAnonymousComponent,\n DbxFirebaseLoginTermsComponent,\n DbxFirebaseLoginTermsSimpleComponent\n ],\n providers: []\n})\nexport class DbxFirebaseLoginModule {\n constructor(config: DbxFirebaseLoginModuleRootConfig, dbxFirebaseAuthLoginService: DbxFirebaseAuthLoginService) {\n if (config.enabledLoginMethods === true) {\n dbxFirebaseAuthLoginService.setEnableAll();\n } else {\n dbxFirebaseAuthLoginService.enable(config.enabledLoginMethods); // enable the types in the service.\n }\n }\n\n static forRoot(config: DbxFirebaseLoginModuleRootConfig): ModuleWithProviders<DbxFirebaseLoginModule> {\n return {\n ngModule: DbxFirebaseLoginModule,\n providers: [\n {\n provide: DEFAULT_FIREBASE_AUTH_LOGIN_PROVIDERS_TOKEN,\n useFactory: defaultFirebaseAuthLoginProvidersFactory\n },\n {\n provide: DEFAULT_FIREBASE_AUTH_LOGIN_TERMS_COMPONENT_CLASS_TOKEN,\n useValue: config.termsComponentClass\n },\n {\n provide: DEFAULT_FIREBASE_AUTH_LOGIN_PASSWORD_CONFIG_TOKEN,\n useValue: config.passwordConfig\n },\n {\n provide: DbxFirebaseLoginModuleRootConfig,\n useValue: config\n },\n {\n provide: DbxFirebaseLoginTermsConfig,\n useValue: config\n }\n ]\n };\n }\n}\n","import { addToSetCopy, AuthClaims, AuthClaimsObject, AuthRoleClaimsService, AuthRoleSet } from '@dereekb/util';\nimport { map, Observable, switchMap } from 'rxjs';\nimport { DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate, DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE } from './firebase.auth.service';\n\nexport interface AuthRolesObsWithClaimsServiceConfig<T extends AuthClaimsObject> extends Partial<Pick<DbxFirebaseAuthServiceDelegate, 'isAdminInAuthRoleSet'>> {\n readonly claimsService: AuthRoleClaimsService<T>;\n /**\n * Whether or not to also add the current AuthUserState value to decoded roles.\n */\n readonly addAuthUserStateToRoles?: boolean;\n}\n\nexport function authRolesObsWithClaimsService<T extends AuthClaimsObject>(config: AuthRolesObsWithClaimsServiceConfig<T>): (dbxFirebaseAuthService: DbxFirebaseAuthService) => Observable<AuthRoleSet> {\n const { addAuthUserStateToRoles: addAuthUserState, claimsService } = config;\n\n return (dbxFirebaseAuthService: DbxFirebaseAuthService): Observable<AuthRoleSet> => {\n let obs = dbxFirebaseAuthService.idTokenResult$.pipe(map((x) => claimsService.toRoles(x.claims as AuthClaims<T>)));\n\n if (addAuthUserState) {\n obs = obs.pipe(switchMap((authRoleSet: AuthRoleSet) => dbxFirebaseAuthService.authUserState$.pipe(map((userState) => addToSetCopy(authRoleSet, [userState])))));\n }\n\n return obs;\n };\n}\n\nexport type DefaultDbxFirebaseAuthServiceDelegateWithClaimsServiceConfig<T extends AuthClaimsObject> = AuthRolesObsWithClaimsServiceConfig<T>;\n\nexport function defaultDbxFirebaseAuthServiceDelegateWithClaimsService<T extends AuthClaimsObject>(config: DefaultDbxFirebaseAuthServiceDelegateWithClaimsServiceConfig<T>): DbxFirebaseAuthServiceDelegate {\n return {\n authUserStateObs: DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE.authUserStateObs,\n authRolesObs: authRolesObsWithClaimsService(config),\n isOnboarded: DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE.isOnboarded,\n isAdminInAuthRoleSet: config.isAdminInAuthRoleSet ?? DEFAULT_DBX_FIREBASE_AUTH_SERVICE_DELEGATE.isAdminInAuthRoleSet,\n authRoleClaimsService: config.claimsService as unknown as AuthRoleClaimsService<AuthClaimsObject>\n };\n}\n","import { Injector, ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { DbxAuthService } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService, DbxFirebaseAuthServiceDelegate } from './service/firebase.auth.service';\n\nexport interface DbxFirebaseAuthModuleConfig {\n delegateFactory?: (injector: Injector) => DbxFirebaseAuthServiceDelegate;\n}\n\n@NgModule({})\nexport class DbxFirebaseAuthModule {\n static forRoot(config: DbxFirebaseAuthModuleConfig): ModuleWithProviders<DbxFirebaseAuthModule> {\n const providers: Provider[] = [\n DbxFirebaseAuthService,\n {\n provide: DbxAuthService,\n useExisting: DbxFirebaseAuthService\n }\n ];\n\n if (config.delegateFactory) {\n providers.push({\n provide: DbxFirebaseAuthServiceDelegate,\n useFactory: config.delegateFactory,\n deps: [Injector]\n });\n }\n\n return {\n ngModule: DbxFirebaseAuthModule,\n providers\n };\n }\n}\n","export interface DbxFirebaseEmulatorConfig {\n /**\n * Port to target.\n */\n port: number;\n /**\n * Defaults to localhost if not provided.\n */\n host?: string;\n}\n\nexport interface DbxFirebaseEmulatorsConfig {\n /**\n * Whether or not to enable the emulators.\n */\n useEmulators?: boolean;\n /**\n * Default host to target. Defaults to localhost if not provided.\n */\n host?: string;\n /**\n * emulator UI configuration\n */\n ui?: DbxFirebaseEmulatorConfig;\n /**\n * Auth emulator configuration\n */\n auth?: DbxFirebaseEmulatorConfig;\n /**\n * Firestore emulator configuration\n */\n firestore?: DbxFirebaseEmulatorConfig;\n /**\n * Firestore emulator configuration\n */\n storage?: DbxFirebaseEmulatorConfig;\n /**\n * Functions emulator configuration\n */\n functions?: DbxFirebaseEmulatorConfig;\n /**\n * Database emulator configuration\n */\n database?: DbxFirebaseEmulatorConfig;\n}\n\nexport abstract class DbxFirebaseParsedEmulatorsConfig implements DbxFirebaseEmulatorsConfig {\n useEmulators?: boolean;\n auth?: Required<DbxFirebaseEmulatorConfig>;\n firestore?: Required<DbxFirebaseEmulatorConfig>;\n storage?: Required<DbxFirebaseEmulatorConfig>;\n functions?: Required<DbxFirebaseEmulatorConfig>;\n database?: Required<DbxFirebaseEmulatorConfig>;\n}\n","import { ModuleWithProviders, NgModule, Injector } from '@angular/core';\nimport { FirebaseOptions, initializeApp } from 'firebase/app';\nimport { initializeAppCheck, ReCaptchaV3Provider } from 'firebase/app-check';\nimport { FirebaseApp, provideFirebaseApp } from '@angular/fire/app';\nimport { provideStorage, getStorage, connectStorageEmulator } from '@angular/fire/storage';\nimport { provideFunctions, getFunctions, connectFunctionsEmulator } from '@angular/fire/functions';\nimport { provideFirestore, getFirestore, connectFirestoreEmulator, enableIndexedDbPersistence } from '@angular/fire/firestore';\nimport { provideAuth, getAuth, connectAuthEmulator } from '@angular/fire/auth';\nimport { AppCheck, provideAppCheck } from '@angular/fire/app-check';\nimport { DbxFirebaseParsedEmulatorsConfig } from './emulators';\nimport { DbxFirebaseOptions, DBX_FIREBASE_OPTIONS_TOKEN } from './options';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { enableAppCheckDebugTokenGeneration } from '../auth/appcheck';\nimport { DbxFirebaseAppCheckHttpInterceptor } from '../auth/appcheck/appcheck.interceptor';\n\n// TODO: remove \"as any\" typescript casting - https://github.com/angular/angularfire/issues/3086\n\n/**\n * Default firebase firestore provider module.\n */\n@NgModule({\n imports: [\n provideFirestore(((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const firestore = getFirestore(firebaseApp);\n const emulators = injector.get<DbxFirebaseParsedEmulatorsConfig>(DbxFirebaseParsedEmulatorsConfig, undefined);\n\n if (emulators?.useEmulators && emulators?.firestore) {\n connectFirestoreEmulator(firestore, emulators.firestore.host, emulators.firestore.port, {});\n }\n\n enableIndexedDbPersistence(firestore);\n\n return firestore;\n }) as any)\n ]\n})\nexport class DbxFirebaseDefaultFirestoreProviderModule {}\n\n/**\n * Default firebase app check provider module.\n *\n * Also configures the DbxFirebaseAppCheckHttpInterceptor with HTTP_INTERCEPTORS in order for appCheck to be appended to requests to the api.\n */\n@NgModule({\n imports: [\n provideAppCheck((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const firebaseOptions = injector.get<DbxFirebaseOptions>(DBX_FIREBASE_OPTIONS_TOKEN);\n const appCheckOptions = firebaseOptions.appCheck;\n const appCheckKnowinglyDisabled = appCheckOptions?.disabled === true || firebaseOptions.emulators?.useEmulators === true;\n let appCheck: AppCheck;\n\n if (appCheckOptions && !appCheckKnowinglyDisabled) {\n // enable the debug tokens if not using emulators and allowDebugTokens is set true\n if (firebaseOptions.emulators?.useEmulators !== true && appCheckOptions.allowDebugTokens) {\n enableAppCheckDebugTokenGeneration(true);\n }\n\n // Only enabled outside of app-check environments. The emulators will not use appcheck.\n appCheck = initializeAppCheck(firebaseApp, {\n provider: new ReCaptchaV3Provider(appCheckOptions.reCaptchaV3),\n isTokenAutoRefreshEnabled: appCheckOptions.isTokenAutoRefreshEnabled ?? true\n });\n\n console.log('Enabled AppCheck.');\n } else {\n appCheck = undefined as unknown as AppCheck;\n\n if (!appCheckKnowinglyDisabled) {\n console.error('dbx-firebase: No appcheck configuration for the app, and not specifically disabled in config either.');\n }\n }\n\n return appCheck;\n })\n ],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: DbxFirebaseAppCheckHttpInterceptor,\n multi: true\n }\n ]\n})\nexport class DbxFirebaseDefaultAppCheckProviderModule {}\n\n/**\n * Default firebase auth provider module.\n */\n@NgModule({\n imports: [\n provideAuth((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const auth = getAuth(firebaseApp);\n const emulators = injector.get<DbxFirebaseParsedEmulatorsConfig>(DbxFirebaseParsedEmulatorsConfig, undefined);\n\n if (emulators?.useEmulators && emulators?.auth) {\n connectAuthEmulator(auth, `http://${emulators.auth.host}:${emulators.auth.port}`);\n }\n\n return auth;\n })\n ]\n})\nexport class DbxFirebaseDefaultAuthProviderModule {}\n\n/**\n * Default firebase storage provider module.\n */\n@NgModule({\n imports: [\n provideStorage((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const storage = getStorage(firebaseApp);\n const emulators = injector.get<DbxFirebaseParsedEmulatorsConfig>(DbxFirebaseParsedEmulatorsConfig, undefined);\n\n if (emulators?.useEmulators && emulators?.storage) {\n connectStorageEmulator(storage, emulators.storage.host, emulators.storage.port, {});\n }\n\n return storage;\n })\n ]\n})\nexport class DbxFirebaseDefaultStorageProviderModule {}\n\n/**\n * Default firebase functions provider module.\n */\n@NgModule({\n imports: [\n provideFunctions((injector: Injector) => {\n const firebaseApp = injector.get(FirebaseApp);\n const firebaseOptions = injector.get<DbxFirebaseOptions>(DBX_FIREBASE_OPTIONS_TOKEN);\n const { functionsRegionOrCustomDomain } = firebaseOptions;\n\n const functions = getFunctions(firebaseApp, functionsRegionOrCustomDomain);\n const emulators = injector.get<DbxFirebaseParsedEmulatorsConfig>(DbxFirebaseParsedEmulatorsConfig, undefined);\n\n if (emulators?.useEmulators && emulators?.functions) {\n connectFunctionsEmulator(functions, emulators.functions.host, emulators.functions.port);\n }\n\n return functions;\n })\n ]\n})\nexport class DbxFirebaseDefaultFunctionsProviderModule {}\n\n/**\n * Default provider module.\n */\n@NgModule({\n imports: [\n provideFirebaseApp((injector: Injector) => {\n const firebaseOptions = injector.get<DbxFirebaseOptions>(DBX_FIREBASE_OPTIONS_TOKEN);\n return initializeApp(firebaseOptions);\n }),\n DbxFirebaseDefaultAppCheckProviderModule,\n DbxFirebaseDefaultFirestoreProviderModule,\n DbxFirebaseDefaultAuthProviderModule,\n DbxFirebaseDefaultStorageProviderModule,\n DbxFirebaseDefaultFunctionsProviderModule\n ]\n})\nexport class DbxFirebaseDefaultFirebaseProvidersModule {\n static forRoot(firebaseOptions: FirebaseOptions): ModuleWithProviders<DbxFirebaseDefaultFirebaseProvidersModule> {\n return {\n ngModule: DbxFirebaseDefaultFirebaseProvidersModule,\n providers: [\n {\n provide: DBX_FIREBASE_OPTIONS_TOKEN,\n useValue: firebaseOptions\n }\n ]\n };\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DbxFirebaseEmulatorConfig, DbxFirebaseEmulatorsConfig, DbxFirebaseParsedEmulatorsConfig } from './emulators';\nimport { Maybe } from '@dereekb/util';\n\n/**\n * Used to configure the DbxFirebaseEmulatorsConfig provider.\n */\n@NgModule()\nexport class DbxFirebaseEmulatorModule {\n static forRoot(config: DbxFirebaseEmulatorsConfig): ModuleWithProviders<DbxFirebaseEmulatorModule> {\n const defaultHost = config.host ?? 'localhost';\n\n function emulatorConfig(emulator: Maybe<DbxFirebaseEmulatorConfig>): Required<DbxFirebaseEmulatorConfig> | undefined {\n return emulator ? { host: emulator.host ?? defaultHost, port: emulator.port } : undefined;\n }\n\n const finalConfig: DbxFirebaseParsedEmulatorsConfig = {\n useEmulators: config.useEmulators !== false,\n auth: emulatorConfig(config.auth),\n firestore: emulatorConfig(config.firestore),\n storage: emulatorConfig(config.storage),\n functions: emulatorConfig(config.functions),\n database: emulatorConfig(config.database)\n };\n\n return {\n ngModule: DbxFirebaseEmulatorModule,\n providers: [\n {\n provide: DbxFirebaseParsedEmulatorsConfig,\n useValue: finalConfig\n }\n ]\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Token to access the FirestoreContext value.\n */\nexport const DBX_FIRESTORE_CONTEXT_TOKEN = new InjectionToken('DBX_FIRESTORE_CONTEXT_TOKEN');\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { firebaseFirestoreContextFactory, FirestoreContext } from '@dereekb/firebase';\nimport { DBX_FIRESTORE_CONTEXT_TOKEN } from './firebase.firestore';\nimport { Firestore } from '@angular/fire/firestore';\nimport { ClassLikeType } from '@dereekb/util';\n\nexport interface DbxFirebaseFirestoreCollectionModuleConfig<T> {\n appCollectionClass: ClassLikeType<T>;\n collectionFactory: (context: FirestoreContext) => T;\n}\n\n/**\n * Used to initialize the FirestoreCollection for a DbxFirebase app.\n */\n@NgModule()\nexport class DbxFirebaseFirestoreCollectionModule {\n static forRoot<T>(config: DbxFirebaseFirestoreCollectionModuleConfig<T>): ModuleWithProviders<DbxFirebaseFirestoreCollectionModule> {\n return {\n ngModule: DbxFirebaseFirestoreCollectionModule,\n providers: [\n {\n provide: DBX_FIRESTORE_CONTEXT_TOKEN,\n useFactory: firebaseFirestoreContextFactory,\n deps: [Firestore]\n },\n {\n provide: config.appCollectionClass,\n useFactory: config.collectionFactory,\n deps: [DBX_FIRESTORE_CONTEXT_TOKEN]\n }\n ]\n };\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { FirestoreContext } from '@dereekb/firebase';\nimport { DBX_FIRESTORE_CONTEXT_TOKEN } from './firebase.firestore';\n\n/**\n * Service that provides access to the app's FirestoreContext.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxFirestoreContextService {\n constructor(@Inject(DBX_FIRESTORE_CONTEXT_TOKEN) readonly firestoreContext: FirestoreContext) {}\n}\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { Functions } from '@angular/fire/functions';\nimport { FirebaseFunctionsConfigMap, FirebaseFunctionsMap, LazyFirebaseFunctions } from '@dereekb/firebase';\nimport { ClassLikeType, forEachKeyValue } from '@dereekb/util';\n\nexport interface DbxFirebaseFunctionsModuleConfig<T, M extends FirebaseFunctionsMap = FirebaseFunctionsMap> {\n functionsGetterToken: ClassLikeType<T>;\n functionsGetterFactory: (functions: Functions) => T;\n /**\n * Optional functions config map to provide.\n *\n * If provided, will inject all the types with factory functions so they can be injected into the app.\n */\n functionsConfigMap?: FirebaseFunctionsConfigMap<M>;\n}\n\n/**\n * Used to initialize the LazyFirebaseFunctions type for a DbxFirebase app.\n */\n@NgModule()\nexport class DbxFirebaseFunctionsModule {\n static forRoot<T, M extends FirebaseFunctionsMap = FirebaseFunctionsMap>(config: DbxFirebaseFunctionsModuleConfig<T, M>): ModuleWithProviders<DbxFirebaseFunctionsModule> {\n const providers: Provider[] = [\n {\n provide: config.functionsGetterToken,\n useFactory: config.functionsGetterFactory,\n deps: [Functions]\n }\n ];\n\n if (config.functionsConfigMap) {\n forEachKeyValue(config.functionsConfigMap, {\n forEach: ([key, entry]) => {\n const provide = entry[0];\n\n providers.push({\n provide,\n useFactory: (lazyFunctions: LazyFirebaseFunctions<M>) => {\n const getter = lazyFunctions[key as string];\n\n if (!getter) {\n throw new Error(`Could not create provider for firebase function getter \"${provide}\" as the getter was unavailable.`);\n } else {\n return getter();\n }\n },\n deps: [config.functionsGetterToken]\n });\n }\n });\n }\n\n return {\n ngModule: DbxFirebaseFunctionsModule,\n providers\n };\n }\n}\n","import { PageListLoadingState, cleanupDestroyable, filterMaybe, useFirst, SubscriptionObject, accumulatorFlattenPageListLoadingState } from '@dereekb/rxjs';\nimport { BehaviorSubject, combineLatest, map, shareReplay, distinctUntilChanged, Subject, throttleTime, switchMap, Observable, tap, startWith, NEVER } from 'rxjs';\nimport { FirebaseQueryItemAccumulator, firebaseQueryItemAccumulator, FirestoreCollectionLike, FirestoreDocument, FirestoreItemPageIterationInstance, FirestoreItemPageIteratorFilter, FirestoreQueryConstraint, IterationQueryDocChangeWatcher, iterationQueryDocChangeWatcher } from '@dereekb/firebase';\nimport { ArrayOrValue, Destroyable, Initialized, Maybe } from '@dereekb/util';\nimport { DbxFirebaseCollectionLoader } from './collection.loader';\n\nexport interface DbxFirebaseCollectionLoaderInstanceInitConfig<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {\n collection?: Maybe<FirestoreCollectionLike<T, D>>;\n maxPages?: Maybe<number>;\n itemsPerPage?: Maybe<number>;\n constraints?: Maybe<ArrayOrValue<FirestoreQueryConstraint>>;\n}\n\nexport interface DbxFirebaseCollectionLoaderInstanceData<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {\n readonly firestoreIteration$: Observable<FirestoreItemPageIterationInstance<T>>;\n readonly accumulator$: Observable<FirebaseQueryItemAccumulator<T>>;\n readonly pageLoadingState$: Observable<PageListLoadingState<T>>;\n}\n\n/**\n * DbxFirebaseModelLoader implementation within an instance.\n */\nexport class DbxFirebaseCollectionLoaderInstance<T = unknown, D extends FirestoreDocument<T> = FirestoreDocument<T>> implements DbxFirebaseCollectionLoader<T>, DbxFirebaseCollectionLoaderInstanceData<T, D>, Initialized, Destroyable {\n protected readonly _collection = new BehaviorSubject<Maybe<FirestoreCollectionLike<T, D>>>(this._initConfig?.collection);\n\n protected readonly _maxPages = new BehaviorSubject<Maybe<number>>(this._initConfig?.maxPages);\n protected readonly _itemsPerPage = new BehaviorSubject<Maybe<number>>(this._initConfig?.itemsPerPage);\n protected readonly _constraints = new BehaviorSubject<Maybe<ArrayOrValue<FirestoreQueryConstraint>>>(this._initConfig?.constraints);\n protected readonly _restart = new Subject<void>();\n\n private readonly _maxPagesSub = new SubscriptionObject();\n\n readonly collection$ = this._collection.pipe(distinctUntilChanged());\n readonly constraints$ = this._constraints.pipe(distinctUntilChanged());\n\n readonly iteratorFilter$: Observable<FirestoreItemPageIteratorFilter> = combineLatest([this._itemsPerPage.pipe(distinctUntilChanged()), this.constraints$]).pipe(\n map(([limit, constraints]) => ({ limit, constraints, maxPageLoadLimit: this.maxPages } as FirestoreItemPageIteratorFilter)),\n shareReplay(1)\n );\n\n readonly firestoreIteration$: Observable<FirestoreItemPageIterationInstance<T>> = this.collection$.pipe(\n switchMap((collection) => {\n if (collection) {\n return combineLatest([this.iteratorFilter$, this._restart.pipe(startWith(undefined))]).pipe(\n throttleTime(100, undefined, { trailing: true }), // prevent rapid changes and executing filters too quickly.\n map(([iteratorFilter]) => collection.firestoreIteration(iteratorFilter)),\n cleanupDestroyable(), // cleanup the iteration\n shareReplay(1)\n );\n } else {\n return NEVER; // don't emit anything until collection is provided.\n }\n }),\n cleanupDestroyable(), // cleanup the iteration\n shareReplay(1)\n );\n\n readonly queryChangeWatcher$: Observable<IterationQueryDocChangeWatcher<T>> = this.firestoreIteration$.pipe(\n map((instance) => iterationQueryDocChangeWatcher({ instance })),\n shareReplay(1)\n );\n\n readonly accumulator$: Observable<FirebaseQueryItemAccumulator<T>> = this.firestoreIteration$.pipe(\n map((x) => firebaseQueryItemAccumulator<T>(x)),\n cleanupDestroyable(),\n shareReplay(1)\n );\n\n readonly pageLoadingState$: Observable<PageListLoadingState<T>> = this.accumulator$.pipe(\n switchMap((x) => accumulatorFlattenPageListLoadingState(x) as Observable<PageListLoadingState<T>>),\n shareReplay(1)\n );\n\n constructor(private readonly _initConfig?: DbxFirebaseCollectionLoaderInstanceInitConfig<T, D>) {}\n\n init(): void {\n // When max pages changes, update the iteration's max page limit.\n this._maxPagesSub.subscription = this._maxPages\n .pipe(\n distinctUntilChanged(),\n filterMaybe(), // do not pass null/undefined values\n switchMap((maxPageLoadLimit) =>\n this.firestoreIteration$.pipe(\n tap((iteration) => {\n iteration.maxPageLoadLimit = maxPageLoadLimit;\n })\n )\n )\n )\n .subscribe();\n }\n\n destroy(): void {\n this._maxPages.complete();\n this._collection.complete();\n this._constraints.complete();\n this._itemsPerPage.complete();\n this._restart.complete();\n this._maxPagesSub.destroy();\n }\n\n // MARK: Inputs\n get maxPages(): Maybe<number> {\n return this._maxPages.value;\n }\n\n set maxPages(maxPages: Maybe<number>) {\n if (this.maxPages != maxPages) {\n this._maxPages.next(maxPages);\n }\n }\n\n get itemsPerPage(): Maybe<number> {\n return this._itemsPerPage.value;\n }\n\n set itemsPerPage(itemsPerPage: Maybe<number>) {\n if (this.itemsPerPage != itemsPerPage) {\n this._itemsPerPage.next(itemsPerPage);\n }\n }\n\n get constraints(): Maybe<ArrayOrValue<FirestoreQueryConstraint>> {\n return this._constraints.value;\n }\n\n set constraints(constraints: Maybe<ArrayOrValue<FirestoreQueryConstraint>>) {\n this._constraints.next(constraints);\n }\n\n get collection(): Maybe<FirestoreCollectionLike<T, D>> {\n return this._collection.value;\n }\n\n set collection(collection: Maybe<FirestoreCollectionLike<T, D>>) {\n this._collection.next(collection);\n }\n\n // MARK: DbxFirebaseModelList\n next() {\n useFirst(this.firestoreIteration$, (x) => x.next());\n }\n\n restart() {\n this._restart.next();\n }\n\n setConstraints(constraints: Maybe<ArrayOrValue<FirestoreQueryConstraint>>) {\n this.constraints = constraints;\n }\n\n setCollection(firestoreCollection: Maybe<FirestoreCollectionLike<T, D>>) {\n this.collection = firestoreCollection;\n }\n}\n\nexport function dbxFirebaseCollectionLoaderInstance<T, D extends FirestoreDocument<T> = FirestoreDocument<T>>(config: DbxFirebaseCollectionLoaderInstanceInitConfig<T, D>): DbxFirebaseCollectionLoaderInstance<T, D> {\n return new DbxFirebaseCollectionLoaderInstance<T, D>(config);\n}\n\nexport function dbxFirebaseCollectionLoaderInstanceWithCollection<T, D extends FirestoreDocument<T> = FirestoreDocument<T>>(collection: Maybe<FirestoreCollectionLike<T, D>>): DbxFirebaseCollectionLoaderInstance<T, D> {\n return new DbxFirebaseCollectionLoaderInstance<T, D>({ collection });\n}\n","import { Directive, forwardRef, Input, Provider, Type } from '@angular/core';\nimport { FirestoreDocument, FirestoreQueryConstraint } from '@dereekb/firebase';\nimport { Maybe, ArrayOrValue } from '@dereekb/util';\nimport { DbxFirebaseCollectionStore } from './store.collection';\n\n/**\n * Abstract directive that contains a DbxFirebaseCollectionStore and provides an interface for communicating with other directives.\n */\n@Directive()\nexport abstract class DbxFirebaseCollectionStoreDirective<T = unknown, D extends FirestoreDocument<T> = FirestoreDocument<T>, S extends DbxFirebaseCollectionStore<T, D> = DbxFirebaseCollectionStore<T, D>> {\n constructor(readonly store: S) {}\n\n readonly pageLoadingState$ = this.store.pageLoadingState$;\n\n // MARK: Inputs\n @Input()\n set maxPages(maxPages: Maybe<number>) {\n this.store.setMaxPages(maxPages);\n }\n\n @Input()\n set itemsPerPage(itemsPerPage: Maybe<number>) {\n this.store.setItemsPerPage(itemsPerPage);\n }\n\n @Input()\n set constraints(constraints: Maybe<ArrayOrValue<FirestoreQueryConstraint>>) {\n this.store.setConstraints(constraints);\n }\n\n next() {\n this.store.next();\n }\n\n restart() {\n this.store.restart();\n }\n\n setConstraints(constraints: Maybe<ArrayOrValue<FirestoreQueryConstraint>>) {\n this.store.setConstraints(constraints);\n }\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// The use of any here does not degrade the type-safety; we want to simply match that the Store type S is used in the Directive type C to provide it.\n\n/**\n * Configures providers for a DbxFirebaseCollectionStoreDirective.\n *\n * Can optionally also provide the actual store type to include in the providers array so it is instantiated by Angular.\n *\n * @param sourceType\n */\nexport function provideDbxFirebaseCollectionStoreDirective<S extends DbxFirebaseCollectionStoreDirective<any, any, any>>(sourceType: Type<S>): Provider[];\nexport function provideDbxFirebaseCollectionStoreDirective<S extends DbxFirebaseCollectionStore<any, any>, C extends DbxFirebaseCollectionStoreDirective<any, any, S> = DbxFirebaseCollectionStoreDirective<any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[];\nexport function provideDbxFirebaseCollectionStoreDirective<S extends DbxFirebaseCollectionStore<any, any>, C extends DbxFirebaseCollectionStoreDirective<any, any, S> = DbxFirebaseCollectionStoreDirective<any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[] {\n const providers: Provider[] = [\n {\n provide: DbxFirebaseCollectionStoreDirective,\n useExisting: forwardRef(() => sourceType)\n }\n ];\n\n if (storeType) {\n providers.push(storeType);\n }\n\n return providers;\n}\n","import { shareReplay, startWith, Observable, switchMap, BehaviorSubject, distinctUntilChanged, combineLatest, map, filter, take } from 'rxjs';\nimport { Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FirestoreDocument, IterationQueryDocChangeWatcherChangeType, IterationQueryDocChangeWatcherEvent } from '@dereekb/firebase';\nimport { Maybe } from '@dereekb/util';\nimport { DbxFirebaseCollectionStore } from './store.collection';\nimport { DbxFirebaseCollectionStoreDirective } from './store.collection.directive';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\n\n/**\n * Refresh mode\n */\nexport type DbxFirebaseCollectionChangeDirectiveMode = 'auto' | 'manual';\nexport type DbxFirebaseCollectionChangeDirectiveEvent = Pick<IterationQueryDocChangeWatcherEvent<unknown>, 'time' | 'type'>;\n\n/**\n * Used to watch query doc changes and respond to them accordingly.\n */\n@Directive({\n selector: '[dbxFirebaseCollectionChange]'\n})\nexport class DbxFirebaseCollectionChangeDirective<T = unknown, D extends FirestoreDocument<T> = FirestoreDocument<T>, S extends DbxFirebaseCollectionStore<T, D> = DbxFirebaseCollectionStore<T, D>> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n private _mode = new BehaviorSubject<DbxFirebaseCollectionChangeDirectiveMode>('manual');\n readonly mode$ = this._mode.pipe(distinctUntilChanged());\n\n readonly event$: Observable<DbxFirebaseCollectionChangeDirectiveEvent> = this.dbxFirebaseCollectionStoreDirective.store.queryChangeWatcher$.pipe(\n switchMap((x) =>\n x.event$.pipe(\n filter((x) => x.type !== 'none'), // do not share 'none' events.\n take(1), // only need one event to mark as change is available.\n startWith({\n time: new Date(),\n type: 'none' as IterationQueryDocChangeWatcherChangeType\n })\n )\n ),\n shareReplay(1)\n );\n\n readonly hasChangeAvailable$: Observable<boolean> = this.event$.pipe(\n map((x) => x.type !== 'none'),\n shareReplay(1)\n );\n\n constructor(readonly dbxFirebaseCollectionStoreDirective: DbxFirebaseCollectionStoreDirective<T, D, S>) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = combineLatest([this.mode$, this.hasChangeAvailable$])\n .pipe(filter(([mode, hasChange]) => mode === 'auto' && hasChange))\n .subscribe(() => {\n this.restart();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._mode.complete();\n }\n\n @Input('dbxFirebaseCollectionChange')\n get mode(): DbxFirebaseCollectionChangeDirectiveMode {\n return this._mode.value;\n }\n\n set mode(mode: Maybe<DbxFirebaseCollectionChangeDirectiveMode | ''>) {\n this._mode.next(mode || 'manual');\n }\n\n restart() {\n this.dbxFirebaseCollectionStoreDirective.store.restart();\n }\n}\n","import { OnDestroy, TemplateRef, ViewContainerRef, Directive, Input } from '@angular/core';\nimport { AbstractIfDirective } from '@dereekb/dbx-core';\nimport { shareReplay, BehaviorSubject, combineLatest, Observable, map } from 'rxjs';\nimport { DbxFirebaseCollectionChangeDirective } from './store.collection.change.directive';\nimport { IterationQueryDocChangeWatcherChangeType } from '@dereekb/firebase';\nimport { Maybe } from '@dereekb/util';\n\nexport type DbxFirebaseCollectionHasChangeDirectiveMode = 'all' | IterationQueryDocChangeWatcherChangeType;\n\n/**\n * Structural directive that displays the content when the target change is detected.\n *\n * Can specify which changes to appear on.\n */\n@Directive({\n selector: '[dbxFirebaseCollectionHasChange]'\n})\nexport class DbxFirebaseCollectionHasChangeDirective extends AbstractIfDirective implements OnDestroy {\n private _mode = new BehaviorSubject<DbxFirebaseCollectionHasChangeDirectiveMode>('addedAndRemoved');\n\n readonly show$: Observable<boolean> = combineLatest([this._mode, this.directive.event$]).pipe(\n map(([mode, event]) => {\n let show = false;\n\n if (event.type !== 'none') {\n switch (mode) {\n case 'all':\n show = true;\n break;\n case 'addedAndRemoved':\n show = event.type === 'addedAndRemoved' || event.type === 'added' || event.type === 'removed';\n break;\n default:\n show = event.type === mode;\n break;\n }\n }\n\n return show;\n }),\n shareReplay(1)\n );\n\n constructor(templateRef: TemplateRef<unknown>, viewContainer: ViewContainerRef, public readonly directive: DbxFirebaseCollectionChangeDirective<unknown>) {\n super(templateRef, viewContainer);\n }\n\n @Input('dbxFirebaseCollectionHasChange')\n get mode(): DbxFirebaseCollectionHasChangeDirectiveMode {\n return this._mode.value;\n }\n\n set mode(mode: Maybe<DbxFirebaseCollectionHasChangeDirectiveMode | ''>) {\n this._mode.next(mode || 'addedAndRemoved');\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._mode.complete();\n }\n}\n","import { DbxListViewWrapper } from '@dereekb/dbx-web';\nimport { Directive, Host } from '@angular/core';\nimport { DbxFirebaseCollectionStoreDirective } from './store.collection.directive';\n\n/**\n * Directive that connects a host DbxListView to a DbxFirebaseCollectionStoreDirective to pass data for rendering items from a collection and query parameters.\n */\n@Directive({\n selector: '[dbxFirebaseCollectionList]'\n})\nexport class DbxFirebaseCollectionListDirective<T> {\n constructor(readonly dbxFirebaseCollectionStoreDirective: DbxFirebaseCollectionStoreDirective<T>, @Host() readonly dbxListViewWrapper: DbxListViewWrapper<T>) {\n this.dbxListViewWrapper.state$ = this.dbxFirebaseCollectionStoreDirective.pageLoadingState$;\n }\n}\n","import { Directive, forwardRef, Input, Provider, Type } from '@angular/core';\nimport { DocumentReference, FirestoreDocument } from '@dereekb/firebase';\nimport { ModelKey } from '@dereekb/util';\nimport { DbxFirebaseDocumentStore } from './store.document';\n\n/**\n * Abstract directive that contains a DbxFirebaseDocumentStore and provides an interface for communicating with other directives.\n */\n@Directive()\nexport abstract class DbxFirebaseDocumentStoreDirective<T = unknown, D extends FirestoreDocument<T> = FirestoreDocument<T>, S extends DbxFirebaseDocumentStore<T, D> = DbxFirebaseDocumentStore<T, D>> {\n constructor(readonly store: S) {}\n\n readonly exists$ = this.store.exists$;\n\n readonly document$ = this.store.document$;\n readonly documentLoadingState$ = this.store.documentLoadingState$;\n\n readonly id$ = this.store.id$;\n readonly ref$ = this.store.ref$;\n\n readonly snapshot$ = this.store.snapshot$;\n readonly snapshotLoadingState$ = this.store.snapshotLoadingState$;\n\n readonly data$ = this.store.data$;\n readonly loadingState$ = this.store.dataLoadingState$;\n\n // MARK: Inputs\n @Input()\n set id(id: ModelKey) {\n this.store.setId(id);\n }\n\n @Input()\n set ref(ref: DocumentReference<T>) {\n this.store.setRef(ref);\n }\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// The use of any here does not degrade the type-safety; we want to simply match that the Store type S is used in the Directive type C to provide it.\n\n/**\n * Configures providers for a DbxFirebaseDocumentStoreDirective.\n *\n * Can optionally also provide the actual store type to include in the providers array so it is instantiated by Angular.\n *\n * @param sourceType\n */\nexport function provideDbxFirebaseDocumentStoreDirective<S extends DbxFirebaseDocumentStoreDirective<any, any, any>>(sourceType: Type<S>): Provider[];\nexport function provideDbxFirebaseDocumentStoreDirective<S extends DbxFirebaseDocumentStore<any, any>, C extends DbxFirebaseDocumentStoreDirective<any, any, S> = DbxFirebaseDocumentStoreDirective<any, any, S>>(sourceType: Type<C>, storeType: Type<S>): Provider[];\nexport function provideDbxFirebaseDocumentStoreDirective<S extends DbxFirebaseDocumentStore<any, any>, C extends DbxFirebaseDocumentStoreDirective<any, any, S> = DbxFirebaseDocumentStoreDirective<any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[] {\n const providers: Provider[] = [\n {\n provide: DbxFirebaseDocumentStoreDirective,\n useExisting: forwardRef(() => sourceType)\n }\n ];\n\n if (storeType) {\n providers.push(storeType);\n }\n\n return providers;\n}\n","import { Directive, Host, OnInit } from '@angular/core';\nimport { FirestoreDocument } from '@dereekb/firebase';\nimport { AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxFirebaseAuthService } from '../../auth/service/firebase.auth.service';\nimport { DbxFirebaseDocumentStoreDirective } from './store.document.directive';\n\n/**\n * Utility directive for a host DbxFirebaseDocumentStoreDirective that sets the document's ID to match the ID of the current user.\n *\n * This is useful for cases where each document is keyed by the user (I.E. implements UserRelatedById).\n */\n@Directive({\n selector: '[dbxFirebaseDocumentAuthId]'\n})\nexport class DbxFirebaseDocumentAuthIdDirective<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> extends AbstractSubscriptionDirective implements OnInit {\n constructor(readonly dbxFirebaseAuthService: DbxFirebaseAuthService, @Host() readonly dbxFirebaseDocumentStoreDirective: DbxFirebaseDocumentStoreDirective<T, D>) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.dbxFirebaseDocumentStoreDirective.store.setId(this.dbxFirebaseAuthService.userIdentifier$);\n }\n}\n","import { Observable, BehaviorSubject, map, shareReplay, of, switchMap } from 'rxjs';\nimport { OnDestroy, Directive, Host, Input, OnInit } from '@angular/core';\nimport { DbxRouterService, AbstractSubscriptionDirective, DbxRouteParamReaderInstance, DbxRouteParamDefaultRedirectInstance } from '@dereekb/dbx-core';\nimport { DbxFirebaseDocumentStoreDirective } from './store.document.directive';\nimport { Maybe, ModelKey } from '@dereekb/util';\nimport { MaybeObservableOrValueGetter, SwitchMapToDefaultFilterFunction } from '@dereekb/rxjs';\n\nexport const DBX_FIREBASE_ROUTER_SYNC_DEFAULT_ID_PARAM_KEY = 'id';\nexport const DBX_FIREBASE_ROUTER_SYNC_USE_DEFAULT_PARAM_VALUE = '0';\n\n/**\n * Used for synchronizing the document store id to the param of the route.\n */\n@Directive({\n selector: '[dbxFirebaseDocumentStoreRouteId]'\n})\nexport class DbxFirebaseDocumentStoreRouteIdDirective<T = unknown> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n private _paramReader = new DbxRouteParamReaderInstance<ModelKey>(this.dbxRouterService, DBX_FIREBASE_ROUTER_SYNC_DEFAULT_ID_PARAM_KEY);\n private _paramRedirect = new DbxRouteParamDefaultRedirectInstance<ModelKey>(this._paramReader);\n private _useDefaultParam = new BehaviorSubject<string | SwitchMapToDefaultFilterFunction<ModelKey>>(DBX_FIREBASE_ROUTER_SYNC_USE_DEFAULT_PARAM_VALUE);\n private _useDefaultParam$: Observable<SwitchMapToDefaultFilterFunction<ModelKey>> = this._useDefaultParam.pipe(\n map((x) => {\n let result: SwitchMapToDefaultFilterFunction<ModelKey>;\n\n if (typeof x === 'string') {\n result = (value: Maybe<ModelKey>) => of(value === x);\n } else {\n result = x;\n }\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly idParamKey$ = this._paramReader.paramKey$;\n readonly idFromParams$: Observable<Maybe<ModelKey>> = this._paramReader.paramValue$;\n readonly id$: Observable<Maybe<ModelKey>> = this._paramReader.value$;\n\n constructor(@Host() readonly dbxFirebaseDocumentStoreDirective: DbxFirebaseDocumentStoreDirective<T>, readonly dbxRouterService: DbxRouterService) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.dbxFirebaseDocumentStoreDirective.store.setId(this.idFromParams$);\n this._paramRedirect.setUseDefaultFilter((value: Maybe<string>) => {\n return this._useDefaultParam$.pipe(switchMap((x) => x(value)));\n });\n this._paramRedirect.init();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this._paramReader.destroy();\n this._paramRedirect.destroy();\n this._useDefaultParam.complete();\n }\n\n // MARK: Input\n @Input('dbxFirebaseDocumentStoreRouteId')\n get idParam() {\n return this._paramReader.paramKey;\n }\n\n set idParam(idParam: string) {\n this._paramReader.paramKey = idParam;\n }\n\n @Input()\n set dbxFirebaseDocumentStoreRouteIdDefault(defaultValue: MaybeObservableOrValueGetter<ModelKey>) {\n this._paramReader.setDefaultValue(defaultValue);\n }\n\n /**\n * Whether or not to enable the redirection. Is enabled by default.\n */\n @Input()\n set dbxFirebaseDocumentStoreRouteIdDefaultRedirect(redirect: Maybe<boolean> | '') {\n this._paramRedirect.enabled = redirect !== false; // true by default\n }\n\n @Input()\n set dbxFirebaseDocumentStoreRouteIdDefaultDecision(decider: string | SwitchMapToDefaultFilterFunction<ModelKey>) {\n this._useDefaultParam.next(decider);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFirebaseCollectionChangeDirective } from './store.collection.change.directive';\nimport { DbxFirebaseCollectionHasChangeDirective } from './store.collection.change.if.directive';\nimport { DbxFirebaseCollectionListDirective } from './store.collection.list.directive';\nimport { DbxFirebaseDocumentAuthIdDirective } from './store.document.auth.directive';\nimport { DbxFirebaseDocumentStoreRouteIdDirective } from './store.document.router.directive';\n\n@NgModule({\n imports: [],\n declarations: [DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseDocumentStoreRouteIdDirective, DbxFirebaseDocumentAuthIdDirective],\n exports: [DbxFirebaseCollectionListDirective, DbxFirebaseCollectionChangeDirective, DbxFirebaseCollectionHasChangeDirective, DbxFirebaseDocumentStoreRouteIdDirective, DbxFirebaseDocumentAuthIdDirective]\n})\nexport class DbxFirebaseModelStoreModule {}\n","import { Injectable } from '@angular/core';\nimport { Observable, shareReplay, distinctUntilChanged, Subscription, exhaustMap, first, map, switchMap, tap } from 'rxjs';\nimport { FirebaseQueryItemAccumulator, FirestoreCollectionLike, FirestoreDocument, FirestoreItemPageIterationInstance, FirestoreQueryConstraint, IterationQueryDocChangeWatcher } from '@dereekb/firebase';\nimport { ObservableOrValue, cleanupDestroyable, PageListLoadingState, filterMaybe } from '@dereekb/rxjs';\nimport { ArrayOrValue, Maybe } from '@dereekb/util';\nimport { LockSetComponentStore } from '@dereekb/dbx-core';\nimport { DbxFirebaseCollectionLoaderInstance, dbxFirebaseCollectionLoaderInstance, DbxFirebaseCollectionLoaderInstanceData } from '../loader/collection.loader.instance';\n\nexport interface DbxFirebaseCollectionStore<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> extends DbxFirebaseCollectionLoaderInstanceData<T, D> {\n readonly firestoreCollection$: Observable<Maybe<FirestoreCollectionLike<T, D>>>;\n readonly loader$: Observable<DbxFirebaseCollectionLoaderInstance<T, D>>;\n\n readonly firestoreIteration$: Observable<FirestoreItemPageIterationInstance<T>>;\n readonly queryChangeWatcher$: Observable<IterationQueryDocChangeWatcher<T>>;\n readonly accumulator$: Observable<FirebaseQueryItemAccumulator<T>>;\n readonly pageLoadingState$: Observable<PageListLoadingState<T>>;\n\n setMaxPages(observableOrValue: ObservableOrValue<Maybe<number>>): Subscription;\n setItemsPerPage(observableOrValue: ObservableOrValue<Maybe<number>>): Subscription;\n setConstraints(observableOrValue: ObservableOrValue<Maybe<ArrayOrValue<FirestoreQueryConstraint>>>): Subscription;\n next(observableOrValue: ObservableOrValue<void>): void;\n restart(observableOrValue: ObservableOrValue<void>): void;\n\n readonly setFirestoreCollection: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<FirestoreCollectionLike<T, D>>>) => Subscription);\n}\n\nexport interface DbxFirebaseCollectionStoreContextState<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {\n readonly firestoreCollection?: Maybe<FirestoreCollectionLike<T, D>>;\n readonly maxPages?: Maybe<number>;\n readonly itemsPerPage?: Maybe<number>;\n readonly constraints?: Maybe<ArrayOrValue<FirestoreQueryConstraint>>;\n}\n\n/**\n * Used for storing the state of a Person and related email threads.\n */\n@Injectable()\nexport class AbstractDbxFirebaseCollectionStore<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, C extends DbxFirebaseCollectionStoreContextState<T, D> = DbxFirebaseCollectionStoreContextState<T, D>> extends LockSetComponentStore<C> implements DbxFirebaseCollectionStore<T, D> {\n // MARK: Effects\n readonly setMaxPages = this.effect((input: Observable<Maybe<number>>) => {\n return input.pipe(switchMap((maxPages) => this.loader$.pipe(tap((x) => (x.maxPages = maxPages)))));\n });\n\n readonly setItemsPerPage = this.effect((input: Observable<Maybe<number>>) => {\n return input.pipe(switchMap((itemsPerPage) => this.loader$.pipe(tap((x) => (x.itemsPerPage = itemsPerPage)))));\n });\n\n readonly setConstraints = this.effect((input: Observable<Maybe<ArrayOrValue<FirestoreQueryConstraint>>>) => {\n return input.pipe(switchMap((constraints) => this.loader$.pipe(tap((x) => x.setConstraints(constraints)))));\n });\n\n readonly next = this.effect((input: Observable<void>) => {\n return input.pipe(\n exhaustMap(() =>\n this.loader$.pipe(\n first(),\n tap((x) => x.next())\n )\n )\n );\n });\n\n readonly restart = this.effect((input: Observable<void>) => {\n return input.pipe(\n exhaustMap(() =>\n this.loader$.pipe(\n first(),\n tap((x) => x.restart())\n )\n )\n );\n });\n\n // MARK: Accessors\n readonly currentFirestoreCollection$: Observable<Maybe<FirestoreCollectionLike<T, D>>> = this.state$.pipe(\n map((x) => x.firestoreCollection),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly firestoreCollection$: Observable<FirestoreCollectionLike<T, D>> = this.currentFirestoreCollection$.pipe(filterMaybe());\n\n readonly loader$: Observable<DbxFirebaseCollectionLoaderInstance<T, D>> = this.currentFirestoreCollection$.pipe(\n switchMap((collection) =>\n this.state$.pipe(\n first(),\n map((x) =>\n dbxFirebaseCollectionLoaderInstance({\n collection,\n maxPages: x.maxPages,\n itemsPerPage: x.itemsPerPage,\n constraints: x.constraints\n })\n )\n )\n ),\n cleanupDestroyable(),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly firestoreIteration$: Observable<FirestoreItemPageIterationInstance<T>> = this.loader$.pipe(switchMap((x) => x.firestoreIteration$));\n readonly queryChangeWatcher$: Observable<IterationQueryDocChangeWatcher<T>> = this.loader$.pipe(switchMap((x) => x.queryChangeWatcher$));\n readonly accumulator$: Observable<FirebaseQueryItemAccumulator<T>> = this.loader$.pipe(switchMap((x) => x.accumulator$));\n readonly pageLoadingState$: Observable<PageListLoadingState<T>> = this.loader$.pipe(switchMap((x) => x.pageLoadingState$));\n\n readonly setFirestoreCollection = this.updater((state, firestoreCollection: FirestoreCollectionLike<T, D> | null | undefined) => ({ ...state, firestoreCollection }));\n}\n","import { readableError } from '@dereekb/util';\n\nexport const DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR = 'DOES_NOT_EXIST';\n\nexport function modelDoesNotExistError() {\n return readableError(DBX_FIREBASE_MODEL_DOES_NOT_EXIST_ERROR, 'The document does not exist.');\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, shareReplay, distinctUntilChanged, map, switchMap, combineLatest, Subscription, of } from 'rxjs';\nimport { DocumentSnapshot, DocumentReference, FirestoreCollection, FirestoreDocument, documentDataWithId, DocumentDataWithId, FirestoreModelId, FirestoreModelKey, FirestoreCollectionLike, FirestoreModelIdentity } from '@dereekb/firebase';\nimport { filterMaybe, LoadingState, beginLoading, successResult, loadingStateFromObs, errorResult, ObservableOrValue } from '@dereekb/rxjs';\nimport { Maybe, isMaybeSo } from '@dereekb/util';\nimport { LockSetComponent, LockSetComponentStore } from '@dereekb/dbx-core';\nimport { modelDoesNotExistError } from '../error';\n\nexport interface DbxFirebaseDocumentStore<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> extends LockSetComponent {\n readonly firestoreCollectionLike$: Observable<FirestoreCollectionLike<T, D>>;\n readonly firestoreCollection$: Observable<FirestoreCollection<T, D>>;\n\n readonly currentInputId$: Observable<Maybe<FirestoreModelId>>;\n readonly inputId$: Observable<FirestoreModelId>;\n readonly currentInputKey$: Observable<Maybe<FirestoreModelKey>>;\n readonly inputKey$: Observable<FirestoreModelKey>;\n readonly currentInputRef$: Observable<Maybe<DocumentReference<T>>>;\n readonly inputRef$: Observable<DocumentReference<T>>;\n\n readonly currentDocument$: Observable<Maybe<D>>;\n readonly document$: Observable<D>;\n readonly id$: Observable<FirestoreModelId>;\n readonly key$: Observable<FirestoreModelKey>;\n readonly ref$: Observable<DocumentReference<T>>;\n readonly documentLoadingState$: Observable<LoadingState<D>>;\n readonly snapshot$: Observable<DocumentSnapshot<T>>;\n readonly snapshotLoadingState$: Observable<LoadingState<DocumentSnapshot<T>>>;\n readonly currentData$: Observable<Maybe<DocumentDataWithId<T>>>;\n readonly data$: Observable<DocumentDataWithId<T>>;\n readonly dataLoadingState$: Observable<LoadingState<DocumentDataWithId<T>>>;\n readonly exists$: Observable<boolean>;\n readonly modelIdentity$: Observable<FirestoreModelIdentity>;\n\n setId: (observableOrValue: ObservableOrValue<Maybe<FirestoreModelId>>) => Subscription;\n setKey: (observableOrValue: ObservableOrValue<Maybe<FirestoreModelKey>>) => Subscription;\n setRef: (observableOrValue: ObservableOrValue<Maybe<DocumentReference<T>>>) => Subscription;\n\n /**\n * Clears the key/id/ref and current document from the store.\n */\n clearRefs: () => void;\n\n /**\n * Sets the FirestoreCollection to retrieve documents from.\n */\n readonly setFirestoreCollection: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<FirestoreCollection<T, D>>>) => Subscription);\n\n /**\n * Sets the FirestoreCollectionLike to retrieve documents from.\n */\n readonly setFirestoreCollectionLike: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<FirestoreCollectionLike<T, D>>>) => Subscription);\n}\n\nexport interface DbxFirebaseDocumentStoreContextState<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {\n readonly firestoreCollectionLike?: Maybe<FirestoreCollectionLike<T, D>>;\n readonly firestoreCollection?: Maybe<FirestoreCollection<T, D>>;\n readonly id?: Maybe<FirestoreModelId>;\n readonly key?: Maybe<FirestoreModelKey>;\n readonly ref?: Maybe<DocumentReference<T>>;\n}\n\n/**\n * Used for storing the state of a Person and related email threads.\n */\n@Injectable()\nexport class AbstractDbxFirebaseDocumentStore<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, C extends DbxFirebaseDocumentStoreContextState<T, D> = DbxFirebaseDocumentStoreContextState<T, D>> extends LockSetComponentStore<C> implements DbxFirebaseDocumentStore<T, D> {\n // MARK: Effects\n\n // MARK: Accessors\n readonly currentFirestoreCollectionLike$: Observable<Maybe<FirestoreCollectionLike<T, D>>> = this.state$.pipe(\n map((x) => x.firestoreCollection ?? x.firestoreCollectionLike),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly currentFirestoreCollection$: Observable<Maybe<FirestoreCollection<T, D>>> = this.state$.pipe(\n map((x) => x.firestoreCollection),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly firestoreCollectionLike$: Observable<FirestoreCollectionLike<T, D>> = this.currentFirestoreCollectionLike$.pipe(filterMaybe());\n readonly firestoreCollection$: Observable<FirestoreCollection<T, D>> = this.currentFirestoreCollection$.pipe(filterMaybe());\n\n readonly currentInputId$: Observable<Maybe<FirestoreModelId>> = this.state$.pipe(\n map((x) => x.id),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputId$: Observable<FirestoreModelId> = this.currentInputId$.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly currentInputKey$: Observable<Maybe<FirestoreModelKey>> = this.state$.pipe(\n map((x) => x.key),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputKey$: Observable<FirestoreModelKey> = this.currentInputKey$.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly currentInputRef$: Observable<Maybe<DocumentReference<T>>> = this.state$.pipe(\n map((x) => x.ref),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly inputRef$: Observable<DocumentReference<T>> = this.currentInputRef$.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly currentDocument$: Observable<Maybe<D>> = combineLatest([this.currentInputId$, this.currentInputKey$, this.currentInputRef$]).pipe(\n switchMap(([id, key, ref]) => {\n let document: Observable<Maybe<D>>;\n\n if (ref) {\n document = this.firestoreCollectionLike$.pipe(map((x) => x.documentAccessor().loadDocument(ref)));\n } else if (key) {\n document = this.firestoreCollectionLike$.pipe(map((x) => x.documentAccessor().loadDocumentForKey(key)));\n } else if (id) {\n document = this.firestoreCollection$.pipe(map((x) => x.documentAccessor().loadDocumentForId(id)));\n } else {\n document = of(undefined);\n }\n\n return document;\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly document$: Observable<D> = this.currentDocument$.pipe(filterMaybe(), distinctUntilChanged(), shareReplay(1));\n\n readonly documentLoadingState$: Observable<LoadingState<D>> = this.currentDocument$.pipe(\n map((x) => (x ? successResult(x) : beginLoading<D>())),\n shareReplay(1)\n );\n\n readonly id$: Observable<FirestoreModelId> = this.document$.pipe(\n map((x) => x.id),\n shareReplay()\n );\n\n readonly key$: Observable<FirestoreModelKey> = this.document$.pipe(\n map((x) => x.key),\n shareReplay()\n );\n\n readonly ref$: Observable<DocumentReference<T>> = this.document$.pipe(\n map((x) => x.documentRef),\n shareReplay()\n );\n\n readonly snapshot$: Observable<DocumentSnapshot<T>> = this.document$.pipe(\n switchMap((x) => x.accessor.stream()),\n shareReplay(1)\n );\n\n readonly snapshotLoadingState$: Observable<LoadingState<DocumentSnapshot<T>>> = this.currentDocument$.pipe(\n switchMap(() => loadingStateFromObs(this.snapshot$)),\n shareReplay(1)\n );\n\n readonly currentData$: Observable<Maybe<DocumentDataWithId<T>>> = this.document$.pipe(\n switchMap((x) => x.accessor.stream().pipe(map((y) => documentDataWithId(y)))),\n shareReplay(1)\n );\n\n readonly data$: Observable<DocumentDataWithId<T>> = this.currentDocument$.pipe(\n switchMap(() => this.currentData$.pipe(filterMaybe())),\n shareReplay(1)\n );\n\n readonly dataLoadingState$: Observable<LoadingState<DocumentDataWithId<T>>> = this.snapshotLoadingState$.pipe(\n map((x) => {\n let result: LoadingState<DocumentDataWithId<T>>;\n\n if (x.value) {\n const data = documentDataWithId(x.value);\n\n if (data) {\n result = successResult(data);\n } else {\n result = errorResult(modelDoesNotExistError());\n }\n } else {\n result = {\n ...x,\n value: undefined\n };\n }\n\n return result;\n }),\n shareReplay(1)\n );\n\n readonly exists$: Observable<boolean> = this.currentData$.pipe(\n map((x) => isMaybeSo(x)),\n shareReplay(1)\n );\n\n readonly doesNotExist$: Observable<boolean> = this.exists$.pipe(\n map((x) => !x),\n shareReplay(1)\n );\n\n readonly modelIdentity$: Observable<FirestoreModelIdentity> = this.document$.pipe(\n map((x) => x.modelIdentity),\n shareReplay(1)\n );\n\n // MARK: State Changes\n /**\n * Sets the id of the document to load.\n */\n readonly setId = this.updater((state, id: Maybe<FirestoreModelId>) => (id ? { ...state, id, ref: undefined } : { ...state, id })) as (observableOrValue: Maybe<string> | Observable<Maybe<string>>) => Subscription;\n\n /**\n * Sets the key of the document to load.\n */\n readonly setKey = this.updater((state, key: Maybe<FirestoreModelKey>) => (key ? { ...state, key, ref: undefined } : { ...state, key })) as (observableOrValue: Maybe<string> | Observable<Maybe<string>>) => Subscription;\n\n /**\n * Sets the ref of the document to load.\n */\n readonly setRef = this.updater((state, ref: Maybe<DocumentReference<T>>) => (ref ? { ...state, id: undefined, ref } : { ...state, ref })) as (observableOrValue: Maybe<DocumentReference<T>> | Observable<Maybe<DocumentReference<T>>>) => Subscription;\n\n readonly clearRefs = this.updater((state) => ({ ...state, id: undefined, key: undefined, ref: undefined }));\n\n readonly setFirestoreCollection = this.updater((state, firestoreCollection: Maybe<FirestoreCollection<T, D>>) => ({ ...state, firestoreCollection }));\n readonly setFirestoreCollectionLike = this.updater((state, firestoreCollectionLike: Maybe<FirestoreCollectionLike<T, D>>) => ({ ...state, firestoreCollectionLike }));\n}\n","import { FirestoreModelKeyRef, ModelFirebaseCreateFunction, ModelFirebaseDeleteFunction, ModelFirebaseUpdateFunction, OnCallCreateModelResult } from '@dereekb/firebase';\nimport { lazyFrom, LoadingState, loadingStateFromObs } from '@dereekb/rxjs';\nimport { firstValue } from '@dereekb/util';\nimport { first, Observable, switchMap } from 'rxjs';\nimport { Writable } from 'ts-essentials';\nimport { DbxFirebaseDocumentStore } from './store.document';\n\n// MARK: Create\nexport type DbxFirebaseDocumentStoreCreateFunction<I, O extends OnCallCreateModelResult = OnCallCreateModelResult> = (params: I) => Observable<LoadingState<O>>;\n\n/**\n * Creates a function for a store that DbxFirebaseDocumentStore captures the ModelFirebaseCreateFunction result and sets the key of the created value.\n *\n * @param store\n * @param fn\n * @returns\n */\nexport function firebaseDocumentStoreCreateFunction<I, O extends OnCallCreateModelResult = OnCallCreateModelResult>(store: DbxFirebaseDocumentStore<any, any>, fn: ModelFirebaseCreateFunction<I, O>): DbxFirebaseDocumentStoreCreateFunction<I, O> {\n return (params: I) =>\n loadingStateFromObs(\n lazyFrom(() =>\n fn(params).then((result) => {\n const modelKeys = result.modelKeys;\n const firstKey = firstValue(modelKeys);\n\n if (firstKey) {\n store.setKey(firstKey);\n }\n\n return result;\n })\n )\n );\n}\n\n// MARK: Update\nexport type DbxFirebaseDocumentStoreUpdateParams = Partial<Writable<FirestoreModelKeyRef>>;\n\nexport type DbxFirebaseDocumentStoreUpdateFunction<I extends DbxFirebaseDocumentStoreUpdateParams> = (params: I) => Observable<LoadingState<void>>;\n\nexport function firebaseDocumentStoreUpdateFunction<I extends DbxFirebaseDocumentStoreUpdateParams>(store: DbxFirebaseDocumentStore<any, any>, fn: ModelFirebaseUpdateFunction<I>): DbxFirebaseDocumentStoreUpdateFunction<I> {\n return (params: I) =>\n loadingStateFromObs(\n store.key$.pipe(\n first(),\n switchMap((key) =>\n fn({\n ...params,\n key // inject key into the parameters.\n })\n )\n )\n );\n}\n\n// MARK: Delete\nexport type DbxFirebaseDocumentStoreDeleteParams = Partial<Writable<FirestoreModelKeyRef>>;\n\nexport type DbxFirebaseDocumentStoreDeleteFunction<I extends DbxFirebaseDocumentStoreDeleteParams> = (params: I) => Observable<LoadingState<void>>;\n\n/**\n * Deletes a function for a store that DbxFirebaseDocumentStore captures the ModelFirebaseDeleteFunction result and sets the key of the created value.\n *\n * @param store\n * @param fn\n * @returns\n */\nexport function firebaseDocumentStoreDeleteFunction<I>(store: DbxFirebaseDocumentStore<any, any>, fn: ModelFirebaseDeleteFunction<I>): DbxFirebaseDocumentStoreDeleteFunction<I> {\n return (params: I) =>\n loadingStateFromObs(\n store.key$.pipe(\n first(),\n switchMap((key) =>\n fn({\n ...params,\n key // inject key into the parameters.\n }).then((result) => {\n store.clearRefs();\n return result;\n })\n )\n )\n );\n}\n","import { LockSetComponentStore } from '@dereekb/dbx-core';\nimport { FirestoreCollectionLike, FirestoreCollectionWithParentFactory, FirestoreDocument } from '@dereekb/firebase';\nimport { cleanup, ObservableOrValue } from '@dereekb/rxjs';\nimport { Maybe } from '@dereekb/util';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { map, Observable, Subscription } from 'rxjs';\nimport { DbxFirebaseDocumentStore } from './store.document';\n\nexport interface DbxFirebaseComponentStoreWithParentContextState<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> {\n readonly parent?: Maybe<PD>;\n readonly collectionFactory?: Maybe<FirestoreCollectionWithParentFactory<T, PT, D, PD>>;\n}\n\nexport type DbxFirebaseComponentStoreSetParentEffectFunction<PD> = (parent: Observable<Maybe<PD>>) => Subscription;\nexport type DbxFirebaseComponentStoreWithParentSetParentEffectFunction<PD> = (observableOrValue: ObservableOrValue<Maybe<PD>>) => Subscription;\nexport type DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction<PT, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> = (observableOrValue: ObservableOrValue<DbxFirebaseDocumentStore<PT, PD>>) => Subscription;\n\nexport interface DbxFirebaseComponentStoreWithParent<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, A extends FirestoreCollectionLike<T, D> = FirestoreCollectionLike<T, D>> extends LockSetComponentStore<object>, Pick<ComponentStore<DbxFirebaseComponentStoreWithParentContextState<T, PT, D, PD>>, 'effect'> {\n readonly currentParent$: Observable<Maybe<PD>>;\n readonly parent$: Observable<PD>;\n readonly currentCollectionFactory$: Observable<Maybe<FirestoreCollectionWithParentFactory<T, PT, D, PD>>>;\n readonly collectionFactory$: Observable<FirestoreCollectionWithParentFactory<T, PT, D, PD>>;\n readonly _setParent: DbxFirebaseComponentStoreSetParentEffectFunction<PD>;\n readonly _setParentDocument: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<PD>>) => Subscription);\n readonly setFirestoreCollection: (() => void) | ((observableOrValue: ObservableOrValue<Maybe<A>>) => Subscription);\n}\n\nexport function setParentStoreEffect<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, A extends FirestoreCollectionLike<T, D> = FirestoreCollectionLike<T, D>>(store: DbxFirebaseComponentStoreWithParent<T, PT, D, PD, A>): DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction<PT, PD> {\n return store.effect((input: Observable<Maybe<DbxFirebaseDocumentStore<PT, PD>>>) => {\n return input.pipe(\n map((parentStore) => {\n let result: Maybe<Subscription>;\n\n if (parentStore) {\n result = store._setParent(parentStore.currentDocument$) as Subscription;\n } else {\n result = undefined;\n }\n\n // set as the parent lock set too\n store.setParentLockSet(parentStore);\n\n return result;\n }),\n cleanup((sub) => {\n if (sub) {\n sub.unsubscribe();\n }\n })\n );\n });\n}\n","import { Maybe } from '@dereekb/util';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { filterMaybe, ObservableOrValue } from '@dereekb/rxjs';\nimport { Observable, shareReplay, distinctUntilChanged, map, Subscription, NEVER, switchMap, tap } from 'rxjs';\nimport { FirestoreCollectionGroup, FirestoreCollectionWithParentFactory, FirestoreDocument } from '@dereekb/firebase';\nimport { AbstractDbxFirebaseCollectionStore, DbxFirebaseCollectionStore, DbxFirebaseCollectionStoreContextState } from './store.collection';\nimport { DbxFirebaseComponentStoreSetParentEffectFunction, DbxFirebaseComponentStoreWithParent, DbxFirebaseComponentStoreWithParentContextState, DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction, setParentStoreEffect } from './store.subcollection.rxjs';\n\n/**\n * Whether or not to load values from a parent or a group.\n */\nexport type DbxFirebaseComponentStoreWithParentSourceMode = 'parent' | 'group';\n\nexport interface DbxFirebaseCollectionWithParentStoreContextState<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends DbxFirebaseCollectionStoreContextState<T, D>, DbxFirebaseComponentStoreWithParentContextState<T, PT, D, PD> {\n readonly mode?: Maybe<DbxFirebaseComponentStoreWithParentSourceMode>;\n readonly collectionGroup?: Maybe<FirestoreCollectionGroup<T, D>>;\n}\n\nexport type DbxFirebaseComponentStoreWithParentSetParentSourceModeFunction = (observableOrValue: ObservableOrValue<Maybe<DbxFirebaseComponentStoreWithParentSourceMode>>) => Subscription;\n\nexport interface DbxFirebaseCollectionWithParentStore<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends DbxFirebaseCollectionStore<T, D>, DbxFirebaseComponentStoreWithParent<T, PT, D, PD> {\n readonly setSourceMode: DbxFirebaseComponentStoreWithParentSetParentSourceModeFunction;\n readonly setCollectionGroup: (observableOrValue: FirestoreCollectionGroup<T, D> | Observable<FirestoreCollectionGroup<T, D>>) => Subscription;\n readonly currentCollectionGroup$: Observable<Maybe<FirestoreCollectionGroup<T, D>>>;\n readonly collectionGroup$: Observable<FirestoreCollectionGroup<T, D>>;\n}\n\n/**\n * Abstract DbxFirebaseCollectionStore that has a parent document from which is derives it's FiresbaseCollection from.\n */\n@Injectable()\nexport class AbstractDbxFirebaseCollectionWithParentStore<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, C extends DbxFirebaseCollectionWithParentStoreContextState<T, PT, D, PD> = DbxFirebaseCollectionWithParentStoreContextState<T, PT, D, PD>> extends AbstractDbxFirebaseCollectionStore<T, D, C> implements DbxFirebaseCollectionWithParentStore<T, PT, D, PD> {\n constructor(@Inject(null) @Optional() state: C, @Inject(null) @Optional() defaultSourceMode?: DbxFirebaseComponentStoreWithParentSourceMode) {\n super(state);\n this.setSourceMode(defaultSourceMode || 'parent');\n }\n\n // MARK: Effects\n readonly setParentStore: DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction<PT, PD> = setParentStoreEffect(this);\n readonly setSourceMode: DbxFirebaseComponentStoreWithParentSetParentSourceModeFunction = this.effect((input: Observable<Maybe<DbxFirebaseComponentStoreWithParentSourceMode>>) => {\n return input.pipe(\n distinctUntilChanged(),\n switchMap((inputMode) => {\n const mode = inputMode?.toLowerCase() ?? 'parent'; // default to parent mode\n\n if (mode === 'group') {\n return this.currentCollectionGroup$.pipe(\n tap((collectionGroup) => {\n this.setFirestoreCollection(collectionGroup);\n })\n );\n } else {\n // parent document collection\n return this.currentParent$.pipe(\n switchMap((parent) => {\n if (parent) {\n return this.collectionFactory$.pipe(\n tap((collectionFactory) => {\n const collection = collectionFactory(parent);\n this.setFirestoreCollection(collection);\n })\n );\n } else {\n this.setFirestoreCollection(undefined);\n return NEVER;\n }\n })\n );\n }\n })\n );\n });\n\n // MARK: Accessors\n readonly currentParent$: Observable<Maybe<PD>> = this.state$.pipe(\n map((x) => x.parent),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly parent$: Observable<PD> = this.currentParent$.pipe(filterMaybe());\n\n readonly currentCollectionFactory$: Observable<Maybe<FirestoreCollectionWithParentFactory<T, PT, D, PD>>> = this.state$.pipe(\n map((x) => x.collectionFactory),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly collectionFactory$: Observable<FirestoreCollectionWithParentFactory<T, PT, D, PD>> = this.currentCollectionFactory$.pipe(filterMaybe());\n\n readonly currentCollectionGroup$: Observable<Maybe<FirestoreCollectionGroup<T, D>>> = this.state$.pipe(\n map((x) => x.collectionGroup),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly collectionGroup$: Observable<FirestoreCollectionGroup<T, D>> = this.currentCollectionGroup$.pipe(filterMaybe());\n\n // MARK: State Changes\n /**\n * Sets the collection factory function to use.\n */\n readonly setCollectionFactory = this.updater((state, collectionFactory: FirestoreCollectionWithParentFactory<T, PT, D, PD>) => ({ ...state, collectionFactory }));\n\n /**\n * Sets the collection group to use.\n */\n readonly setCollectionGroup = this.updater((state, collectionGroup: Maybe<FirestoreCollectionGroup<T, D>>) => ({ ...state, collectionGroup })) as (observableOrValue: Maybe<FirestoreCollectionGroup<T, D>> | Observable<Maybe<FirestoreCollectionGroup<T, D>>>) => Subscription;\n\n /**\n * Sets the parent on the current state.\n */\n readonly _setParentDocument = this.updater((state, parent: Maybe<PD>) => ({ ...state, parent }));\n readonly _setParent = this._setParentDocument as DbxFirebaseComponentStoreSetParentEffectFunction<PD>;\n}\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { Injectable } from '@angular/core';\nimport { Observable, shareReplay, distinctUntilChanged, map, NEVER, switchMap, tap } from 'rxjs';\nimport { FirestoreDocument, FirestoreCollectionWithParentFactory, FirestoreCollection } from '@dereekb/firebase';\nimport { Maybe } from '@dereekb/util';\nimport { AbstractDbxFirebaseDocumentStore, DbxFirebaseDocumentStore, DbxFirebaseDocumentStoreContextState } from './store.document';\nimport { DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction, setParentStoreEffect, DbxFirebaseComponentStoreWithParent, DbxFirebaseComponentStoreWithParentContextState, DbxFirebaseComponentStoreWithParentSetParentEffectFunction } from './store.subcollection.rxjs';\n\nexport interface DbxFirebaseDocumentWithParentStoreContextState<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends DbxFirebaseDocumentStoreContextState<T, D>, DbxFirebaseComponentStoreWithParentContextState<T, PT, D, PD> {}\n\nexport interface DbxFirebaseDocumentWithParentStore<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends DbxFirebaseDocumentStore<T, D>, DbxFirebaseComponentStoreWithParent<T, PT, D, PD, FirestoreCollection<T, D>> {}\n\n/**\n * Abstract DbxFirebaseDocumentStore that has a parent document from which is derives it's FiresbaseCollection from.\n */\n@Injectable()\nexport class AbstractDbxFirebaseDocumentWithParentStore<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, C extends DbxFirebaseDocumentWithParentStoreContextState<T, PT, D, PD> = DbxFirebaseDocumentWithParentStoreContextState<T, PT, D, PD>> extends AbstractDbxFirebaseDocumentStore<T, D, C> implements DbxFirebaseDocumentWithParentStore<T, PT, D, PD> {\n // MARK: Effects\n readonly setParentStore: DbxFirebaseComponentStoreWithParentSetParentStoreEffectFunction<PT, PD> = setParentStoreEffect(this);\n readonly setParent: DbxFirebaseComponentStoreWithParentSetParentEffectFunction<PD> = this.effect((input: Observable<Maybe<PD>>) => {\n return input.pipe(\n switchMap((parent) => {\n this._setParentDocument(parent);\n\n if (parent) {\n return this.collectionFactory$.pipe(\n tap((collectionFactory) => {\n const collection = collectionFactory(parent);\n this.setFirestoreCollection(collection);\n })\n );\n } else {\n // clear the current collection\n this.setFirestoreCollection(undefined);\n\n // do nothing until a parent is returned.\n return NEVER;\n }\n })\n );\n });\n\n readonly _setParent = this.setParent;\n\n // MARK: Accessors\n readonly currentParent$: Observable<Maybe<PD>> = this.state$.pipe(\n map((x) => x.parent),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly parent$: Observable<PD> = this.currentParent$.pipe(filterMaybe());\n\n readonly currentCollectionFactory$: Observable<Maybe<FirestoreCollectionWithParentFactory<T, PT, D, PD>>> = this.state$.pipe(\n map((x) => x.collectionFactory),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n readonly collectionFactory$: Observable<FirestoreCollectionWithParentFactory<T, PT, D, PD>> = this.currentCollectionFactory$.pipe(filterMaybe());\n\n // MARK: State Changes\n /**\n * Sets the collection factory function to use.\n */\n readonly setCollectionFactory = this.updater((state, collectionFactory: FirestoreCollectionWithParentFactory<T, PT, D, PD>) => ({ ...state, collectionFactory }));\n\n /**\n * Sets the parent on the current state.\n */\n readonly _setParentDocument = this.updater((state, parent: Maybe<PD>) => ({ ...state, parent }));\n}\n","import { Directive, forwardRef, Input, Provider, Type } from '@angular/core';\nimport { FirestoreDocument } from '@dereekb/firebase';\nimport { Maybe } from '@dereekb/util';\nimport { DbxFirebaseCollectionStoreDirective, provideDbxFirebaseCollectionStoreDirective } from './store.collection.directive';\nimport { DbxFirebaseCollectionWithParentStore, DbxFirebaseComponentStoreWithParentSourceMode } from './store.subcollection';\n\n/**\n * Abstract directive that contains a DbxFirebaseCollectionWithParentStore and provides an interface for communicating with other directives.\n */\n@Directive()\nexport abstract class DbxFirebaseCollectionWithParentStoreDirective<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>, S extends DbxFirebaseCollectionWithParentStore<T, PT, D, PD> = DbxFirebaseCollectionWithParentStore<T, PT, D, PD>> extends DbxFirebaseCollectionStoreDirective<T, D, S> {\n // MARK: Inputs\n @Input()\n set sourceMode(sourceMode: Maybe<DbxFirebaseComponentStoreWithParentSourceMode>) {\n this.store.setSourceMode(sourceMode);\n }\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// The use of any here does not degrade the type-safety; we want to simply match that the Store type S is used in the Directive type C to provide it.\n\n/**\n * Configures providers for a DbxFirebaseCollectionWithParentStoreDirective.\n *\n * Can optionally also provide the actual store type to include in the providers array so it is instantiated by Angular.\n *\n * @param sourceType\n */\nexport function provideDbxFirebaseCollectionWithParentStoreDirective<S extends DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, any>>(sourceType: Type<S>): Provider[];\nexport function provideDbxFirebaseCollectionWithParentStoreDirective<S extends DbxFirebaseCollectionWithParentStore<any, any, any, any>, C extends DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, S> = DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[];\nexport function provideDbxFirebaseCollectionWithParentStoreDirective<S extends DbxFirebaseCollectionWithParentStore<any, any, any, any>, C extends DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, S> = DbxFirebaseCollectionWithParentStoreDirective<any, any, any, any, S>>(sourceType: Type<C>, storeType?: Type<S>): Provider[] {\n const providers: Provider[] = [\n ...provideDbxFirebaseCollectionStoreDirective(sourceType, storeType),\n {\n provide: DbxFirebaseCollectionWithParentStoreDirective,\n useExisting: forwardRef(() => sourceType)\n }\n ];\n\n return providers;\n}\n","import { NgModule } from '@angular/core';\nimport { DbxFirebaseModelStoreModule } from './store/model.store.module';\n\n@NgModule({\n exports: [DbxFirebaseModelStoreModule]\n})\nexport class DbxFirebaseModelModule {}\n","import { NgModule } from '@angular/core';\nimport { DbxFirebaseModelModule } from './model/model.module';\n\n@NgModule({\n exports: [DbxFirebaseModelModule]\n})\nexport class DbxFirebaseModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|