@bravobit/bb-foundation 0.23.7 → 0.24.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/auth/lib/auth.module.d.ts +2 -3
- package/auth/lib/interfaces/config.interface.d.ts +0 -4
- package/auth/public_api.d.ts +0 -5
- package/esm2020/auth/lib/auth.interceptor.mjs +4 -4
- package/esm2020/auth/lib/auth.module.mjs +7 -16
- package/esm2020/auth/lib/auth.service.mjs +5 -5
- package/esm2020/auth/lib/directives/authenticated.directive.mjs +4 -4
- package/esm2020/auth/lib/guards/anonymous.guard.mjs +4 -4
- package/esm2020/auth/lib/guards/authenticated.guard.mjs +4 -4
- package/esm2020/auth/lib/interfaces/config.interface.mjs +1 -1
- package/esm2020/auth/public_api.mjs +1 -6
- package/esm2020/collections/lib/collections.module.mjs +5 -5
- package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +4 -4
- package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +4 -4
- package/esm2020/collections/lib/components/collections.directive.mjs +13 -13
- package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +4 -4
- package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +4 -4
- package/esm2020/controls/lib/checkbox/checkbox.module.mjs +5 -5
- package/esm2020/controls/lib/control-error/control-error/control-error.component.mjs +4 -4
- package/esm2020/controls/lib/control-error/control-error-submit.directive.mjs +4 -4
- package/esm2020/controls/lib/control-error/control-error.module.mjs +5 -5
- package/esm2020/controls/lib/controls.module.mjs +5 -5
- package/esm2020/controls/lib/form-control/form-control/form-control.component.mjs +4 -4
- package/esm2020/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +4 -4
- package/esm2020/controls/lib/form-control/form-control-input.directive.mjs +4 -4
- package/esm2020/controls/lib/form-control/form-control.module.mjs +5 -5
- package/esm2020/controls/lib/radio/radio-button/radio-button.component.mjs +4 -4
- package/esm2020/controls/lib/radio/radio-group/radio-group.component.mjs +4 -4
- package/esm2020/controls/lib/radio/radio.module.mjs +5 -5
- package/esm2020/controls/lib/toggle/toggle/toggle.component.mjs +4 -4
- package/esm2020/controls/lib/toggle/toggle-group/toggle-group.component.mjs +4 -4
- package/esm2020/controls/lib/toggle/toggle.module.mjs +5 -5
- package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +4 -4
- package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +4 -4
- package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +4 -4
- package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +4 -4
- package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +4 -4
- package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +4 -4
- package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +4 -4
- package/esm2020/dashboard/lib/dashboard.module.mjs +5 -5
- package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +4 -4
- package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +4 -4
- package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +4 -4
- package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +4 -4
- package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +4 -4
- package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +4 -4
- package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +4 -4
- package/esm2020/dialog/lib/dialog.insertion.mjs +4 -4
- package/esm2020/dialog/lib/dialog.module.mjs +5 -5
- package/esm2020/dialog/lib/dialog.service.mjs +4 -4
- package/esm2020/elements/lib/avatar/avatar.component.mjs +4 -4
- package/esm2020/elements/lib/button/button.component.mjs +7 -7
- package/esm2020/elements/lib/checkbox/checkbox.component.mjs +4 -4
- package/esm2020/elements/lib/date-picker/date-picker.component.mjs +4 -4
- package/esm2020/elements/lib/directives/addon.directive.mjs +7 -7
- package/esm2020/elements/lib/directives/form-submit.directive.mjs +4 -4
- package/esm2020/elements/lib/directives/form-submitter.directive.mjs +4 -4
- package/esm2020/elements/lib/directives/input.directive.mjs +7 -7
- package/esm2020/elements/lib/dropdown/dropdown.component.mjs +7 -7
- package/esm2020/elements/lib/elements.module.mjs +5 -5
- package/esm2020/elements/lib/file-picker/file-picker.component.mjs +4 -4
- package/esm2020/elements/lib/form-control/form-control.component.mjs +4 -4
- package/esm2020/elements/lib/form-error/form-error.component.mjs +4 -4
- package/esm2020/elements/lib/form-group/form-group.component.mjs +4 -4
- package/esm2020/elements/lib/icon/icon.component.mjs +4 -4
- package/esm2020/elements/lib/image-picker/image-picker.component.mjs +4 -4
- package/esm2020/elements/lib/pipes/file-image.pipe.mjs +4 -4
- package/esm2020/elements/lib/pipes/file-size.pipe.mjs +4 -4
- package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +4 -4
- package/esm2020/elements/lib/spinner/spinner.component.mjs +4 -4
- package/esm2020/elements/lib/tag/tag.component.mjs +4 -4
- package/esm2020/http/lib/http.module.mjs +5 -5
- package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +4 -4
- package/esm2020/http/lib/interceptors/error.interceptor.mjs +4 -4
- package/esm2020/lib/core/services/clipboard.service.mjs +4 -4
- package/esm2020/lib/core/services/exif.service.mjs +4 -4
- package/esm2020/lib/core/services/file-loader.service.mjs +4 -4
- package/esm2020/lib/core/services/image-converter.service.mjs +4 -4
- package/esm2020/lib/core/services/languages.service.mjs +4 -4
- package/esm2020/lib/core/services/network.service.mjs +4 -4
- package/esm2020/lib/core/services/patch.service.mjs +4 -4
- package/esm2020/localize/lib/localize.module.mjs +5 -5
- package/esm2020/localize/lib/localize.pipe.mjs +4 -4
- package/esm2020/localize/lib/localize.service.mjs +4 -4
- package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +4 -4
- package/esm2020/localize/lib/views/localize-template.directive.mjs +4 -4
- package/esm2020/masking/lib/directives/currency-mask.directive.mjs +4 -4
- package/esm2020/masking/lib/directives/date-mask.directive.mjs +4 -4
- package/esm2020/masking/lib/directives/input-mask.directive.mjs +4 -4
- package/esm2020/masking/lib/masking.module.mjs +5 -5
- package/esm2020/masking/lib/masking.service.mjs +4 -4
- package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +4 -4
- package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +4 -4
- package/esm2020/notifications/lib/notifications.module.mjs +5 -5
- package/esm2020/notifications/lib/notifications.service.mjs +4 -4
- package/esm2020/permissions/bravobit-bb-foundation-permissions.mjs +5 -0
- package/esm2020/permissions/lib/directives/permission.directive.mjs +88 -0
- package/esm2020/permissions/lib/guards/permission.guard.mjs +57 -0
- package/esm2020/permissions/lib/handlers/abstract.handler.mjs +3 -0
- package/esm2020/permissions/lib/handlers/role.handler.mjs +27 -0
- package/esm2020/permissions/lib/permissions.interface.mjs +3 -0
- package/esm2020/permissions/lib/permissions.module.mjs +39 -0
- package/esm2020/permissions/lib/permissions.service.mjs +86 -0
- package/esm2020/permissions/public_api.mjs +8 -0
- package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +4 -4
- package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +4 -4
- package/esm2020/recaptcha/lib/recaptcha.module.mjs +5 -5
- package/esm2020/storage/lib/storage.service.mjs +4 -4
- package/esm2020/table/lib/components/table/table.component.mjs +10 -10
- package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +4 -4
- package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +4 -4
- package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +4 -4
- package/esm2020/table/lib/table.module.mjs +5 -5
- package/esm2020/theming/lib/theming.directive.mjs +4 -4
- package/esm2020/theming/lib/theming.module.mjs +5 -5
- package/esm2020/utils/lib/directives/autosize.directive.mjs +4 -4
- package/esm2020/utils/lib/directives/focus-trap.directive.mjs +4 -4
- package/esm2020/utils/lib/directives/focus.directive.mjs +4 -4
- package/esm2020/utils/lib/directives/template.directive.mjs +4 -4
- package/esm2020/utils/lib/utils.module.mjs +5 -5
- package/fesm2015/bravobit-bb-foundation-auth.mjs +30 -261
- package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-collections.mjs +22 -22
- package/fesm2015/bravobit-bb-foundation-collections.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-controls.mjs +57 -57
- package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs +25 -25
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-dialog.mjs +31 -31
- package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-elements.mjs +76 -76
- package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-http.mjs +10 -10
- package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-localize.mjs +16 -16
- package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-masking.mjs +16 -16
- package/fesm2015/bravobit-bb-foundation-masking.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-notifications.mjs +13 -13
- package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-permissions.mjs +301 -0
- package/fesm2015/bravobit-bb-foundation-permissions.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +10 -10
- package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-storage.mjs +3 -3
- package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-table.mjs +22 -22
- package/fesm2015/bravobit-bb-foundation-table.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-theming.mjs +7 -7
- package/fesm2015/bravobit-bb-foundation-theming.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-utils.mjs +16 -16
- package/fesm2015/bravobit-bb-foundation-utils.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation.mjs +21 -21
- package/fesm2015/bravobit-bb-foundation.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-auth.mjs +25 -239
- package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-collections.mjs +22 -22
- package/fesm2020/bravobit-bb-foundation-collections.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-controls.mjs +57 -57
- package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs +25 -25
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-dialog.mjs +31 -31
- package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-elements.mjs +76 -76
- package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-http.mjs +10 -10
- package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-localize.mjs +16 -16
- package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-masking.mjs +16 -16
- package/fesm2020/bravobit-bb-foundation-masking.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-notifications.mjs +13 -13
- package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-permissions.mjs +289 -0
- package/fesm2020/bravobit-bb-foundation-permissions.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +10 -10
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-storage.mjs +3 -3
- package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-table.mjs +22 -22
- package/fesm2020/bravobit-bb-foundation-table.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-theming.mjs +7 -7
- package/fesm2020/bravobit-bb-foundation-theming.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-utils.mjs +16 -16
- package/fesm2020/bravobit-bb-foundation-utils.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation.mjs +21 -21
- package/fesm2020/bravobit-bb-foundation.mjs.map +1 -1
- package/package.json +13 -5
- package/permissions/index.d.ts +5 -0
- package/{auth → permissions}/lib/directives/permission.directive.d.ts +9 -4
- package/{auth → permissions}/lib/guards/permission.guard.d.ts +4 -5
- package/permissions/lib/handlers/abstract.handler.d.ts +4 -0
- package/permissions/lib/handlers/role.handler.d.ts +9 -0
- package/permissions/lib/permissions.interface.d.ts +11 -0
- package/permissions/lib/permissions.module.d.ts +10 -0
- package/permissions/lib/permissions.service.d.ts +22 -0
- package/permissions/public_api.d.ts +7 -0
- package/README.md +0 -47
- package/auth/lib/interfaces/permission.interface.d.ts +0 -6
- package/auth/lib/permissions/permissions.handler.d.ts +0 -9
- package/auth/lib/permissions/permissions.service.d.ts +0 -18
- package/esm2020/auth/lib/directives/permission.directive.mjs +0 -58
- package/esm2020/auth/lib/guards/permission.guard.mjs +0 -63
- package/esm2020/auth/lib/interfaces/permission.interface.mjs +0 -2
- package/esm2020/auth/lib/permissions/permissions.handler.mjs +0 -33
- package/esm2020/auth/lib/permissions/permissions.service.mjs +0 -73
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bravobit-bb-foundation-auth.mjs","sources":["../../../projects/bb-foundation/auth/src/lib/interfaces/config.interface.ts","../../../projects/bb-foundation/auth/src/lib/tokens/use-authorization.token.ts","../../../projects/bb-foundation/auth/src/lib/helpers/jwt.helper.ts","../../../projects/bb-foundation/auth/src/lib/directives/abstract.directive.ts","../../../projects/bb-foundation/auth/src/lib/providers/verify.provider.ts","../../../projects/bb-foundation/auth/src/lib/providers/email.provider.ts","../../../projects/bb-foundation/auth/src/lib/auth.session.ts","../../../projects/bb-foundation/auth/src/lib/auth.service.ts","../../../projects/bb-foundation/auth/src/lib/directives/authenticated.directive.ts","../../../projects/bb-foundation/auth/src/lib/permissions/permissions.service.ts","../../../projects/bb-foundation/auth/src/lib/directives/permission.directive.ts","../../../projects/bb-foundation/auth/src/lib/permissions/permissions.handler.ts","../../../projects/bb-foundation/auth/src/lib/guards/anonymous.guard.ts","../../../projects/bb-foundation/auth/src/lib/guards/authenticated.guard.ts","../../../projects/bb-foundation/auth/src/lib/guards/permission.guard.ts","../../../projects/bb-foundation/auth/src/lib/auth.interceptor.ts","../../../projects/bb-foundation/auth/src/lib/auth.module.ts","../../../projects/bb-foundation/auth/src/bravobit-bb-foundation-auth.ts"],"sourcesContent":["import {ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree} from '@angular/router';\nimport {AppPermissions} from '../permissions/permissions.handler';\nimport {InjectionToken} from '@angular/core';\n\nexport class AuthConfig {\n applicationId: string;\n\n http?: {\n scheme?: string,\n header?: string\n };\n\n redirects?: {\n authenticated?: string | string[];\n unauthenticated?: string | string[];\n permissionDenied?: string | string[];\n };\n setRedirectOnFailedAuth?: boolean;\n\n bootstrap?: boolean;\n providers?: string[];\n autoRefresh?: boolean;\n permissions?: AppPermissions<any, any>;\n}\n\nexport const AUTH_REDIRECT_HANDLER = new InjectionToken<AuthRedirectHandler>('auth redirect handler');\n\nexport interface AuthRedirectHandler {\n\n onFailedAuthenticated(snapshot?: ActivatedRouteSnapshot, state?: RouterStateSnapshot): boolean | UrlTree;\n onFailedAnonymous(snapshot?: ActivatedRouteSnapshot, state?: RouterStateSnapshot): boolean | UrlTree;\n onPermissionDenied(snapshot?: ActivatedRouteSnapshot, state?: RouterStateSnapshot): boolean | UrlTree;\n\n}\n","import {HttpContextToken} from '@angular/common/http';\n\nexport const USE_AUTHORIZATION = new HttpContextToken(() => true);","import {AuthToken} from '../interfaces/token.interface';\n\nexport class JwtHelper {\n\n decode(token: string) {\n try {\n if (token === null || token === undefined) {\n return null;\n }\n\n const json = JSON.parse(\n this.urlDecode(token.split('.')[1])\n );\n\n return this.parse(json);\n } catch {\n return null;\n }\n }\n\n private urlDecode(token: string | null) {\n const value = token || '';\n let output = value\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += '==';\n break;\n case 3:\n output += '=';\n break;\n default:\n throw 'Illegal base64url string!';\n }\n\n try {\n return this.baseDecodeUnicode(output);\n } catch {\n return atob(output);\n }\n }\n\n private baseDecodeUnicode = (value: string) => {\n return decodeURIComponent(atob(value).replace(/(.)/g, (_, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = '0' + code;\n }\n return '%' + code;\n }));\n };\n\n private parse = (data: object) => {\n return {\n id: data['iss'] ?? null,\n type: data['typ'] ?? null,\n audience: data['aud'] ?? null,\n issuer: data['iss'] ?? null,\n subject: data['sub'] ?? null,\n role: data['role'] ?? null,\n notValidBefore: this.parseDate(data['nbf']),\n expiresAt: this.parseDate(data['exp']),\n issuedAt: this.parseDate(data['iat'])\n } as AuthToken;\n };\n\n private parseDate = (epochInSeconds: number) => {\n if (!epochInSeconds || epochInSeconds <= 0) {\n return null;\n }\n\n return new Date(epochInSeconds * 1000);\n };\n\n}\n","import {EmbeddedViewRef, TemplateRef, ViewContainerRef} from '@angular/core';\n\nexport abstract class AbstractAuthDirective {\n\n // Data.\n protected valid: boolean = false;\n\n // Templates.\n protected elseTemplateRef: TemplateRef<any> | null = null;\n\n // View refs.\n protected thenViewRef: EmbeddedViewRef<any> | null = null;\n protected elseViewRef: EmbeddedViewRef<any> | null = null;\n\n protected constructor(protected templateRef: TemplateRef<any>,\n protected viewContainerRef: ViewContainerRef) {\n }\n\n protected updateView() {\n if (this.valid) {\n if (!this.thenViewRef) {\n this.viewContainerRef.clear();\n this.elseViewRef = null;\n if (this.templateRef) {\n this.thenViewRef = this.viewContainerRef.createEmbeddedView(this.templateRef);\n }\n }\n } else {\n if (!this.elseViewRef) {\n this.viewContainerRef.clear();\n this.thenViewRef = null;\n if (this.elseTemplateRef) {\n this.elseViewRef = this.viewContainerRef.createEmbeddedView(this.elseTemplateRef);\n }\n }\n }\n }\n\n protected assertTemplate(property: string, templateRef: TemplateRef<any> | null) {\n const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n if (!isTemplateRefOrNull) {\n throw new Error(`${property} must be a TemplateRef.`);\n }\n }\n\n}\n","import {AuthProvider, AuthProviderResponse, AuthProviderResult} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\nimport {firstValueFrom} from 'rxjs';\n\nexport class AuthVerifyProvider implements AuthProvider {\n\n constructor(private _code: string,\n private _verifyToken: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient): Promise<AuthProviderResult> {\n // Execute API call.\n const data$ = httpClient.post<Pick<AuthProviderResponse, 'token' | 'refresh_token' | 'user'>>(this._endpoint, {\n token: this._code,\n verify_token: this._verifyToken\n });\n\n const data = await firstValueFrom(data$);\n return {\n accessToken: data?.token,\n refreshToken: data?.refresh_token,\n user: data?.user\n };\n }\n\n}\n","import {AuthProvider, AuthProviderResponse, AuthProviderResult} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\nimport {firstValueFrom} from 'rxjs';\n\nexport class AuthEmailProvider implements AuthProvider {\n\n constructor(private _email: string,\n private _password: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient): Promise<AuthProviderResult> {\n // Execute API call.\n const data$ = httpClient.post<AuthProviderResponse>(this._endpoint, {\n email: this._email,\n password: this._password\n });\n\n const data = await firstValueFrom(data$);\n return {\n accessToken: data?.token,\n refreshToken: data?.refresh_token,\n user: data?.user,\n provider: data?.provider,\n verifyToken: data?.verify_token\n };\n }\n\n}\n","import {StorageStrategy} from '@bravobit/bb-foundation/storage';\nimport {AuthToken} from './interfaces/token.interface';\nimport {JwtHelper} from './helpers/jwt.helper';\nimport {shareReplay} from 'rxjs/operators';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class AuthSession {\n\n // Readonly data.\n private readonly _jwt = new JwtHelper();\n private readonly _storage: StorageStrategy | null;\n private readonly _accessTokenStorageKey: string;\n private readonly _refreshTokenStorageKey: string;\n private readonly _userStorageKey: string;\n\n // Token strings.\n private _accessTokenString: string | null = null;\n private _refreshTokenString: string | null = null;\n\n // Token payloads.\n private _accessTokenPayload: AuthToken | null = null;\n private _refreshTokenPayload: AuthToken | null = null;\n\n // Private user data.\n private _user$ = new BehaviorSubject<any | null>(null);\n\n // Public user data.\n user = this._user$.pipe(\n shareReplay(1)\n );\n\n constructor(options?: { id?: string, storage?: StorageStrategy }) {\n const applicationId = options?.id ?? 'ng';\n\n // Setting up the readonly storage keys.\n this._accessTokenStorageKey = this.generateKey(applicationId, 'au_act');\n this._refreshTokenStorageKey = this.generateKey(applicationId, 'au_rft');\n this._userStorageKey = this.generateKey(applicationId, 'au_usr');\n\n // Setting up the storage.\n this._storage = options?.storage ?? null;\n\n // Init methods.\n this.restoreFromStorage();\n }\n\n get snapshot() {\n return {\n user: this._user$.getValue(),\n accessToken: this.accessToken,\n refreshToken: this.refreshToken\n };\n }\n\n get accessToken() {\n return this.isTokenValid(this._accessTokenPayload)\n ? this._accessTokenString\n : null;\n }\n\n get refreshToken() {\n return this.isTokenValid(this.refreshTokenPayload)\n ? this._refreshTokenString\n : null;\n }\n\n get accessTokenPayload() {\n return this._accessTokenPayload ?? null;\n }\n\n get refreshTokenPayload() {\n return this._refreshTokenPayload ?? null;\n }\n\n authenticated() {\n return this.isTokenValid(this._accessTokenPayload) || this.isTokenValid(this._refreshTokenPayload);\n }\n\n setTokens(accessToken: string | null, refreshToken: string | null) {\n this.setAccessToken(accessToken);\n this.setRefreshToken(refreshToken);\n this.syncTokensInStorage();\n }\n\n setUser(user: unknown) {\n this._user$.next(user ?? null);\n this.syncUserInStorage();\n }\n\n clear() {\n this.setTokens(null, null);\n this.setUser(null);\n }\n\n private restoreFromStorage() {\n if (!this._storage) {\n return;\n }\n\n // Set the access token.\n const accessToken = this._storage.get<string>(this._accessTokenStorageKey);\n this.setAccessToken(accessToken);\n\n // Set the refresh token.\n const refreshToken = this._storage.get<string>(this._refreshTokenStorageKey);\n this.setRefreshToken(refreshToken);\n\n // Set the user if we have any correct token payloads.\n if (this._accessTokenPayload || this._refreshTokenPayload) {\n const user = this._storage.get<unknown>(this._userStorageKey);\n this._user$.next(user ?? null); // Note: just settings here instead of setUser() because of syncing to the storage.\n }\n }\n\n private syncTokensInStorage() {\n if (!this._storage) {\n return;\n }\n\n // Set the access token if completely valid.\n if (!!this.accessToken) {\n this._storage.set<string>(this._accessTokenStorageKey, this._accessTokenString, {\n expires: this._accessTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._accessTokenStorageKey);\n }\n\n // Set the refresh token if completely valid.\n if (!!this.refreshToken) {\n this._storage.set<string>(this._refreshTokenStorageKey, this._refreshTokenString, {\n expires: this._refreshTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._refreshTokenStorageKey);\n }\n }\n\n private syncUserInStorage() {\n if (!this._storage) {\n return;\n }\n\n const user = this._user$.getValue();\n if (!user) {\n return this._storage.remove(this._userStorageKey);\n }\n\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n this._storage.set<unknown>(this._userStorageKey, user, {\n expires: new Date(date.getTime())\n });\n }\n\n private setAccessToken(value: string | null) {\n this._accessTokenString = value ?? null;\n this._accessTokenPayload = this._jwt.decode(this._accessTokenString);\n }\n\n private setRefreshToken(value: string | null) {\n this._refreshTokenString = value ?? null;\n this._refreshTokenPayload = this._jwt.decode(this._refreshTokenString);\n }\n\n private generateKey = (applicationId: string, key: string) => {\n return [applicationId, key].join('_');\n };\n\n private isTokenValid = (token: AuthToken) => {\n if (!token) {\n return false;\n }\n\n return token?.expiresAt?.getTime() > Date.now();\n };\n\n}\n","import {AUTH_REDIRECT_HANDLER, AuthConfig, AuthRedirectHandler} from './interfaces/config.interface';\nimport {HttpClient, HttpContext, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {AuthProvider, AuthSignInResponse} from './interfaces/provider.interface';\nimport {makeStateKey, StateKey, TransferState} from '@angular/platform-browser';\nimport {Storage, StorageOption} from '@bravobit/bb-foundation/storage';\nimport {Inject, Injectable, Injector, Optional} from '@angular/core';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {AuthVerifyProvider} from './providers/verify.provider';\nimport {AuthEmailProvider} from './providers/email.provider';\nimport {HttpConfig} from '@bravobit/bb-foundation/http';\nimport {firstValueFrom, Observable, of} from 'rxjs';\nimport {Platform} from '@angular/cdk/platform';\nimport {AuthSession} from './auth.session';\nimport {map, tap} from 'rxjs/operators';\nimport {Router} from '@angular/router';\n\n@Injectable()\nexport class Auth {\n\n // Readonly data.\n private readonly _authStateKey: StateKey<any | null> = makeStateKey(`bbAuthStateKey`);\n private readonly _httpAlias: string | null = this._httpConfig?.defaultAlias ?? null;\n\n readonly session: AuthSession;\n readonly user: Observable<any | null>;\n\n private _refreshHandler: number | null = null;\n\n constructor(private _storage: Storage,\n private _injector: Injector,\n private _platform: Platform,\n private _httpClient: HttpClient,\n @Optional() private _config?: AuthConfig,\n @Optional() private _state?: TransferState,\n @Optional() private _httpConfig?: HttpConfig,\n @Optional() @Inject(AUTH_REDIRECT_HANDLER) private _handler?: AuthRedirectHandler) {\n // We select a storage strategy based on the server/browser.\n // Only cookies CAN work on the server.\n const storageStrategy = this._platform.isBrowser\n ? this._storage.select([StorageOption.Cookie, StorageOption.Local])\n : this._storage.cookie;\n\n // Starting the new session.\n this.session = new AuthSession({\n id: this._config?.applicationId,\n storage: storageStrategy\n });\n this.user = this.session.user;\n }\n\n initialize() {\n return async () => {\n // Check if the app should bootstrap the authentication.\n const shouldBootstrap = this._config?.bootstrap ?? true;\n if (!shouldBootstrap) {\n return this.handleAutoRefreshing();\n }\n\n // Only retrieve from the server when we are actually authenticated.\n if (!this.session.authenticated()) {\n return;\n }\n\n // Get the key from the server state.\n if (this._state && this._state?.hasKey(this._authStateKey)) {\n const user = this._state?.get(this._authStateKey, null) ?? null;\n return this.session.setUser(user);\n }\n\n // Try to fetch the user from the server.\n const user$ = this.me();\n const user = await firstValueFrom(user$, {defaultValue: null});\n\n // Set the state if exists.\n if (this._state) {\n this._state?.set<any>(this._authStateKey, user ?? null);\n }\n\n // Save the user in the storage and handle auto refreshing.\n this.session.setUser(user);\n this.handleAutoRefreshing();\n };\n }\n\n me<T = any>() {\n const url = this.getUrl('auth/me');\n return this._httpClient.get<T>(url);\n }\n\n async signIn(provider: AuthProvider, as?: string[]) {\n const {accessToken, refreshToken, user, ...result} = await provider.authenticate(this._httpClient);\n\n // Check if the role matches.\n const role = this._config?.permissions?.getRole?.(user) ?? user?.role ?? null;\n if (as && !as.includes(role)) {\n throw new Error('Invalid role.');\n }\n\n // Validate if the provider is one of the available\n // providers then return the user object and the provider.\n const apiProvider = result?.provider ?? null;\n const apiVerifyToken = result?.verifyToken ?? null;\n const availableProviders = this._config?.providers ?? ['email', 'sms', 'totp'];\n if (availableProviders.includes(apiProvider)) {\n return <AuthSignInResponse>{user, provider: apiProvider, verifyToken: apiVerifyToken};\n }\n\n // Set the tokens in storage.\n this.setTokens(accessToken, refreshToken);\n\n // Set the user in storage.\n this.session.setUser(user);\n\n // Return the user.\n return <AuthSignInResponse>{user};\n }\n\n async signInWithEmail(email: string, password: string, as?: string[]) {\n const url = this.getUrl('auth/login');\n return this.signIn(new AuthEmailProvider(email, password, url), as);\n }\n\n async signInWithVerifyCode(code: string, verifyToken: string) {\n const url = this.getUrl('auth/verify');\n return this.signIn(new AuthVerifyProvider(code, verifyToken, url));\n }\n\n async resendVerifyCode(verifyToken: string) {\n const url = this.getUrl('auth/resend');\n const result$ = this._httpClient.post(url, {\n verify_token: verifyToken\n });\n\n return firstValueFrom(result$);\n }\n\n async register<T = any>(data: any, options?: {\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n params?: HttpParams | {\n [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n };\n }) {\n // Execute API call.\n const url = this.getUrl('auth/register');\n const result$ = this._httpClient.post<{ token: string, refresh_token: string, user: any }>(url, data, options);\n const result = await firstValueFrom(result$);\n\n // Set the tokens in storage.\n this.setTokens(result?.token, result?.refresh_token);\n\n // Set the user in storage.\n const user = result?.user;\n this.session.setUser(user);\n\n // Return the user.\n return <T>user;\n }\n\n logout() {\n // If we don't have a refresh token just clear the session.\n // Note: We do this because else we try to invalidate\n // an \"undefined\" refresh token.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken) {\n return this.session.clear();\n }\n\n // We do have a refresh token, so try to\n // invalidate it in the backend.\n try {\n const url = this.getUrl('auth/logout');\n const headerName = this._config?.http?.header ?? 'Authorization';\n const observable$ = this._httpClient.get(url, {\n headers: {[headerName]: refreshToken}\n });\n firstValueFrom(observable$).then(_ => _).catch(_ => _);\n } catch {\n // Do nothing because the tokens will be deleted anyways from the session.\n }\n\n // Delete the tokens from the session.\n return this.session.clear();\n }\n\n refresh() {\n // If the refresh token does\n // not exist just return an observable of null.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken) {\n return of(null);\n }\n\n // Perform the refresh call.\n const headerName = this._config?.http?.header ?? 'Authorization';\n const scheme = this._config?.http?.scheme ?? 'Bearer';\n\n const url = this.getUrl('auth/refresh');\n const context = new HttpContext().set(USE_AUTHORIZATION, false);\n\n return this._httpClient.get<{ token: string, refresh_token: string }>(url, {\n headers: {[headerName]: `${scheme} ${refreshToken}`},\n context: context\n }).pipe(\n tap(({token, refresh_token}) => this.setTokens(token, refresh_token)),\n map(({token}) => token)\n );\n }\n\n async requestPassword(email: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset');\n const observable$ = this._httpClient.post(url, {...extraParams, email});\n return firstValueFrom(observable$);\n }\n\n async resetPassword(token: string, newPassword: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset-password');\n const observable$ = this._httpClient.post(url, {...extraParams, token, password: newPassword});\n return firstValueFrom(observable$);\n }\n\n clearAndRedirect() {\n // 1. Delete the tokens from the session.\n this.session.clear();\n\n if (this._handler) {\n const urlTree = this._handler.onFailedAuthenticated();\n if (!urlTree || urlTree === true) {\n return;\n }\n\n this.router.navigateByUrl(urlTree).then(_ => _);\n return;\n }\n\n // 2. Compose the route url.\n const redirectUrl = this._config?.redirects.unauthenticated ?? null;\n\n // 3. Route back if the user provided a redirect url.\n if (this.router && redirectUrl) {\n const commands = Array.isArray(redirectUrl) ? redirectUrl : [redirectUrl];\n this.router.navigate(commands).then(_ => _);\n }\n }\n\n private setTokens(accessToken: string, refreshToken: string) {\n // Set the tokens in our session.\n this.session.setTokens(accessToken, refreshToken);\n\n // We need to update the auto refresh of the refresh token.\n this.handleAutoRefreshing();\n }\n\n private handleAutoRefreshing() {\n const shouldAutoRefresh = this._config?.autoRefresh ?? false;\n if (!shouldAutoRefresh) {\n return;\n }\n\n const expiresAt = this.session.refreshTokenPayload?.expiresAt ?? null;\n if (expiresAt === null || !this._platform.isBrowser) {\n return;\n }\n\n const differenceInMilliseconds = expiresAt.getTime() - Date.now();\n const offsetInMilliseconds = 10_000; // 10 seconds.\n\n // We want to start the refresh 10 seconds before it expires.\n const actualTiming = differenceInMilliseconds - offsetInMilliseconds;\n if (actualTiming <= 0) {\n return;\n }\n\n // We need to cap the timings because if\n // we get large numbers it might cause unwanted results.\n const maxTiming = 1000 * 60 * 60 * 24; // 24 hours.\n const cappedTiming = Math.max(1, Math.min(actualTiming, maxTiming));\n try {\n if (this._refreshHandler !== null) {\n clearTimeout?.(this._refreshHandler);\n this._refreshHandler = null;\n }\n this._refreshHandler = window?.setTimeout?.(() => this.autoRefresh(), cappedTiming);\n } catch {\n // Just ignore it.\n }\n }\n\n private async autoRefresh() {\n try {\n // We just need to wait for it to refresh.\n const refresh$ = this.refresh();\n await firstValueFrom(refresh$);\n } catch {\n // Something went wrong refreshing, we need to clear.\n this.clearAndRedirect();\n }\n }\n\n private get router() {\n return this._injector.get(Router);\n }\n\n private getUrl(endpoint: string) {\n return [this._httpAlias, endpoint]\n .filter(item => !!item)\n .join('/');\n }\n\n}\n","import {Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {AbstractAuthDirective} from './abstract.directive';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {Auth} from '../auth.service';\nimport {Subscription} from 'rxjs';\n\n@Directive({\n selector: '[bbAuthenticated]'\n})\nexport class BbAuthenticated extends AbstractAuthDirective implements OnInit, OnDestroy {\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n @Input()\n set bbAuthenticatedElse(templateRef: TemplateRef<any>) {\n this.assertTemplate('bbAuthenticatedElse', templateRef);\n this.elseTemplateRef = templateRef;\n this.updateView();\n }\n\n constructor(private _auth: Auth,\n private _templateRef: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef) {\n super(_templateRef, _viewContainerRef);\n }\n\n ngOnInit() {\n const subscription = this._auth.user.pipe(\n map(user => !!user),\n distinctUntilChanged()\n ).subscribe(valid => {\n this.valid = valid;\n this.updateView();\n });\n this._subscription.add(subscription);\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n static ngAcceptInputType_bbAuthenticatedElse: TemplateRef<any>;\n\n}\n","import {PermissionOptions} from '../interfaces/permission.interface';\nimport {AuthConfig} from '../interfaces/config.interface';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {AppPermissions} from './permissions.handler';\nimport {Injectable, Optional} from '@angular/core';\nimport {Auth} from '../auth.service';\nimport {of} from 'rxjs';\n\n@Injectable()\nexport class Permissions {\n\n // Data.\n private readonly _permissionHandler: AppPermissions<any, any> | null = this._config?.permissions ?? null;\n\n constructor(private _auth: Auth,\n @Optional() private _config?: AuthConfig) {\n }\n\n has(value: string | string[], options?: PermissionOptions) {\n const requiredPermissions = this.getRequiredPermissions(value);\n if (requiredPermissions?.length <= 0) {\n return of(false);\n }\n\n return this._auth.user.pipe(\n map(user => this.hasPermission(requiredPermissions, user, options)),\n distinctUntilChanged()\n );\n }\n\n hasSync(value: string | string[], options?: PermissionOptions) {\n const requiredPermissions = this.getRequiredPermissions(value);\n if (requiredPermissions?.length <= 0) {\n return false;\n }\n\n const user = this._auth?.session?.snapshot?.user ?? null;\n return this.hasPermission(requiredPermissions, user, options);\n }\n\n private hasPermission(requiredPermissions: string[], user: any, options?: PermissionOptions) {\n if (user === null || user === undefined || !this._permissionHandler) {\n return false;\n }\n\n const mode = options?.mode ?? 'and';\n switch (mode) {\n case 'or':\n return this.verifyModeOr(requiredPermissions, user);\n case 'and':\n default:\n return this.verifyModeAnd(requiredPermissions, user);\n }\n }\n\n private verifyModeAnd(permissions: string[], user: object) {\n for (const permission of permissions) {\n const verified = this._permissionHandler.verifyForUser(permission, user);\n if (!verified) {\n return false;\n }\n }\n\n return true;\n }\n\n private verifyModeOr(permissions: string[], user: object) {\n for (const permission of permissions) {\n const verified = this._permissionHandler.verifyForUser(permission, user);\n if (verified) {\n return true;\n }\n }\n\n return false;\n }\n\n private getRequiredPermissions(value: string | string[]) {\n return Array.isArray(value)\n ? value\n : [value];\n }\n\n}\n","import {Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Subscription} from 'rxjs';\nimport {PermissionMode} from '../interfaces/permission.interface';\nimport {distinctUntilChanged, switchMap} from 'rxjs/operators';\nimport {Permissions} from '../permissions/permissions.service';\nimport {AbstractAuthDirective} from './abstract.directive';\n\n@Directive({\n selector: '[bbPermission]'\n})\nexport class BbPermission extends AbstractAuthDirective implements OnInit, OnDestroy {\n\n // Data.\n private _permission$ = new BehaviorSubject<string[]>([]);\n private _mode$ = new BehaviorSubject<PermissionMode>('and');\n\n @Input()\n set bbPermission(value: string | string[]) {\n const permissions = Array.isArray(value) ? value : [value];\n this._permission$.next(permissions);\n this.updateView();\n }\n\n @Input()\n set bbPermissionElse(templateRef: TemplateRef<any>) {\n this.assertTemplate('bbPermissionElse', templateRef);\n this.elseTemplateRef = templateRef;\n this.updateView();\n }\n\n @Input()\n set bbPermissionMode(mode: PermissionMode) {\n this._mode$.next(mode);\n }\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n constructor(private _permissions: Permissions,\n private _templateRef: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef) {\n super(_templateRef, _viewContainerRef);\n }\n\n ngOnInit() {\n const check$ = combineLatest([this._permission$, this._mode$]).pipe(\n switchMap(([permissions, mode]) => this._permissions.has(permissions, {mode})),\n distinctUntilChanged()\n );\n\n const subscription = check$.subscribe(valid => {\n this.valid = valid;\n this.updateView();\n });\n this._subscription.add(subscription);\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n static ngAcceptInputType_bbPermission: string | string[];\n static ngAcceptInputType_bbPermissionElse: TemplateRef<any>;\n static ngAcceptInputType_bbPermissionMode: PermissionMode;\n\n}\n","import {PermissionData, PermissionRecord} from '../interfaces/permission.interface';\n\ndeclare let ngDevMode;\n\nexport class AppPermissions<T extends string, R> {\n\n constructor(private _data: PermissionData<T, PermissionRecord<R>>) {\n }\n\n verify(permission: PermissionRecord<R>, role: T) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this._data?.[role]) {\n console?.warn?.(`Current permissions do not include role: \"${role}\".`);\n }\n\n const availablePermissions = this._data?.[role] ?? [];\n return availablePermissions.includes(permission);\n }\n\n verifyForUser(permission: PermissionRecord<R>, data: object) {\n const role = this.getRole(data);\n return this.verify(permission, role);\n }\n\n getRole(data: object) {\n return data?.['role'] as T ?? null;\n }\n\n static forRoles(data: Record<string, string[]>) {\n const permissions = Object.keys(data) ?? [];\n const roles = permissions.reduce((previous, current) => ([\n ...previous,\n ...(data?.[current] ?? [])\n ]), []);\n const uniqueRoles = [...new Set(roles)];\n\n const formattedData = uniqueRoles.reduce((previous, current) => {\n const rolePermissions = permissions.filter(permission => data?.[permission]?.includes(current));\n\n return {...previous, [current]: rolePermissions};\n }, {});\n\n return new AppPermissions<string, string>(formattedData);\n }\n\n}\n","import {ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot} from '@angular/router';\nimport {AUTH_REDIRECT_HANDLER, AuthConfig, AuthRedirectHandler} from '../interfaces/config.interface';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {Auth} from '../auth.service';\nimport {map} from 'rxjs/operators';\nimport {first} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BbAnonymousGuard implements CanActivate, CanActivateChild {\n\n constructor(private _auth: Auth,\n private _router: Router,\n @Optional() private _config?: AuthConfig,\n @Optional() @Inject(AUTH_REDIRECT_HANDLER) private _handler?: AuthRedirectHandler) {\n }\n\n canActivate(snapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this._auth.user.pipe(\n map(user => !!user),\n map(isAuthenticated => {\n if (!isAuthenticated) {\n return true;\n }\n\n if (this._handler) {\n return this._handler.onFailedAnonymous(snapshot, state);\n }\n\n // If we don't have a URL to go to we can just say\n // the user is not allowed in this route by returning false.\n const nextUrl = this._config?.redirects?.authenticated ?? null;\n if (!nextUrl) {\n return false;\n }\n\n const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];\n return this._router.createUrlTree(commands);\n }),\n first()\n );\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.canActivate(childRoute, state);\n }\n\n}\n","import {ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot} from '@angular/router';\nimport {AUTH_REDIRECT_HANDLER, AuthConfig, AuthRedirectHandler} from '../interfaces/config.interface';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {Auth} from '../auth.service';\nimport {map} from 'rxjs/operators';\nimport {first} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BbAuthenticatedGuard implements CanActivate, CanActivateChild {\n\n constructor(private _auth: Auth,\n private _router: Router,\n @Optional() private _config?: AuthConfig,\n @Optional() @Inject(AUTH_REDIRECT_HANDLER) private _handler?: AuthRedirectHandler) {\n }\n\n canActivate(snapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this._auth.user.pipe(\n map(user => !!user),\n map(isAuthenticated => {\n if (isAuthenticated) {\n return true;\n }\n\n if (this._handler) {\n return this._handler.onFailedAuthenticated(snapshot, state);\n }\n\n // If we don't have a URL to go to we can just say\n // the user is not allowed in this route by returning false.\n const nextUrl = this._config?.redirects?.unauthenticated ?? null;\n if (!nextUrl) {\n return false;\n }\n\n const setRedirectOnFailedAuth = this._config?.setRedirectOnFailedAuth ?? true;\n const redirectUrl = state?.url ?? null;\n const queryParams = setRedirectOnFailedAuth && redirectUrl ? {redirectUrl} : {};\n const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];\n return this._router.createUrlTree(commands, {queryParams});\n }),\n first()\n );\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.canActivate(childRoute, state);\n }\n\n}\n","import {ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot} from '@angular/router';\nimport {AUTH_REDIRECT_HANDLER, AuthConfig, AuthRedirectHandler} from '../interfaces/config.interface';\nimport {PermissionOptions} from '../interfaces/permission.interface';\nimport {Permissions} from '../permissions/permissions.service';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {map} from 'rxjs/operators';\nimport {of} from 'rxjs';\n\ndeclare let ngDevMode;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BbPermissionGuard implements CanActivate, CanActivateChild {\n\n constructor(private _router: Router,\n private _permissions: Permissions,\n @Optional() private _config?: AuthConfig,\n @Optional() @Inject(AUTH_REDIRECT_HANDLER) private _handler?: AuthRedirectHandler) {\n }\n\n canActivate(snapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n const permission = snapshot?.data?.['permission'] ?? null;\n const permission$ = this.parsePermission(permission);\n return permission$.pipe(\n map(valid => {\n if (valid) {\n return true;\n }\n\n if (this._handler) {\n return this._handler.onPermissionDenied(snapshot, state);\n }\n\n const nextUrl = this._config?.redirects?.permissionDenied ?? null;\n if (!nextUrl) {\n return false;\n }\n\n const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];\n return valid ? true : this._router.createUrlTree(commands);\n })\n );\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.canActivate(childRoute, state);\n }\n\n private parsePermission(data: string | string[] | { value: string | string[], options?: PermissionOptions }) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && (data === undefined || data === null)) {\n console?.warn?.(`No \"data.permission\" property was passed.`);\n return of(false);\n }\n\n if (Array.isArray(data) || typeof data === 'string') {\n return this._permissions.has(data);\n }\n\n return this._permissions.has(data?.value, data?.options);\n }\n\n}\n","import {HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {catchError, filter, finalize, switchMap, take} from 'rxjs/operators';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {HttpError} from '@bravobit/bb-foundation/http';\nimport {BehaviorSubject, of, throwError} from 'rxjs';\nimport {Injectable, Optional} from '@angular/core';\nimport {Auth} from './auth.service';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n // Readonly data.\n private readonly _authHeaderString: string = this._config?.http?.header ?? 'Authorization';\n private readonly _authScheme: string = this._config?.http?.scheme ?? 'Bearer';\n\n // Data.\n isRefreshing: boolean = false;\n refreshingAccessToken$ = new BehaviorSubject<string | null>(null);\n\n constructor(private _auth: Auth,\n @Optional() private _config: AuthConfig) {\n }\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler) {\n // 1. Check if the user wants to use the authorization for this request.\n if (!request.context.get(USE_AUTHORIZATION)) {\n return next.handle(request);\n }\n\n // 2. Compose the new request.\n const accessToken = this.getAccessToken(request);\n const newRequest = this.addAuthorizationHeader(request, accessToken);\n\n // 3. Handle all errors.\n return next.handle(newRequest).pipe(\n catchError(error => {\n // Handle the HTTP401 error.\n if ((error instanceof HttpErrorResponse || error instanceof HttpError) && error?.status === 401) {\n return this.handle401Error(request, next);\n }\n\n // Just re-throw the parsed error.\n return throwError(() => error);\n })\n );\n }\n\n private handle401Error(request: HttpRequest<unknown>, next: HttpHandler) {\n // If already refreshing wait for the refresh token to complete.\n if (this.isRefreshing) {\n return this.refreshingAccessToken$.pipe(\n filter(accessToken => accessToken !== null),\n take(1),\n switchMap(accessToken => next.handle(this.addAuthorizationHeader(request, accessToken)))\n );\n }\n\n // Set the refreshing to true.\n this.isRefreshing = true;\n this.refreshingAccessToken$.next(null);\n\n return this._auth.refresh().pipe(\n switchMap(newAccessToken => {\n if (!newAccessToken) {\n return throwError(() => new Error('No refresh token was available.'));\n }\n\n this.refreshingAccessToken$.next(newAccessToken);\n return next.handle(this.addAuthorizationHeader(request, newAccessToken));\n }),\n catchError(() => this.logoutUser()),\n finalize(() => this.isRefreshing = false)\n );\n }\n\n private logoutUser() {\n // Handle the refresh error.\n this._auth.clearAndRedirect();\n\n // Return null as data.\n return of(null);\n }\n\n private getAccessToken = (request: HttpRequest<unknown>) => {\n // Get the token based on header.\n if (request.headers.has(this._authHeaderString)) {\n return request.headers.get(this._authHeaderString);\n }\n\n // Return the default access token.\n return this._auth.session.accessToken;\n };\n\n private addAuthorizationHeader = (request: HttpRequest<unknown>, accessToken: string | null = null) => {\n // Remove auth header when we do not have\n // an access token.\n if (!accessToken) {\n return request.clone({\n headers: request.headers.delete(this._authHeaderString)\n });\n }\n\n // Add the auth header to the request.\n return request.clone({\n setHeaders: {[this._authHeaderString]: `${this._authScheme} ${accessToken}`}\n });\n };\n\n}\n","import {APP_INITIALIZER, ModuleWithProviders, NgModule} from '@angular/core';\nimport {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\nimport {BbAuthenticated} from './directives/authenticated.directive';\nimport {BbPermission} from './directives/permission.directive';\nimport {Permissions} from './permissions/permissions.service';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {AuthInterceptor} from './auth.interceptor';\nimport {Auth} from './auth.service';\n\nconst DECLARATIONS_EXPORTS = [\n BbAuthenticated,\n BbPermission\n];\n\n@NgModule({\n imports: [HttpClientModule],\n declarations: [...DECLARATIONS_EXPORTS],\n exports: [...DECLARATIONS_EXPORTS]\n})\nexport class AuthModule {\n\n static forRoot(config: AuthConfig): ModuleWithProviders<AuthModule> {\n return {\n ngModule: AuthModule,\n providers: [\n Auth,\n Permissions,\n {provide: AuthConfig, useValue: config},\n {provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true},\n {useFactory: initializeAuth, provide: APP_INITIALIZER, deps: [Auth], multi: true}\n ]\n };\n }\n\n}\n\nexport function initializeAuth(auth: Auth) {\n return auth.initialize();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.Auth","i2.AuthConfig","i1.Permissions"],"mappings":";;;;;;;;;;;;;;;MAIa,UAAU,CAAA;AAmBtB,CAAA;MAEY,qBAAqB,GAAG,IAAI,cAAc,CAAsB,uBAAuB;;ACvB7F,MAAM,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI;;MCAnD,SAAS,CAAA;AAAtB,IAAA,WAAA,GAAA;AA4CY,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,KAAa,KAAI;AAC1C,YAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAC3D,gBAAA,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACtD,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACjB,oBAAA,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;AACrB,iBAAA;gBACD,OAAO,GAAG,GAAG,IAAI,CAAC;aACrB,CAAC,CAAC,CAAC;AACR,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,KAAK,GAAG,CAAC,IAAY,KAAI;YAC7B,OAAO;AACH,gBAAA,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI;AACvB,gBAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI;AACzB,gBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI;AAC7B,gBAAA,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI;AAC3B,gBAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI;AAC5B,gBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI;gBAC1B,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC3B,CAAC;AACnB,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,cAAsB,KAAI;AAC3C,YAAA,IAAI,CAAC,cAAc,IAAI,cAAc,IAAI,CAAC,EAAE;AACxC,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AAED,YAAA,OAAO,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;AAC3C,SAAC,CAAC;KAEL;AA1EG,IAAA,MAAM,CAAC,KAAa,EAAA;QAChB,IAAI;AACA,YAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACvC,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACnB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACtC,CAAC;AAEF,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3B,SAAA;QAAC,MAAM;AACJ,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACJ;AAEO,IAAA,SAAS,CAAC,KAAoB,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,MAAM,GAAG,KAAK;AACb,aAAA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAClB,aAAA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAExB,QAAA,QAAQ,MAAM,CAAC,MAAM,GAAG,CAAC;AACrB,YAAA,KAAK,CAAC;gBACF,MAAM;AACV,YAAA,KAAK,CAAC;gBACF,MAAM,IAAI,IAAI,CAAC;gBACf,MAAM;AACV,YAAA,KAAK,CAAC;gBACF,MAAM,IAAI,GAAG,CAAC;gBACd,MAAM;AACV,YAAA;AACI,gBAAA,MAAM,2BAA2B,CAAC;AACzC,SAAA;QAED,IAAI;AACA,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACzC,SAAA;QAAC,MAAM;AACJ,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,SAAA;KACJ;AAkCJ;;MC5EqB,qBAAqB,CAAA;IAYvC,WAAgC,CAAA,WAA6B,EAC7B,gBAAkC,EAAA;QADlC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAkB;QAC7B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;;QAVxD,IAAK,CAAA,KAAA,GAAY,KAAK,CAAC;;QAGvB,IAAe,CAAA,eAAA,GAA4B,IAAI,CAAC;;QAGhD,IAAW,CAAA,WAAA,GAAgC,IAAI,CAAC;QAChD,IAAW,CAAA,WAAA,GAAgC,IAAI,CAAC;KAIzD;IAES,UAAU,GAAA;QAChB,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjF,iBAAA;AACJ,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrF,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;IAES,cAAc,CAAC,QAAgB,EAAE,WAAoC,EAAA;AAC3E,QAAA,MAAM,mBAAmB,GAAG,CAAC,EAAE,CAAC,WAAW,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAC/E,IAAI,CAAC,mBAAmB,EAAE;AACtB,YAAA,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAA,uBAAA,CAAyB,CAAC,CAAC;AACzD,SAAA;KACJ;AAEJ;;MCzCY,kBAAkB,CAAA;AAE3B,IAAA,WAAA,CAAoB,KAAa,EACb,YAAoB,EACpB,SAAiB,EAAA;QAFjB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QACb,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAQ;QACpB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAQ;KACpC;IAED,MAAM,YAAY,CAAC,UAAsB,EAAA;;QAErC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAiE,IAAI,CAAC,SAAS,EAAE;YAC1G,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;AAClC,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO;YACH,WAAW,EAAE,IAAI,EAAE,KAAK;YACxB,YAAY,EAAE,IAAI,EAAE,aAAa;YACjC,IAAI,EAAE,IAAI,EAAE,IAAI;SACnB,CAAC;KACL;AAEJ;;MCtBY,iBAAiB,CAAA;AAE1B,IAAA,WAAA,CAAoB,MAAc,EACd,SAAiB,EACjB,SAAiB,EAAA;QAFjB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAS,CAAA,SAAA,GAAT,SAAS,CAAQ;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAQ;KACpC;IAED,MAAM,YAAY,CAAC,UAAsB,EAAA;;QAErC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAuB,IAAI,CAAC,SAAS,EAAE;YAChE,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,QAAQ,EAAE,IAAI,CAAC,SAAS;AAC3B,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO;YACH,WAAW,EAAE,IAAI,EAAE,KAAK;YACxB,YAAY,EAAE,IAAI,EAAE,aAAa;YACjC,IAAI,EAAE,IAAI,EAAE,IAAI;YAChB,QAAQ,EAAE,IAAI,EAAE,QAAQ;YACxB,WAAW,EAAE,IAAI,EAAE,YAAY;SAClC,CAAC;KACL;AAEJ;;MCtBY,WAAW,CAAA;AAyBpB,IAAA,WAAA,CAAY,OAAoD,EAAA;;AAtB/C,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;;QAOhC,IAAkB,CAAA,kBAAA,GAAkB,IAAI,CAAC;QACzC,IAAmB,CAAA,mBAAA,GAAkB,IAAI,CAAC;;QAG1C,IAAmB,CAAA,mBAAA,GAAqB,IAAI,CAAC;QAC7C,IAAoB,CAAA,oBAAA,GAAqB,IAAI,CAAC;;AAG9C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC,CAAC;;AAGvD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,WAAW,CAAC,CAAC,CAAC,CACjB,CAAC;AAwIM,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,aAAqB,EAAE,GAAW,KAAI;YACzD,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1C,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,KAAgB,KAAI;YACxC,IAAI,CAAC,KAAK,EAAE;AACR,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;YAED,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACpD,SAAC,CAAC;AA/IE,QAAA,MAAM,aAAa,GAAG,OAAO,EAAE,EAAE,IAAI,IAAI,CAAC;;QAG1C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACzE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;;QAGjE,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;;QAGzC,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO;AACH,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC;KACL;AAED,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;cAC5C,IAAI,CAAC,kBAAkB;cACvB,IAAI,CAAC;KACd;AAED,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;cAC5C,IAAI,CAAC,mBAAmB;cACxB,IAAI,CAAC;KACd;AAED,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC;KAC3C;AAED,IAAA,IAAI,mBAAmB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC;KAC5C;IAED,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KACtG;IAED,SAAS,CAAC,WAA0B,EAAE,YAA2B,EAAA;AAC7D,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC9B;AAED,IAAA,OAAO,CAAC,IAAa,EAAA;QACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;IAED,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACtB;IAEO,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO;AACV,SAAA;;AAGD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAS,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;;AAGjC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAS,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;;AAGnC,QAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACvD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAU,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAClC,SAAA;KACJ;IAEO,mBAAmB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO;AACV,SAAA;;AAGD,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAS,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC5E,gBAAA,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS;AAC/C,aAAA,CAAC,CAAC;AACN,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACrD,SAAA;;AAGD,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAS,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,mBAAmB,EAAE;AAC9E,gBAAA,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS;AAChD,aAAA,CAAC,CAAC;AACN,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACtD,SAAA;KACJ;IAEO,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO;AACV,SAAA;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrD,SAAA;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAU,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE;YACnD,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACpC,SAAA,CAAC,CAAC;KACN;AAEO,IAAA,cAAc,CAAC,KAAoB,EAAA;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,IAAI,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KACxE;AAEO,IAAA,eAAe,CAAC,KAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,IAAI,IAAI,CAAC;AACzC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KAC1E;AAcJ;;MChKY,IAAI,CAAA;AAWb,IAAA,WAAA,CAAoB,QAAiB,EACjB,SAAmB,EACnB,SAAmB,EACnB,WAAuB,EACX,OAAoB,EACpB,MAAsB,EACtB,WAAwB,EACO,QAA8B,EAAA;QAPzE,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAS;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;QACnB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;QACnB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;QACX,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACpB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAgB;QACtB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACO,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAsB;;AAf5E,QAAA,IAAA,CAAA,aAAa,GAAyB,YAAY,CAAC,CAAA,cAAA,CAAgB,CAAC,CAAC;QACrE,IAAU,CAAA,UAAA,GAAkB,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,IAAI,CAAC;QAK5E,IAAe,CAAA,eAAA,GAAkB,IAAI,CAAC;;;AAY1C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS;cAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,wEAA2C,CAAC;AACnE,cAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;;AAG3B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC;AAC3B,YAAA,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa;AAC/B,YAAA,OAAO,EAAE,eAAe;AAC3B,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;KACjC;IAED,UAAU,GAAA;QACN,OAAO,YAAW;;YAEd,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;YACxD,IAAI,CAAC,eAAe,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACtC,aAAA;;AAGD,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE;gBAC/B,OAAO;AACV,aAAA;;AAGD,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AACxD,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;gBAChE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;;AAGD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACxB,YAAA,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC,CAAC;;YAG/D,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,IAAI,CAAC,MAAM,EAAE,GAAG,CAAM,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;AAC3D,aAAA;;AAGD,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC,SAAC,CAAC;KACL;IAED,EAAE,GAAA;QACE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;KACvC;AAED,IAAA,MAAM,MAAM,CAAC,QAAsB,EAAE,EAAa,EAAA;QAC9C,MAAM,EAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,MAAM,EAAC,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGnG,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;QAC9E,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AACpC,SAAA;;;AAID,QAAA,MAAM,WAAW,GAAG,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC;AAC7C,QAAA,MAAM,cAAc,GAAG,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;AACnD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/E,QAAA,IAAI,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAC1C,OAA2B,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAC,CAAC;AACzF,SAAA;;AAGD,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;;AAG1C,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;QAG3B,OAA2B,EAAC,IAAI,EAAC,CAAC;KACrC;AAED,IAAA,MAAM,eAAe,CAAC,KAAa,EAAE,QAAgB,EAAE,EAAa,EAAA;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;KACvE;AAED,IAAA,MAAM,oBAAoB,CAAC,IAAY,EAAE,WAAmB,EAAA;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACvC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;KACtE;IAED,MAAM,gBAAgB,CAAC,WAAmB,EAAA;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE;AACvC,YAAA,YAAY,EAAE,WAAW;AAC5B,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;KAClC;AAED,IAAA,MAAM,QAAQ,CAAU,IAAS,EAAE,OAOlC,EAAA;;QAEG,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAsD,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/G,QAAA,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;;QAG7C,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;;AAGrD,QAAA,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAG3B,QAAA,OAAU,IAAI,CAAC;KAClB;IAED,MAAM,GAAA;;;;AAIF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,YAAY,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,SAAA;;;QAID,IAAI;YACA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,eAAe,CAAC;YACjE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE;AAC1C,gBAAA,OAAO,EAAE,EAAC,CAAC,UAAU,GAAG,YAAY,EAAC;AACxC,aAAA,CAAC,CAAC;YACH,cAAc,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,SAAA;QAAC,MAAM;;AAEP,SAAA;;AAGD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;KAC/B;IAED,OAAO,GAAA;;;AAGH,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,YAAY,EAAE;AACf,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AACnB,SAAA;;QAGD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,eAAe,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,QAAQ,CAAC;QAEtD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAEhE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAA2C,GAAG,EAAE;YACvE,OAAO,EAAE,EAAC,CAAC,UAAU,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,EAAC;AACpD,YAAA,OAAO,EAAE,OAAO;AACnB,SAAA,CAAC,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,EAAC,KAAK,EAAE,aAAa,EAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,EACrE,GAAG,CAAC,CAAC,EAAC,KAAK,EAAC,KAAK,KAAK,CAAC,CAC1B,CAAC;KACL;AAED,IAAA,MAAM,eAAe,CAAC,KAAa,EAAE,cAAsC,EAAE,EAAA;QACzE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,EAAC,GAAG,WAAW,EAAE,KAAK,EAAC,CAAC,CAAC;AACxE,QAAA,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;KACtC;IAED,MAAM,aAAa,CAAC,KAAa,EAAE,WAAmB,EAAE,cAAsC,EAAE,EAAA;QAC5F,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,EAAC,GAAG,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAC,CAAC,CAAC;AAC/F,QAAA,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;KACtC;IAED,gBAAgB,GAAA;;AAEZ,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,EAAE;gBAC9B,OAAO;AACV,aAAA;AAED,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,OAAO;AACV,SAAA;;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC;;AAGpE,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC;AAC1E,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,SAAA;KACJ;IAEO,SAAS,CAAC,WAAmB,EAAE,YAAoB,EAAA;;QAEvD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;;QAGlD,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;IAEO,oBAAoB,GAAA;QACxB,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC;QAC7D,IAAI,CAAC,iBAAiB,EAAE;YACpB,OAAO;AACV,SAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,SAAS,IAAI,IAAI,CAAC;QACtE,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YACjD,OAAO;AACV,SAAA;QAED,MAAM,wBAAwB,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAClE,QAAA,MAAM,oBAAoB,GAAG,KAAM,CAAC;;AAGpC,QAAA,MAAM,YAAY,GAAG,wBAAwB,GAAG,oBAAoB,CAAC;QACrE,IAAI,YAAY,IAAI,CAAC,EAAE;YACnB,OAAO;AACV,SAAA;;;QAID,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;QACpE,IAAI;AACA,YAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;AAC/B,gBAAA,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC/B,aAAA;AACD,YAAA,IAAI,CAAC,eAAe,GAAG,MAAM,EAAE,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;AACvF,SAAA;QAAC,MAAM;;AAEP,SAAA;KACJ;AAEO,IAAA,MAAM,WAAW,GAAA;QACrB,IAAI;;AAEA,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAChC,YAAA,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,SAAA;QAAC,MAAM;;YAEJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC3B,SAAA;KACJ;AAED,IAAA,IAAY,MAAM,GAAA;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KACrC;AAEO,IAAA,MAAM,CAAC,QAAgB,EAAA;AAC3B,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;aAC7B,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC;aACtB,IAAI,CAAC,GAAG,CAAC,CAAC;KAClB;;AAnSQ,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAI,iPAkBmB,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qGAlB5C,IAAI,EAAA,CAAA,CAAA;2FAAJ,IAAI,EAAA,UAAA,EAAA,CAAA;kBADhB,UAAU;;0BAgBM,QAAQ;;0BACR,QAAQ;;0BACR,QAAQ;;0BACR,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB,CAAA;;;AC1BnD,MAAO,eAAgB,SAAQ,qBAAqB,CAAA;AAYtD,IAAA,WAAA,CAAoB,KAAW,EACX,YAA8B,EAC9B,iBAAmC,EAAA;AACnD,QAAA,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAHvB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAM;QACX,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAC9B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAkB;;AAX/C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;KAa1C;IAXD,IACI,mBAAmB,CAAC,WAA6B,EAAA;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAQD,QAAQ,GAAA;AACJ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CACrC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EACnB,oBAAoB,EAAE,CACzB,CAAC,SAAS,CAAC,KAAK,IAAG;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;AACtB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACxC;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;KACrC;;4GA/BQ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;gGAAf,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAChC,iBAAA,CAAA;iJAOO,mBAAmB,EAAA,CAAA;sBADtB,KAAK;;;MCLG,WAAW,CAAA;IAKpB,WAAoB,CAAA,KAAW,EACC,OAAoB,EAAA;QADhC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAM;QACC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;;QAHnC,IAAkB,CAAA,kBAAA,GAAoC,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;KAIxG;IAED,GAAG,CAAC,KAAwB,EAAE,OAA2B,EAAA;QACrD,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AAC/D,QAAA,IAAI,mBAAmB,EAAE,MAAM,IAAI,CAAC,EAAE;AAClC,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACpB,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CACvB,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EACnE,oBAAoB,EAAE,CACzB,CAAC;KACL;IAED,OAAO,CAAC,KAAwB,EAAE,OAA2B,EAAA;QACzD,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AAC/D,QAAA,IAAI,mBAAmB,EAAE,MAAM,IAAI,CAAC,EAAE;AAClC,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;QACzD,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;KACjE;AAEO,IAAA,aAAa,CAAC,mBAA6B,EAAE,IAAS,EAAE,OAA2B,EAAA;AACvF,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACjE,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC;AACpC,QAAA,QAAQ,IAAI;AACR,YAAA,KAAK,IAAI;gBACL,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AACxD,YAAA,KAAK,KAAK,CAAC;AACX,YAAA;gBACI,OAAO,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AAC5D,SAAA;KACJ;IAEO,aAAa,CAAC,WAAqB,EAAE,IAAY,EAAA;AACrD,QAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AAClC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;IAEO,YAAY,CAAC,WAAqB,EAAE,IAAY,EAAA;AACpD,QAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AAClC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACzE,YAAA,IAAI,QAAQ,EAAE;AACV,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KAChB;AAEO,IAAA,sBAAsB,CAAC,KAAwB,EAAA;AACnD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACvB,cAAE,KAAK;AACP,cAAE,CAAC,KAAK,CAAC,CAAC;KACjB;;wGAxEQ,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAX,WAAW,EAAA,CAAA,CAAA;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;;0BAOM,QAAQ;;;ACLnB,MAAO,YAAa,SAAQ,qBAAqB,CAAA;AA4BnD,IAAA,WAAA,CAAoB,YAAyB,EACzB,YAA8B,EAC9B,iBAAmC,EAAA;AACnD,QAAA,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAHvB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAa;QACzB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAkB;QAC9B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAkB;;AA3B/C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAW,EAAE,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAiB,KAAK,CAAC,CAAC;;AAsBpD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;KAM1C;IA1BD,IACI,YAAY,CAAC,KAAwB,EAAA;AACrC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAED,IACI,gBAAgB,CAAC,WAA6B,EAAA;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAED,IACI,gBAAgB,CAAC,IAAoB,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC1B;IAWD,QAAQ,GAAA;QACJ,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC/D,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,EAAC,IAAI,EAAC,CAAC,CAAC,EAC9E,oBAAoB,EAAE,CACzB,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AAC1C,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;AACtB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACxC;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;KACrC;;yGAjDQ,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;6FAAZ,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC7B,iBAAA,CAAA;wJAQO,YAAY,EAAA,CAAA;sBADf,KAAK;gBAQF,gBAAgB,EAAA,CAAA;sBADnB,KAAK;gBAQF,gBAAgB,EAAA,CAAA;sBADnB,KAAK;;;MC1BG,cAAc,CAAA;AAEvB,IAAA,WAAA,CAAoB,KAA6C,EAAA;QAA7C,IAAK,CAAA,KAAA,GAAL,KAAK,CAAwC;KAChE;IAED,MAAM,CAAC,UAA+B,EAAE,IAAO,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE;YACxE,OAAO,EAAE,IAAI,GAAG,6CAA6C,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC;AAC1E,SAAA;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtD,QAAA,OAAO,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;KACpD;IAED,aAAa,CAAC,UAA+B,EAAE,IAAY,EAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;KACxC;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;AAChB,QAAA,OAAO,IAAI,GAAG,MAAM,CAAM,IAAI,IAAI,CAAC;KACtC;IAED,OAAO,QAAQ,CAAC,IAA8B,EAAA;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5C,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,MAAM;AACrD,YAAA,GAAG,QAAQ;YACX,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;SAC7B,CAAC,EAAE,EAAE,CAAC,CAAC;QACR,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAExC,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAI;YAC3D,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,GAAG,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAEhG,OAAO,EAAC,GAAG,QAAQ,EAAE,CAAC,OAAO,GAAG,eAAe,EAAC,CAAC;SACpD,EAAE,EAAE,CAAC,CAAC;AAEP,QAAA,OAAO,IAAI,cAAc,CAAiB,aAAa,CAAC,CAAC;KAC5D;AAEJ;;MClCY,gBAAgB,CAAA;AAEzB,IAAA,WAAA,CAAoB,KAAW,EACX,OAAe,EACH,OAAoB,EACW,QAA8B,EAAA;QAHzE,IAAK,CAAA,KAAA,GAAL,KAAK,CAAM;QACX,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;QACH,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACW,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAsB;KAC5F;IAED,WAAW,CAAC,QAAgC,EAAE,KAA0B,EAAA;QACpE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CACvB,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EACnB,GAAG,CAAC,eAAe,IAAG;YAClB,IAAI,CAAC,eAAe,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3D,aAAA;;;YAID,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,IAAI,IAAI,CAAC;YAC/D,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AAED,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,SAAC,CAAC,EACF,KAAK,EAAE,CACV,CAAC;KACL;IAED,gBAAgB,CAAC,UAAkC,EAAE,KAA0B,EAAA;QAC3E,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KAC9C;;AApCQ,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kGAKO,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAL5C,gBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFb,MAAM,EAAA,CAAA,CAAA;2FAET,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;0BAKgB,QAAQ;;0BACR,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB,CAAA;;;MCL5C,oBAAoB,CAAA;AAE7B,IAAA,WAAA,CAAoB,KAAW,EACX,OAAe,EACH,OAAoB,EACW,QAA8B,EAAA;QAHzE,IAAK,CAAA,KAAA,GAAL,KAAK,CAAM;QACX,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;QACH,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACW,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAsB;KAC5F;IAED,WAAW,CAAC,QAAgC,EAAE,KAA0B,EAAA;QACpE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CACvB,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EACnB,GAAG,CAAC,eAAe,IAAG;AAClB,YAAA,IAAI,eAAe,EAAE;AACjB,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,OAAO,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC/D,aAAA;;;YAID,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,IAAI,IAAI,CAAC;YACjE,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;YAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,OAAO,EAAE,uBAAuB,IAAI,IAAI,CAAC;AAC9E,YAAA,MAAM,WAAW,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC;AACvC,YAAA,MAAM,WAAW,GAAG,uBAAuB,IAAI,WAAW,GAAG,EAAC,WAAW,EAAC,GAAG,EAAE,CAAC;AAChF,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9D,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAC,WAAW,EAAC,CAAC,CAAC;AAC/D,SAAC,CAAC,EACF,KAAK,EAAE,CACV,CAAC;KACL;IAED,gBAAgB,CAAC,UAAkC,EAAE,KAA0B,EAAA;QAC3E,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KAC9C;;AAvCQ,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kGAKG,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAL5C,oBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFjB,MAAM,EAAA,CAAA,CAAA;2FAET,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;0BAKgB,QAAQ;;0BACR,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB,CAAA;;;MCF5C,iBAAiB,CAAA;AAE1B,IAAA,WAAA,CAAoB,OAAe,EACf,YAAyB,EACb,OAAoB,EACW,QAA8B,EAAA;QAHzE,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;QACf,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAa;QACb,IAAO,CAAA,OAAA,GAAP,OAAO,CAAa;QACW,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAsB;KAC5F;IAED,WAAW,CAAC,QAAgC,EAAE,KAA0B,EAAA;QACpE,MAAM,UAAU,GAAG,QAAQ,EAAE,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACrD,OAAO,WAAW,CAAC,IAAI,CACnB,GAAG,CAAC,KAAK,IAAG;AACR,YAAA,IAAI,KAAK,EAAE;AACP,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC5D,aAAA;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,gBAAgB,IAAI,IAAI,CAAC;YAClE,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;AAED,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9D,YAAA,OAAO,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;SAC9D,CAAC,CACL,CAAC;KACL;IAED,gBAAgB,CAAC,UAAkC,EAAE,KAA0B,EAAA;QAC3E,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KAC9C;AAEO,IAAA,eAAe,CAAC,IAAmF,EAAA;AACvG,QAAA,IAAI,CAAC,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,MAAM,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;AAC1F,YAAA,OAAO,EAAE,IAAI,GAAG,CAAA,yCAAA,CAA2C,CAAC,CAAC;AAC7D,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACpB,SAAA;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YACjD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;KAC5D;;AA/CQ,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,yGAKM,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAL5C,iBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFd,MAAM,EAAA,CAAA,CAAA;2FAET,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;0BAKgB,QAAQ;;0BACR,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB,CAAA;;;MCR5C,eAAe,CAAA;IAUxB,WAAoB,CAAA,KAAW,EACC,OAAmB,EAAA;QAD/B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAM;QACC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAY;;QARlC,IAAiB,CAAA,iBAAA,GAAW,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,eAAe,CAAC;QAC1E,IAAW,CAAA,WAAA,GAAW,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,QAAQ,CAAC;;QAG9E,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;AAC9B,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC,CAAC;AAkE1D,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,OAA6B,KAAI;;YAEvD,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;gBAC7C,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACtD,aAAA;;AAGD,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1C,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,OAA6B,EAAE,WAA6B,GAAA,IAAI,KAAI;;;YAGlG,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,OAAO,CAAC,KAAK,CAAC;oBACjB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC1D,iBAAA,CAAC,CAAC;AACN,aAAA;;YAGD,OAAO,OAAO,CAAC,KAAK,CAAC;AACjB,gBAAA,UAAU,EAAE,EAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,CAAI,CAAA,EAAA,WAAW,EAAE,EAAC;AAC/E,aAAA,CAAC,CAAC;AACP,SAAC,CAAC;KArFD;IAED,SAAS,CAAC,OAA6B,EAAE,IAAiB,EAAA;;QAEtD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/B,SAAA;;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;;AAGrE,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAC/B,UAAU,CAAC,KAAK,IAAG;;AAEf,YAAA,IAAI,CAAC,KAAK,YAAY,iBAAiB,IAAI,KAAK,YAAY,SAAS,KAAK,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE;gBAC7F,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7C,aAAA;;AAGD,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;SAClC,CAAC,CACL,CAAC;KACL;IAEO,cAAc,CAAC,OAA6B,EAAE,IAAiB,EAAA;;QAEnE,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CACnC,MAAM,CAAC,WAAW,IAAI,WAAW,KAAK,IAAI,CAAC,EAC3C,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAC3F,CAAC;AACL,SAAA;;AAGD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEvC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAC5B,SAAS,CAAC,cAAc,IAAG;YACvB,IAAI,CAAC,cAAc,EAAE;gBACjB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;AACzE,aAAA;AAED,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACjD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;SAC5E,CAAC,EACF,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EACnC,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAC5C,CAAC;KACL;IAEO,UAAU,GAAA;;AAEd,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;;AAG9B,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;KACnB;;4GAxEQ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;gHAAf,eAAe,EAAA,CAAA,CAAA;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;0BAYM,QAAQ;;;ACZzB,MAAM,oBAAoB,GAAG;IACzB,eAAe;IACf,YAAY;CACf,CAAC;MAOW,UAAU,CAAA;IAEnB,OAAO,OAAO,CAAC,MAAkB,EAAA;QAC7B,OAAO;AACH,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,SAAS,EAAE;gBACP,IAAI;gBACJ,WAAW;AACX,gBAAA,EAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAC;gBACvC,EAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAC;AACpE,gBAAA,EAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAC;AACpF,aAAA;SACJ,CAAC;KACL;;uGAbQ,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,iBATnB,eAAe;QACf,YAAY,CAAA,EAAA,OAAA,EAAA,CAIF,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAL1B,eAAe;QACf,YAAY,CAAA,EAAA,CAAA,CAAA;AAQH,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,YAJT,gBAAgB,CAAA,EAAA,CAAA,CAAA;2FAIjB,UAAU,EAAA,UAAA,EAAA,CAAA;kBALtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,oBAAA,YAAY,EAAE,CAAC,GAAG,oBAAoB,CAAC;AACvC,oBAAA,OAAO,EAAE,CAAC,GAAG,oBAAoB,CAAC;AACrC,iBAAA,CAAA;;AAkBK,SAAU,cAAc,CAAC,IAAU,EAAA;AACrC,IAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7B;;ACtCA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"bravobit-bb-foundation-auth.mjs","sources":["../../../projects/bb-foundation/auth/src/lib/interfaces/config.interface.ts","../../../projects/bb-foundation/auth/src/lib/tokens/use-authorization.token.ts","../../../projects/bb-foundation/auth/src/lib/helpers/jwt.helper.ts","../../../projects/bb-foundation/auth/src/lib/directives/abstract.directive.ts","../../../projects/bb-foundation/auth/src/lib/providers/verify.provider.ts","../../../projects/bb-foundation/auth/src/lib/providers/email.provider.ts","../../../projects/bb-foundation/auth/src/lib/auth.session.ts","../../../projects/bb-foundation/auth/src/lib/auth.service.ts","../../../projects/bb-foundation/auth/src/lib/directives/authenticated.directive.ts","../../../projects/bb-foundation/auth/src/lib/guards/anonymous.guard.ts","../../../projects/bb-foundation/auth/src/lib/guards/authenticated.guard.ts","../../../projects/bb-foundation/auth/src/lib/auth.interceptor.ts","../../../projects/bb-foundation/auth/src/lib/auth.module.ts","../../../projects/bb-foundation/auth/src/bravobit-bb-foundation-auth.ts"],"sourcesContent":["import {ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree} from '@angular/router';\nimport {InjectionToken} from '@angular/core';\n\nexport class AuthConfig {\n applicationId: string;\n\n http?: {\n scheme?: string,\n header?: string\n };\n\n redirects?: {\n authenticated?: string | string[];\n unauthenticated?: string | string[];\n };\n setRedirectOnFailedAuth?: boolean;\n\n bootstrap?: boolean;\n providers?: string[];\n autoRefresh?: boolean;\n}\n\nexport const AUTH_REDIRECT_HANDLER = new InjectionToken<AuthRedirectHandler>('auth redirect handler');\n\nexport interface AuthRedirectHandler {\n\n onFailedAuthenticated(snapshot?: ActivatedRouteSnapshot, state?: RouterStateSnapshot): boolean | UrlTree;\n onFailedAnonymous(snapshot?: ActivatedRouteSnapshot, state?: RouterStateSnapshot): boolean | UrlTree;\n\n}\n","import {HttpContextToken} from '@angular/common/http';\n\nexport const USE_AUTHORIZATION = new HttpContextToken(() => true);","import {AuthToken} from '../interfaces/token.interface';\n\nexport class JwtHelper {\n\n decode(token: string) {\n try {\n if (token === null || token === undefined) {\n return null;\n }\n\n const json = JSON.parse(\n this.urlDecode(token.split('.')[1])\n );\n\n return this.parse(json);\n } catch {\n return null;\n }\n }\n\n private urlDecode(token: string | null) {\n const value = token || '';\n let output = value\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += '==';\n break;\n case 3:\n output += '=';\n break;\n default:\n throw 'Illegal base64url string!';\n }\n\n try {\n return this.baseDecodeUnicode(output);\n } catch {\n return atob(output);\n }\n }\n\n private baseDecodeUnicode = (value: string) => {\n return decodeURIComponent(atob(value).replace(/(.)/g, (_, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = '0' + code;\n }\n return '%' + code;\n }));\n };\n\n private parse = (data: object) => {\n return {\n id: data['iss'] ?? null,\n type: data['typ'] ?? null,\n audience: data['aud'] ?? null,\n issuer: data['iss'] ?? null,\n subject: data['sub'] ?? null,\n role: data['role'] ?? null,\n notValidBefore: this.parseDate(data['nbf']),\n expiresAt: this.parseDate(data['exp']),\n issuedAt: this.parseDate(data['iat'])\n } as AuthToken;\n };\n\n private parseDate = (epochInSeconds: number) => {\n if (!epochInSeconds || epochInSeconds <= 0) {\n return null;\n }\n\n return new Date(epochInSeconds * 1000);\n };\n\n}\n","import {EmbeddedViewRef, TemplateRef, ViewContainerRef} from '@angular/core';\n\nexport abstract class AbstractAuthDirective {\n\n // Data.\n protected valid: boolean = false;\n\n // Templates.\n protected elseTemplateRef: TemplateRef<any> | null = null;\n\n // View refs.\n protected thenViewRef: EmbeddedViewRef<any> | null = null;\n protected elseViewRef: EmbeddedViewRef<any> | null = null;\n\n protected constructor(protected templateRef: TemplateRef<any>,\n protected viewContainerRef: ViewContainerRef) {\n }\n\n protected updateView() {\n if (this.valid) {\n if (!this.thenViewRef) {\n this.viewContainerRef.clear();\n this.elseViewRef = null;\n if (this.templateRef) {\n this.thenViewRef = this.viewContainerRef.createEmbeddedView(this.templateRef);\n }\n }\n } else {\n if (!this.elseViewRef) {\n this.viewContainerRef.clear();\n this.thenViewRef = null;\n if (this.elseTemplateRef) {\n this.elseViewRef = this.viewContainerRef.createEmbeddedView(this.elseTemplateRef);\n }\n }\n }\n }\n\n protected assertTemplate(property: string, templateRef: TemplateRef<any> | null) {\n const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n if (!isTemplateRefOrNull) {\n throw new Error(`${property} must be a TemplateRef.`);\n }\n }\n\n}\n","import {AuthProvider, AuthProviderResponse, AuthProviderResult} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\nimport {firstValueFrom} from 'rxjs';\n\nexport class AuthVerifyProvider implements AuthProvider {\n\n constructor(private _code: string,\n private _verifyToken: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient): Promise<AuthProviderResult> {\n // Execute API call.\n const data$ = httpClient.post<Pick<AuthProviderResponse, 'token' | 'refresh_token' | 'user'>>(this._endpoint, {\n token: this._code,\n verify_token: this._verifyToken\n });\n\n const data = await firstValueFrom(data$);\n return {\n accessToken: data?.token,\n refreshToken: data?.refresh_token,\n user: data?.user\n };\n }\n\n}\n","import {AuthProvider, AuthProviderResponse, AuthProviderResult} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\nimport {firstValueFrom} from 'rxjs';\n\nexport class AuthEmailProvider implements AuthProvider {\n\n constructor(private _email: string,\n private _password: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient): Promise<AuthProviderResult> {\n // Execute API call.\n const data$ = httpClient.post<AuthProviderResponse>(this._endpoint, {\n email: this._email,\n password: this._password\n });\n\n const data = await firstValueFrom(data$);\n return {\n accessToken: data?.token,\n refreshToken: data?.refresh_token,\n user: data?.user,\n provider: data?.provider,\n verifyToken: data?.verify_token\n };\n }\n\n}\n","import {StorageStrategy} from '@bravobit/bb-foundation/storage';\nimport {AuthToken} from './interfaces/token.interface';\nimport {JwtHelper} from './helpers/jwt.helper';\nimport {shareReplay} from 'rxjs/operators';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class AuthSession {\n\n // Readonly data.\n private readonly _jwt = new JwtHelper();\n private readonly _storage: StorageStrategy | null;\n private readonly _accessTokenStorageKey: string;\n private readonly _refreshTokenStorageKey: string;\n private readonly _userStorageKey: string;\n\n // Token strings.\n private _accessTokenString: string | null = null;\n private _refreshTokenString: string | null = null;\n\n // Token payloads.\n private _accessTokenPayload: AuthToken | null = null;\n private _refreshTokenPayload: AuthToken | null = null;\n\n // Private user data.\n private _user$ = new BehaviorSubject<any | null>(null);\n\n // Public user data.\n user = this._user$.pipe(\n shareReplay(1)\n );\n\n constructor(options?: { id?: string, storage?: StorageStrategy }) {\n const applicationId = options?.id ?? 'ng';\n\n // Setting up the readonly storage keys.\n this._accessTokenStorageKey = this.generateKey(applicationId, 'au_act');\n this._refreshTokenStorageKey = this.generateKey(applicationId, 'au_rft');\n this._userStorageKey = this.generateKey(applicationId, 'au_usr');\n\n // Setting up the storage.\n this._storage = options?.storage ?? null;\n\n // Init methods.\n this.restoreFromStorage();\n }\n\n get snapshot() {\n return {\n user: this._user$.getValue(),\n accessToken: this.accessToken,\n refreshToken: this.refreshToken\n };\n }\n\n get accessToken() {\n return this.isTokenValid(this._accessTokenPayload)\n ? this._accessTokenString\n : null;\n }\n\n get refreshToken() {\n return this.isTokenValid(this.refreshTokenPayload)\n ? this._refreshTokenString\n : null;\n }\n\n get accessTokenPayload() {\n return this._accessTokenPayload ?? null;\n }\n\n get refreshTokenPayload() {\n return this._refreshTokenPayload ?? null;\n }\n\n authenticated() {\n return this.isTokenValid(this._accessTokenPayload) || this.isTokenValid(this._refreshTokenPayload);\n }\n\n setTokens(accessToken: string | null, refreshToken: string | null) {\n this.setAccessToken(accessToken);\n this.setRefreshToken(refreshToken);\n this.syncTokensInStorage();\n }\n\n setUser(user: unknown) {\n this._user$.next(user ?? null);\n this.syncUserInStorage();\n }\n\n clear() {\n this.setTokens(null, null);\n this.setUser(null);\n }\n\n private restoreFromStorage() {\n if (!this._storage) {\n return;\n }\n\n // Set the access token.\n const accessToken = this._storage.get<string>(this._accessTokenStorageKey);\n this.setAccessToken(accessToken);\n\n // Set the refresh token.\n const refreshToken = this._storage.get<string>(this._refreshTokenStorageKey);\n this.setRefreshToken(refreshToken);\n\n // Set the user if we have any correct token payloads.\n if (this._accessTokenPayload || this._refreshTokenPayload) {\n const user = this._storage.get<unknown>(this._userStorageKey);\n this._user$.next(user ?? null); // Note: just settings here instead of setUser() because of syncing to the storage.\n }\n }\n\n private syncTokensInStorage() {\n if (!this._storage) {\n return;\n }\n\n // Set the access token if completely valid.\n if (!!this.accessToken) {\n this._storage.set<string>(this._accessTokenStorageKey, this._accessTokenString, {\n expires: this._accessTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._accessTokenStorageKey);\n }\n\n // Set the refresh token if completely valid.\n if (!!this.refreshToken) {\n this._storage.set<string>(this._refreshTokenStorageKey, this._refreshTokenString, {\n expires: this._refreshTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._refreshTokenStorageKey);\n }\n }\n\n private syncUserInStorage() {\n if (!this._storage) {\n return;\n }\n\n const user = this._user$.getValue();\n if (!user) {\n return this._storage.remove(this._userStorageKey);\n }\n\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n this._storage.set<unknown>(this._userStorageKey, user, {\n expires: new Date(date.getTime())\n });\n }\n\n private setAccessToken(value: string | null) {\n this._accessTokenString = value ?? null;\n this._accessTokenPayload = this._jwt.decode(this._accessTokenString);\n }\n\n private setRefreshToken(value: string | null) {\n this._refreshTokenString = value ?? null;\n this._refreshTokenPayload = this._jwt.decode(this._refreshTokenString);\n }\n\n private generateKey = (applicationId: string, key: string) => {\n return [applicationId, key].join('_');\n };\n\n private isTokenValid = (token: AuthToken) => {\n if (!token) {\n return false;\n }\n\n return token?.expiresAt?.getTime() > Date.now();\n };\n\n}\n","import {AUTH_REDIRECT_HANDLER, AuthConfig, AuthRedirectHandler} from './interfaces/config.interface';\nimport {HttpClient, HttpContext, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {AuthProvider, AuthSignInResponse} from './interfaces/provider.interface';\nimport {makeStateKey, StateKey, TransferState} from '@angular/platform-browser';\nimport {Storage, StorageOption} from '@bravobit/bb-foundation/storage';\nimport {Inject, Injectable, Injector, Optional} from '@angular/core';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {AuthVerifyProvider} from './providers/verify.provider';\nimport {AuthEmailProvider} from './providers/email.provider';\nimport {HttpConfig} from '@bravobit/bb-foundation/http';\nimport {firstValueFrom, Observable, of} from 'rxjs';\nimport {Platform} from '@angular/cdk/platform';\nimport {AuthSession} from './auth.session';\nimport {map, tap} from 'rxjs/operators';\nimport {Router} from '@angular/router';\n\n@Injectable()\nexport class Auth {\n\n // Readonly data.\n private readonly _authStateKey: StateKey<any | null> = makeStateKey(`bbAuthStateKey`);\n private readonly _httpAlias: string | null = this._httpConfig?.defaultAlias ?? null;\n\n readonly session: AuthSession;\n readonly user: Observable<any | null>;\n\n private _refreshHandler: number | null = null;\n\n constructor(private _storage: Storage,\n private _injector: Injector,\n private _platform: Platform,\n private _httpClient: HttpClient,\n @Optional() private _config?: AuthConfig,\n @Optional() private _state?: TransferState,\n @Optional() private _httpConfig?: HttpConfig,\n @Optional() @Inject(AUTH_REDIRECT_HANDLER) private _handler?: AuthRedirectHandler) {\n // We select a storage strategy based on the server/browser.\n // Only cookies CAN work on the server.\n const storageStrategy = this._platform.isBrowser\n ? this._storage.select([StorageOption.Cookie, StorageOption.Local])\n : this._storage.cookie;\n\n // Starting the new session.\n this.session = new AuthSession({\n id: this._config?.applicationId,\n storage: storageStrategy\n });\n this.user = this.session.user;\n }\n\n initialize() {\n return async () => {\n // Check if the app should bootstrap the authentication.\n const shouldBootstrap = this._config?.bootstrap ?? true;\n if (!shouldBootstrap) {\n return this.handleAutoRefreshing();\n }\n\n // Only retrieve from the server when we are actually authenticated.\n if (!this.session.authenticated()) {\n return;\n }\n\n // Get the key from the server state.\n if (this._state && this._state?.hasKey(this._authStateKey)) {\n const user = this._state?.get(this._authStateKey, null) ?? null;\n return this.session.setUser(user);\n }\n\n // Try to fetch the user from the server.\n const user$ = this.me();\n const user = await firstValueFrom(user$, {defaultValue: null});\n\n // Set the state if exists.\n if (this._state) {\n this._state?.set<any>(this._authStateKey, user ?? null);\n }\n\n // Save the user in the storage and handle auto refreshing.\n this.session.setUser(user);\n this.handleAutoRefreshing();\n };\n }\n\n me<T = any>() {\n const url = this.getUrl('auth/me');\n return this._httpClient.get<T>(url);\n }\n\n async signIn(provider: AuthProvider, as?: string[]) {\n const {accessToken, refreshToken, user, ...result} = await provider.authenticate(this._httpClient);\n\n // Check if the role matches.\n const role = user?.role ?? null;\n if (as && !as.includes(role)) {\n throw new Error('Invalid role.');\n }\n\n // Validate if the provider is one of the available\n // providers then return the user object and the provider.\n const apiProvider = result?.provider ?? null;\n const apiVerifyToken = result?.verifyToken ?? null;\n const availableProviders = this._config?.providers ?? ['email', 'sms', 'totp'];\n if (availableProviders.includes(apiProvider)) {\n return <AuthSignInResponse>{user, provider: apiProvider, verifyToken: apiVerifyToken};\n }\n\n // Set the tokens in storage.\n this.setTokens(accessToken, refreshToken);\n\n // Set the user in storage.\n this.session.setUser(user);\n\n // Return the user.\n return <AuthSignInResponse>{user};\n }\n\n async signInWithEmail(email: string, password: string, as?: string[]) {\n const url = this.getUrl('auth/login');\n return this.signIn(new AuthEmailProvider(email, password, url), as);\n }\n\n async signInWithVerifyCode(code: string, verifyToken: string) {\n const url = this.getUrl('auth/verify');\n return this.signIn(new AuthVerifyProvider(code, verifyToken, url));\n }\n\n async resendVerifyCode(verifyToken: string) {\n const url = this.getUrl('auth/resend');\n const result$ = this._httpClient.post(url, {\n verify_token: verifyToken\n });\n\n return firstValueFrom(result$);\n }\n\n async register<T = any>(data: any, options?: {\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n params?: HttpParams | {\n [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n };\n }) {\n // Execute API call.\n const url = this.getUrl('auth/register');\n const result$ = this._httpClient.post<{ token: string, refresh_token: string, user: any }>(url, data, options);\n const result = await firstValueFrom(result$);\n\n // Set the tokens in storage.\n this.setTokens(result?.token, result?.refresh_token);\n\n // Set the user in storage.\n const user = result?.user;\n this.session.setUser(user);\n\n // Return the user.\n return <T>user;\n }\n\n logout() {\n // If we don't have a refresh token just clear the session.\n // Note: We do this because else we try to invalidate\n // an \"undefined\" refresh token.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken) {\n return this.session.clear();\n }\n\n // We do have a refresh token, so try to\n // invalidate it in the backend.\n try {\n const url = this.getUrl('auth/logout');\n const headerName = this._config?.http?.header ?? 'Authorization';\n const observable$ = this._httpClient.get(url, {\n headers: {[headerName]: refreshToken}\n });\n firstValueFrom(observable$).then(_ => _).catch(_ => _);\n } catch {\n // Do nothing because the tokens will be deleted anyways from the session.\n }\n\n // Delete the tokens from the session.\n return this.session.clear();\n }\n\n refresh() {\n // If the refresh token does\n // not exist just return an observable of null.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken) {\n return of(null);\n }\n\n // Perform the refresh call.\n const headerName = this._config?.http?.header ?? 'Authorization';\n const scheme = this._config?.http?.scheme ?? 'Bearer';\n\n const url = this.getUrl('auth/refresh');\n const context = new HttpContext().set(USE_AUTHORIZATION, false);\n\n return this._httpClient.get<{ token: string, refresh_token: string }>(url, {\n headers: {[headerName]: `${scheme} ${refreshToken}`},\n context: context\n }).pipe(\n tap(({token, refresh_token}) => this.setTokens(token, refresh_token)),\n map(({token}) => token)\n );\n }\n\n async requestPassword(email: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset');\n const observable$ = this._httpClient.post(url, {...extraParams, email});\n return firstValueFrom(observable$);\n }\n\n async resetPassword(token: string, newPassword: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset-password');\n const observable$ = this._httpClient.post(url, {...extraParams, token, password: newPassword});\n return firstValueFrom(observable$);\n }\n\n clearAndRedirect() {\n // 1. Delete the tokens from the session.\n this.session.clear();\n\n if (this._handler) {\n const urlTree = this._handler.onFailedAuthenticated();\n if (!urlTree || urlTree === true) {\n return;\n }\n\n this.router.navigateByUrl(urlTree).then(_ => _);\n return;\n }\n\n // 2. Compose the route url.\n const redirectUrl = this._config?.redirects.unauthenticated ?? null;\n\n // 3. Route back if the user provided a redirect url.\n if (this.router && redirectUrl) {\n const commands = Array.isArray(redirectUrl) ? redirectUrl : [redirectUrl];\n this.router.navigate(commands).then(_ => _);\n }\n }\n\n private setTokens(accessToken: string, refreshToken: string) {\n // Set the tokens in our session.\n this.session.setTokens(accessToken, refreshToken);\n\n // We need to update the auto refresh of the refresh token.\n this.handleAutoRefreshing();\n }\n\n private handleAutoRefreshing() {\n const shouldAutoRefresh = this._config?.autoRefresh ?? false;\n if (!shouldAutoRefresh) {\n return;\n }\n\n const expiresAt = this.session.refreshTokenPayload?.expiresAt ?? null;\n if (expiresAt === null || !this._platform.isBrowser) {\n return;\n }\n\n const differenceInMilliseconds = expiresAt.getTime() - Date.now();\n const offsetInMilliseconds = 10_000; // 10 seconds.\n\n // We want to start the refresh 10 seconds before it expires.\n const actualTiming = differenceInMilliseconds - offsetInMilliseconds;\n if (actualTiming <= 0) {\n return;\n }\n\n // We need to cap the timings because if\n // we get large numbers it might cause unwanted results.\n const maxTiming = 1000 * 60 * 60 * 24; // 24 hours.\n const cappedTiming = Math.max(1, Math.min(actualTiming, maxTiming));\n try {\n if (this._refreshHandler !== null) {\n clearTimeout?.(this._refreshHandler);\n this._refreshHandler = null;\n }\n this._refreshHandler = window?.setTimeout?.(() => this.autoRefresh(), cappedTiming);\n } catch {\n // Just ignore it.\n }\n }\n\n private async autoRefresh() {\n try {\n // We just need to wait for it to refresh.\n const refresh$ = this.refresh();\n await firstValueFrom(refresh$);\n } catch {\n // Something went wrong refreshing, we need to clear.\n this.clearAndRedirect();\n }\n }\n\n private get router() {\n return this._injector.get(Router);\n }\n\n private getUrl(endpoint: string) {\n return [this._httpAlias, endpoint]\n .filter(item => !!item)\n .join('/');\n }\n\n}\n","import {Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {AbstractAuthDirective} from './abstract.directive';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {Auth} from '../auth.service';\nimport {Subscription} from 'rxjs';\n\n@Directive({\n selector: '[bbAuthenticated]'\n})\nexport class BbAuthenticated extends AbstractAuthDirective implements OnInit, OnDestroy {\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n @Input()\n set bbAuthenticatedElse(templateRef: TemplateRef<any>) {\n this.assertTemplate('bbAuthenticatedElse', templateRef);\n this.elseTemplateRef = templateRef;\n this.updateView();\n }\n\n constructor(private _auth: Auth,\n private _templateRef: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef) {\n super(_templateRef, _viewContainerRef);\n }\n\n ngOnInit() {\n const subscription = this._auth.user.pipe(\n map(user => !!user),\n distinctUntilChanged()\n ).subscribe(valid => {\n this.valid = valid;\n this.updateView();\n });\n this._subscription.add(subscription);\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n static ngAcceptInputType_bbAuthenticatedElse: TemplateRef<any>;\n\n}\n","import {ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot} from '@angular/router';\nimport {AUTH_REDIRECT_HANDLER, AuthConfig, AuthRedirectHandler} from '../interfaces/config.interface';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {Auth} from '../auth.service';\nimport {map} from 'rxjs/operators';\nimport {first} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BbAnonymousGuard implements CanActivate, CanActivateChild {\n\n constructor(private _auth: Auth,\n private _router: Router,\n @Optional() private _config?: AuthConfig,\n @Optional() @Inject(AUTH_REDIRECT_HANDLER) private _handler?: AuthRedirectHandler) {\n }\n\n canActivate(snapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this._auth.user.pipe(\n map(user => !!user),\n map(isAuthenticated => {\n if (!isAuthenticated) {\n return true;\n }\n\n if (this._handler) {\n return this._handler.onFailedAnonymous(snapshot, state);\n }\n\n // If we don't have a URL to go to we can just say\n // the user is not allowed in this route by returning false.\n const nextUrl = this._config?.redirects?.authenticated ?? null;\n if (!nextUrl) {\n return false;\n }\n\n const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];\n return this._router.createUrlTree(commands);\n }),\n first()\n );\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.canActivate(childRoute, state);\n }\n\n}\n","import {ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot} from '@angular/router';\nimport {AUTH_REDIRECT_HANDLER, AuthConfig, AuthRedirectHandler} from '../interfaces/config.interface';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {Auth} from '../auth.service';\nimport {map} from 'rxjs/operators';\nimport {first} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BbAuthenticatedGuard implements CanActivate, CanActivateChild {\n\n constructor(private _auth: Auth,\n private _router: Router,\n @Optional() private _config?: AuthConfig,\n @Optional() @Inject(AUTH_REDIRECT_HANDLER) private _handler?: AuthRedirectHandler) {\n }\n\n canActivate(snapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this._auth.user.pipe(\n map(user => !!user),\n map(isAuthenticated => {\n if (isAuthenticated) {\n return true;\n }\n\n if (this._handler) {\n return this._handler.onFailedAuthenticated(snapshot, state);\n }\n\n // If we don't have a URL to go to we can just say\n // the user is not allowed in this route by returning false.\n const nextUrl = this._config?.redirects?.unauthenticated ?? null;\n if (!nextUrl) {\n return false;\n }\n\n const setRedirectOnFailedAuth = this._config?.setRedirectOnFailedAuth ?? true;\n const redirectUrl = state?.url ?? null;\n const queryParams = setRedirectOnFailedAuth && redirectUrl ? {redirectUrl} : {};\n const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];\n return this._router.createUrlTree(commands, {queryParams});\n }),\n first()\n );\n }\n\n canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n return this.canActivate(childRoute, state);\n }\n\n}\n","import {HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {catchError, filter, finalize, switchMap, take} from 'rxjs/operators';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {HttpError} from '@bravobit/bb-foundation/http';\nimport {BehaviorSubject, of, throwError} from 'rxjs';\nimport {Injectable, Optional} from '@angular/core';\nimport {Auth} from './auth.service';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n // Readonly data.\n private readonly _authHeaderString: string = this._config?.http?.header ?? 'Authorization';\n private readonly _authScheme: string = this._config?.http?.scheme ?? 'Bearer';\n\n // Data.\n isRefreshing: boolean = false;\n refreshingAccessToken$ = new BehaviorSubject<string | null>(null);\n\n constructor(private _auth: Auth,\n @Optional() private _config: AuthConfig) {\n }\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler) {\n // 1. Check if the user wants to use the authorization for this request.\n if (!request.context.get(USE_AUTHORIZATION)) {\n return next.handle(request);\n }\n\n // 2. Compose the new request.\n const accessToken = this.getAccessToken(request);\n const newRequest = this.addAuthorizationHeader(request, accessToken);\n\n // 3. Handle all errors.\n return next.handle(newRequest).pipe(\n catchError(error => {\n // Handle the HTTP401 error.\n if ((error instanceof HttpErrorResponse || error instanceof HttpError) && error?.status === 401) {\n return this.handle401Error(request, next);\n }\n\n // Just re-throw the parsed error.\n return throwError(() => error);\n })\n );\n }\n\n private handle401Error(request: HttpRequest<unknown>, next: HttpHandler) {\n // If already refreshing wait for the refresh token to complete.\n if (this.isRefreshing) {\n return this.refreshingAccessToken$.pipe(\n filter(accessToken => accessToken !== null),\n take(1),\n switchMap(accessToken => next.handle(this.addAuthorizationHeader(request, accessToken)))\n );\n }\n\n // Set the refreshing to true.\n this.isRefreshing = true;\n this.refreshingAccessToken$.next(null);\n\n return this._auth.refresh().pipe(\n switchMap(newAccessToken => {\n if (!newAccessToken) {\n return throwError(() => new Error('No refresh token was available.'));\n }\n\n this.refreshingAccessToken$.next(newAccessToken);\n return next.handle(this.addAuthorizationHeader(request, newAccessToken));\n }),\n catchError(() => this.logoutUser()),\n finalize(() => this.isRefreshing = false)\n );\n }\n\n private logoutUser() {\n // Handle the refresh error.\n this._auth.clearAndRedirect();\n\n // Return null as data.\n return of(null);\n }\n\n private getAccessToken = (request: HttpRequest<unknown>) => {\n // Get the token based on header.\n if (request.headers.has(this._authHeaderString)) {\n return request.headers.get(this._authHeaderString);\n }\n\n // Return the default access token.\n return this._auth.session.accessToken;\n };\n\n private addAuthorizationHeader = (request: HttpRequest<unknown>, accessToken: string | null = null) => {\n // Remove auth header when we do not have\n // an access token.\n if (!accessToken) {\n return request.clone({\n headers: request.headers.delete(this._authHeaderString)\n });\n }\n\n // Add the auth header to the request.\n return request.clone({\n setHeaders: {[this._authHeaderString]: `${this._authScheme} ${accessToken}`}\n });\n };\n\n}\n","import {APP_INITIALIZER, ModuleWithProviders, NgModule} from '@angular/core';\nimport {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\nimport {BbAuthenticated} from './directives/authenticated.directive';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {AuthInterceptor} from './auth.interceptor';\nimport {Auth} from './auth.service';\n\n@NgModule({\n imports: [HttpClientModule],\n declarations: [BbAuthenticated],\n exports: [BbAuthenticated]\n})\nexport class AuthModule {\n\n static forRoot(config: AuthConfig): ModuleWithProviders<AuthModule> {\n return {\n ngModule: AuthModule,\n providers: [\n Auth,\n {provide: AuthConfig, useValue: config},\n {provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true},\n {useFactory: initializeAuth, provide: APP_INITIALIZER, deps: [Auth], multi: true}\n ]\n };\n }\n\n}\n\nexport function initializeAuth(auth: Auth) {\n return auth.initialize();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.Auth","i2.AuthConfig"],"mappings":"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"}
|
|
@@ -123,9 +123,9 @@ class LocalCollectionProvider extends CollectionProvider {
|
|
|
123
123
|
|
|
124
124
|
class BbCollectionsData {
|
|
125
125
|
}
|
|
126
|
-
BbCollectionsData.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
127
|
-
BbCollectionsData.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.
|
|
128
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
126
|
+
BbCollectionsData.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsData, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
127
|
+
BbCollectionsData.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.10", type: BbCollectionsData, selector: "[bbCollectionsData]", ngImport: i0 });
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsData, decorators: [{
|
|
129
129
|
type: Directive,
|
|
130
130
|
args: [{
|
|
131
131
|
selector: '[bbCollectionsData]'
|
|
@@ -133,9 +133,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
133
133
|
}] });
|
|
134
134
|
class BbCollectionsEmpty {
|
|
135
135
|
}
|
|
136
|
-
BbCollectionsEmpty.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
137
|
-
BbCollectionsEmpty.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.
|
|
138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
136
|
+
BbCollectionsEmpty.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsEmpty, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
137
|
+
BbCollectionsEmpty.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.10", type: BbCollectionsEmpty, selector: "[bbCollectionsEmpty]", ngImport: i0 });
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsEmpty, decorators: [{
|
|
139
139
|
type: Directive,
|
|
140
140
|
args: [{
|
|
141
141
|
selector: '[bbCollectionsEmpty]'
|
|
@@ -143,9 +143,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
143
143
|
}] });
|
|
144
144
|
class BbCollectionsError {
|
|
145
145
|
}
|
|
146
|
-
BbCollectionsError.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
147
|
-
BbCollectionsError.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.
|
|
148
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
146
|
+
BbCollectionsError.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsError, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
147
|
+
BbCollectionsError.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.10", type: BbCollectionsError, selector: "[bbCollectionsError]", ngImport: i0 });
|
|
148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsError, decorators: [{
|
|
149
149
|
type: Directive,
|
|
150
150
|
args: [{
|
|
151
151
|
selector: '[bbCollectionsError]'
|
|
@@ -153,9 +153,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.5", ngImpor
|
|
|
153
153
|
}] });
|
|
154
154
|
class BbCollectionsInitial {
|
|
155
155
|
}
|
|
156
|
-
BbCollectionsInitial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
157
|
-
BbCollectionsInitial.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.
|
|
158
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
156
|
+
BbCollectionsInitial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsInitial, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
157
|
+
BbCollectionsInitial.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.10", type: BbCollectionsInitial, selector: "[bbCollectionsInitial]", ngImport: i0 });
|
|
158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsInitial, decorators: [{
|
|
159
159
|
type: Directive,
|
|
160
160
|
args: [{
|
|
161
161
|
selector: '[bbCollectionsInitial]'
|
|
@@ -168,9 +168,9 @@ class BbCollectionsViewer {
|
|
|
168
168
|
this.collection = null;
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
BbCollectionsViewer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
172
|
-
BbCollectionsViewer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
171
|
+
BbCollectionsViewer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsViewer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
172
|
+
BbCollectionsViewer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.10", type: BbCollectionsViewer, selector: "[bb-collections-viewer]", inputs: { collection: "collection" }, host: { classAttribute: "bb-collections-viewer" }, queries: [{ propertyName: "dataTemplate", first: true, predicate: BbCollectionsData, descendants: true, read: TemplateRef }, { propertyName: "emptyTemplate", first: true, predicate: BbCollectionsEmpty, descendants: true, read: TemplateRef }, { propertyName: "errorTemplate", first: true, predicate: BbCollectionsError, descendants: true, read: TemplateRef }, { propertyName: "initialTemplate", first: true, predicate: BbCollectionsInitial, descendants: true, read: TemplateRef }], ngImport: i0, template: "<ng-container *ngIf=\"collection?.data$ | async as data\"\n [ngSwitch]=\"data?.state\">\n <ng-container *ngSwitchDefault>\n <ng-container\n *ngTemplateOutlet=\"dataTemplate; context: {items: data?.response?.data, loading: data?.loading}\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'initial'\">\n <ng-container *ngTemplateOutlet=\"initialTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'empty'\">\n <ng-container\n *ngTemplateOutlet=\"emptyTemplate; context: {query: data?.request?.query, loading: data?.loading}\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'error'\">\n <ng-container\n *ngTemplateOutlet=\"errorTemplate; context: {error: data?.error, loading: data?.loading}\"></ng-container>\n </ng-container>\n</ng-container>\n", styles: [".bb-collections-viewer{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
173
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsViewer, decorators: [{
|
|
174
174
|
type: Component,
|
|
175
175
|
args: [{ selector: '[bb-collections-viewer]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'bb-collections-viewer' }, preserveWhitespaces: false, template: "<ng-container *ngIf=\"collection?.data$ | async as data\"\n [ngSwitch]=\"data?.state\">\n <ng-container *ngSwitchDefault>\n <ng-container\n *ngTemplateOutlet=\"dataTemplate; context: {items: data?.response?.data, loading: data?.loading}\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'initial'\">\n <ng-container *ngTemplateOutlet=\"initialTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'empty'\">\n <ng-container\n *ngTemplateOutlet=\"emptyTemplate; context: {query: data?.request?.query, loading: data?.loading}\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'error'\">\n <ng-container\n *ngTemplateOutlet=\"errorTemplate; context: {error: data?.error, loading: data?.loading}\"></ng-container>\n </ng-container>\n</ng-container>\n", styles: [".bb-collections-viewer{display:block}\n"] }]
|
|
176
176
|
}], propDecorators: { dataTemplate: [{
|
|
@@ -296,9 +296,9 @@ class BbCollectionsPager {
|
|
|
296
296
|
.map(page => ({ page, active: pageNumber === page }));
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
|
-
BbCollectionsPager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
300
|
-
BbCollectionsPager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.
|
|
301
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
299
|
+
BbCollectionsPager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsPager, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
300
|
+
BbCollectionsPager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.10", type: BbCollectionsPager, selector: "bb-collections-pager", inputs: { label: "label", collection: "collection" }, host: { classAttribute: "bb-collections-pager" }, ngImport: i0, template: "<ng-container *ngIf=\"data$ | async as data\">\n <div [innerHTML]=\"data?.label\"\n class=\"bb-collections-pager-text\">\n </div>\n\n <div class=\"bb-collections-pager-container\">\n <ul class=\"bb-collections-pager-list\">\n <li class=\"bb-collections-pager-item\"\n title=\"Previous page\">\n <button [disabled]=\"!data?.allowPrevious\"\n (click)=\"setPage(data?.pageNumber - 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow first\"\n type=\"button\">\n ←\n </button>\n </li>\n <li *ngFor=\"let item of data?.pages\"\n [title]=\"'Page ' + item?.page\"\n class=\"bb-collections-pager-item\">\n <button [class.active]=\"item?.active\"\n (click)=\"setPage(item?.page, data?.totalPages)\"\n class=\"bb-collections-pager-button\"\n type=\"button\">\n {{ item?.page }}\n </button>\n </li>\n <li class=\"bb-collections-pager-item\"\n title=\"Next page\">\n <button [disabled]=\"!data?.allowNext\"\n (click)=\"setPage(data?.pageNumber + 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow last\"\n type=\"button\">\n →\n </button>\n </li>\n </ul>\n </div>\n</ng-container>\n", styles: [".bb-collections-pager{display:flex;align-items:center;flex-direction:column-reverse}.bb-collections-pager-text{display:block;margin-top:10px}.bb-collections-pager-text>strong{font-weight:500}.bb-collections-pager-container{width:100%;display:flex;overflow-x:auto;align-items:center;justify-content:center}.bb-collections-pager-list{display:flex;border-radius:6px;align-items:center;background-color:#fff;border:1px solid rgba(67,90,111,.3);box-shadow:#435a6f24 0 1px 2px inset}.bb-collections-pager-item:not(:last-child){border-right:1px solid #cccccc}.bb-collections-pager-button{height:34px;border:none;display:flex;padding:0 4px;min-width:40px;-webkit-appearance:none;appearance:none;min-height:34px;-webkit-user-select:none;user-select:none;align-items:center;justify-content:center;background-color:transparent}.bb-collections-pager-button:hover,.bb-collections-pager-button:focus,.bb-collections-pager-button:active,.bb-collections-pager-button.active{color:#1565c0;font-weight:500}.bb-collections-pager-button:hover,.bb-collections-pager-button:focus{background-color:#1565c00d}.bb-collections-pager-button:active,.bb-collections-pager-button.active{background-color:#1565c033}.bb-collections-pager-button:not(.arrow):hover,.bb-collections-pager-button:not(.arrow):focus{outline:1px solid rgba(21,101,192,.5)}.bb-collections-pager-button:not(.arrow):focus,.bb-collections-pager-button:not(.arrow):active{outline:1px solid #1565c0;box-shadow:#1565c066 0 0 0 3px}.bb-collections-pager-button:not(.arrow).active{outline:1px solid #1565c0}.bb-collections-pager-button.arrow{font-weight:500}.bb-collections-pager-button.arrow.first{border-top-left-radius:2px;border-bottom-left-radius:2px}.bb-collections-pager-button.arrow.last{border-top-right-radius:2px;border-bottom-right-radius:2px}.bb-collections-pager-button:disabled{color:#000;outline:none;opacity:.25;cursor:default;pointer-events:none;background-color:transparent}@media only screen and (min-width: 768px){.bb-collections-pager{flex-wrap:wrap;align-items:center;flex-direction:row;justify-content:space-between}.bb-collections-pager-text{margin-top:0}.bb-collections-pager-container{width:auto;overflow-x:unset}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
301
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: BbCollectionsPager, decorators: [{
|
|
302
302
|
type: Component,
|
|
303
303
|
args: [{ selector: 'bb-collections-pager', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'bb-collections-pager' }, preserveWhitespaces: false, template: "<ng-container *ngIf=\"data$ | async as data\">\n <div [innerHTML]=\"data?.label\"\n class=\"bb-collections-pager-text\">\n </div>\n\n <div class=\"bb-collections-pager-container\">\n <ul class=\"bb-collections-pager-list\">\n <li class=\"bb-collections-pager-item\"\n title=\"Previous page\">\n <button [disabled]=\"!data?.allowPrevious\"\n (click)=\"setPage(data?.pageNumber - 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow first\"\n type=\"button\">\n ←\n </button>\n </li>\n <li *ngFor=\"let item of data?.pages\"\n [title]=\"'Page ' + item?.page\"\n class=\"bb-collections-pager-item\">\n <button [class.active]=\"item?.active\"\n (click)=\"setPage(item?.page, data?.totalPages)\"\n class=\"bb-collections-pager-button\"\n type=\"button\">\n {{ item?.page }}\n </button>\n </li>\n <li class=\"bb-collections-pager-item\"\n title=\"Next page\">\n <button [disabled]=\"!data?.allowNext\"\n (click)=\"setPage(data?.pageNumber + 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow last\"\n type=\"button\">\n →\n </button>\n </li>\n </ul>\n </div>\n</ng-container>\n", styles: [".bb-collections-pager{display:flex;align-items:center;flex-direction:column-reverse}.bb-collections-pager-text{display:block;margin-top:10px}.bb-collections-pager-text>strong{font-weight:500}.bb-collections-pager-container{width:100%;display:flex;overflow-x:auto;align-items:center;justify-content:center}.bb-collections-pager-list{display:flex;border-radius:6px;align-items:center;background-color:#fff;border:1px solid rgba(67,90,111,.3);box-shadow:#435a6f24 0 1px 2px inset}.bb-collections-pager-item:not(:last-child){border-right:1px solid #cccccc}.bb-collections-pager-button{height:34px;border:none;display:flex;padding:0 4px;min-width:40px;-webkit-appearance:none;appearance:none;min-height:34px;-webkit-user-select:none;user-select:none;align-items:center;justify-content:center;background-color:transparent}.bb-collections-pager-button:hover,.bb-collections-pager-button:focus,.bb-collections-pager-button:active,.bb-collections-pager-button.active{color:#1565c0;font-weight:500}.bb-collections-pager-button:hover,.bb-collections-pager-button:focus{background-color:#1565c00d}.bb-collections-pager-button:active,.bb-collections-pager-button.active{background-color:#1565c033}.bb-collections-pager-button:not(.arrow):hover,.bb-collections-pager-button:not(.arrow):focus{outline:1px solid rgba(21,101,192,.5)}.bb-collections-pager-button:not(.arrow):focus,.bb-collections-pager-button:not(.arrow):active{outline:1px solid #1565c0;box-shadow:#1565c066 0 0 0 3px}.bb-collections-pager-button:not(.arrow).active{outline:1px solid #1565c0}.bb-collections-pager-button.arrow{font-weight:500}.bb-collections-pager-button.arrow.first{border-top-left-radius:2px;border-bottom-left-radius:2px}.bb-collections-pager-button.arrow.last{border-top-right-radius:2px;border-bottom-right-radius:2px}.bb-collections-pager-button:disabled{color:#000;outline:none;opacity:.25;cursor:default;pointer-events:none;background-color:transparent}@media only screen and (min-width: 768px){.bb-collections-pager{flex-wrap:wrap;align-items:center;flex-direction:row;justify-content:space-between}.bb-collections-pager-text{margin-top:0}.bb-collections-pager-container{width:auto;overflow-x:unset}}\n"] }]
|
|
304
304
|
}], propDecorators: { label: [{
|
|
@@ -405,8 +405,8 @@ class Collection {
|
|
|
405
405
|
|
|
406
406
|
class CollectionsModule {
|
|
407
407
|
}
|
|
408
|
-
CollectionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.
|
|
409
|
-
CollectionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.
|
|
408
|
+
CollectionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: CollectionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
409
|
+
CollectionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.10", ngImport: i0, type: CollectionsModule, declarations: [
|
|
410
410
|
// Components.
|
|
411
411
|
BbCollectionsViewer,
|
|
412
412
|
BbCollectionsPager,
|
|
@@ -423,8 +423,8 @@ CollectionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versi
|
|
|
423
423
|
BbCollectionsEmpty,
|
|
424
424
|
BbCollectionsError,
|
|
425
425
|
BbCollectionsInitial] });
|
|
426
|
-
CollectionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.
|
|
427
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.
|
|
426
|
+
CollectionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: CollectionsModule, imports: [CommonModule] });
|
|
427
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: CollectionsModule, decorators: [{
|
|
428
428
|
type: NgModule,
|
|
429
429
|
args: [{
|
|
430
430
|
imports: [CommonModule],
|