@acontplus/ng-auth 1.1.5 → 1.1.6

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.
@@ -941,7 +941,7 @@ class LoginComponent {
941
941
  }
942
942
  }
943
943
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: LoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
944
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.2", type: LoginComponent, isStandalone: true, selector: "acp-login", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, showRegisterButton: { classPropertyName: "showRegisterButton", publicName: "showRegisterButton", isSignal: true, isRequired: false, transformFunction: null }, showRememberMe: { classPropertyName: "showRememberMe", publicName: "showRememberMe", isSignal: true, isRequired: false, transformFunction: null }, additionalSigninControls: { classPropertyName: "additionalSigninControls", publicName: "additionalSigninControls", isSignal: true, isRequired: false, transformFunction: null }, additionalSignupControls: { classPropertyName: "additionalSignupControls", publicName: "additionalSignupControls", isSignal: true, isRequired: false, transformFunction: null }, additionalSigninFields: { classPropertyName: "additionalSigninFields", publicName: "additionalSigninFields", isSignal: true, isRequired: false, transformFunction: null }, additionalSignupFields: { classPropertyName: "additionalSignupFields", publicName: "additionalSignupFields", isSignal: true, isRequired: false, transformFunction: null }, footerContent: { classPropertyName: "footerContent", publicName: "footerContent", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mat-card class=\"mat-elevation-z8 p-4 rounded\">\n <mat-card-header>\n <mat-card-title class=\"text-center\">{{ title() }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n @if (isLoginMode()) {\n <form [formGroup]=\"signinForm\" (ngSubmit)=\"signIn()\" class=\"d-flex flex-column gap-3\">\n <mat-form-field class=\"w-100\">\n <mat-label>Usuario</mat-label>\n <input matInput type=\"text\" placeholder=\"Ingrese su usuario\" formControlName=\"email\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Contrase\u00F1a</mat-label>\n <input\n matInput\n type=\"password\"\n placeholder=\"Ingrese su contrase\u00F1a\"\n formControlName=\"password\"\n autocomplete=\"current-password\"\n />\n </mat-form-field>\n\n <!-- Remember Me checkbox - conditional -->\n @if (showRememberMe()) {\n <div class=\"d-flex align-items-center mt-2\">\n <mat-checkbox formControlName=\"rememberMe\"> Recordarme </mat-checkbox>\n </div>\n }\n\n <!-- Additional signin fields -->\n <ng-container *ngTemplateOutlet=\"additionalSigninFields()\"></ng-container>\n\n <div class=\"d-flex justify-content-center mt-3\">\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!signinForm.valid || isLoading()\"\n type=\"submit\"\n class=\"w-100\"\n >\n @if (isLoading()) {\n Ingresando...\n } @else {\n <ng-container>Ingresar <mat-icon>login</mat-icon></ng-container>\n }\n </button>\n </div>\n\n <div class=\"text-center mt-2\">\n @if (showRegisterButton()) {\n <button mat-button type=\"button\" (click)=\"switchMode()\">\n \u00BFNo tienes cuenta? Reg\u00EDstrate\n </button>\n }\n </div>\n </form>\n } @else {\n <form [formGroup]=\"signupForm\" (ngSubmit)=\"registerUser()\" class=\"d-flex flex-column gap-3\">\n <mat-form-field class=\"w-100\">\n <mat-label>Nombre</mat-label>\n <input\n matInput\n type=\"text\"\n placeholder=\"Ingrese su nombre\"\n formControlName=\"displayName\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Email</mat-label>\n <input matInput type=\"email\" placeholder=\"Ingrese su email\" formControlName=\"email\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Contrase\u00F1a</mat-label>\n <input\n matInput\n type=\"password\"\n placeholder=\"Ingrese su contrase\u00F1a\"\n formControlName=\"password\"\n autocomplete=\"new-password\"\n />\n </mat-form-field>\n\n <!-- Additional signup fields -->\n <ng-container *ngTemplateOutlet=\"additionalSignupFields()\"></ng-container>\n\n <div class=\"d-flex justify-content-center mt-3\">\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!signupForm.valid || isLoading()\"\n type=\"submit\"\n class=\"w-100\"\n >\n @if (isLoading()) {\n Registrando...\n } @else {\n <ng-container>Registrarse <mat-icon>person_add</mat-icon></ng-container>\n }\n </button>\n </div>\n\n <div class=\"text-center mt-2\">\n <button mat-button type=\"button\" (click)=\"switchMode()\">\n \u00BFYa tienes cuenta? Inicia sesi\u00F3n\n </button>\n </div>\n </form>\n }\n @if (errorMessage()) {\n <div class=\"alert alert-danger mt-3\" role=\"alert\">\n {{ errorMessage() }}\n </div>\n }\n </mat-card-content>\n @if (hasFooterContent()) {\n <mat-card-footer>\n <ng-container *ngTemplateOutlet=\"footerContent()\"></ng-container>\n </mat-card-footer>\n }\n</mat-card>\n", styles: [":host{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100%;padding:16px;box-sizing:border-box}mat-card{width:100%;max-width:400px;border-radius:12px;box-shadow:0 8px 32px #0000001a}mat-card-header{text-align:center;margin-bottom:20px}mat-card-title{font-size:24px;font-weight:600;color:var(--mat-sys-on-surface, #1c1b1f)}mat-form-field{width:100%}.w-100{width:100%}.d-flex{display:flex}.flex-column{flex-direction:column}.gap-3{gap:12px}.justify-content-center{justify-content:center}.align-items-center{align-items:center}.mt-3{margin-top:12px}.mt-2{margin-top:8px}.text-center{text-align:center}.p-4{padding:16px}.rounded{border-radius:12px}.alert-danger{background-color:var(--mat-sys-error-container, #ffdad6);border-color:var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-on-error-container, #410002);padding:12px;border-radius:4px;border:1px solid transparent}.row{display:flex;flex-wrap:wrap;margin:0 -15px}.col-xs-12,.col-sm-12,.col-md-12{flex:0 0 100%;max-width:100%;padding:0 15px}.m-t-10{margin-top:10px}.social{display:flex;justify-content:center}mat-button{border-radius:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
944
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.2", type: LoginComponent, isStandalone: true, selector: "acp-login", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, showRegisterButton: { classPropertyName: "showRegisterButton", publicName: "showRegisterButton", isSignal: true, isRequired: false, transformFunction: null }, showRememberMe: { classPropertyName: "showRememberMe", publicName: "showRememberMe", isSignal: true, isRequired: false, transformFunction: null }, additionalSigninControls: { classPropertyName: "additionalSigninControls", publicName: "additionalSigninControls", isSignal: true, isRequired: false, transformFunction: null }, additionalSignupControls: { classPropertyName: "additionalSignupControls", publicName: "additionalSignupControls", isSignal: true, isRequired: false, transformFunction: null }, additionalSigninFields: { classPropertyName: "additionalSigninFields", publicName: "additionalSigninFields", isSignal: true, isRequired: false, transformFunction: null }, additionalSignupFields: { classPropertyName: "additionalSignupFields", publicName: "additionalSignupFields", isSignal: true, isRequired: false, transformFunction: null }, footerContent: { classPropertyName: "footerContent", publicName: "footerContent", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mat-card class=\"mat-elevation-z8 p-4 rounded\">\n <mat-card-header>\n <mat-card-title class=\"text-center\">{{ title() }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n @if (isLoginMode()) {\n <form [formGroup]=\"signinForm\" (ngSubmit)=\"signIn()\" class=\"d-flex flex-column gap-3\">\n <mat-form-field class=\"w-100\">\n <mat-label>Usuario</mat-label>\n <input matInput type=\"text\" placeholder=\"Ingrese su usuario\" formControlName=\"email\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Contrase\u00F1a</mat-label>\n <input\n matInput\n type=\"password\"\n placeholder=\"Ingrese su contrase\u00F1a\"\n formControlName=\"password\"\n autocomplete=\"current-password\"\n />\n </mat-form-field>\n\n <!-- Remember Me checkbox - conditional -->\n @if (showRememberMe()) {\n <div class=\"d-flex align-items-center mt-2\">\n <mat-checkbox formControlName=\"rememberMe\"> Recordarme </mat-checkbox>\n </div>\n }\n\n <!-- Additional signin fields -->\n <ng-container *ngTemplateOutlet=\"additionalSigninFields()\"></ng-container>\n\n <div class=\"d-flex justify-content-center mt-3\">\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!signinForm.valid || isLoading()\"\n type=\"submit\"\n class=\"w-100\"\n >\n @if (isLoading()) {\n Ingresando...\n } @else {\n <ng-container>Ingresar <mat-icon>login</mat-icon></ng-container>\n }\n </button>\n </div>\n\n <div class=\"text-center mt-2\">\n @if (showRegisterButton()) {\n <button mat-button type=\"button\" (click)=\"switchMode()\">\n \u00BFNo tienes cuenta? Reg\u00EDstrate\n </button>\n }\n </div>\n </form>\n } @else {\n <form [formGroup]=\"signupForm\" (ngSubmit)=\"registerUser()\" class=\"d-flex flex-column gap-3\">\n <mat-form-field class=\"w-100\">\n <mat-label>Nombre</mat-label>\n <input\n matInput\n type=\"text\"\n placeholder=\"Ingrese su nombre\"\n formControlName=\"displayName\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Email</mat-label>\n <input matInput type=\"email\" placeholder=\"Ingrese su email\" formControlName=\"email\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Contrase\u00F1a</mat-label>\n <input\n matInput\n type=\"password\"\n placeholder=\"Ingrese su contrase\u00F1a\"\n formControlName=\"password\"\n autocomplete=\"new-password\"\n />\n </mat-form-field>\n\n <!-- Additional signup fields -->\n <ng-container *ngTemplateOutlet=\"additionalSignupFields()\"></ng-container>\n\n <div class=\"d-flex justify-content-center mt-3\">\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!signupForm.valid || isLoading()\"\n type=\"submit\"\n class=\"w-100\"\n >\n @if (isLoading()) {\n Registrando...\n } @else {\n <ng-container>Registrarse <mat-icon>person_add</mat-icon></ng-container>\n }\n </button>\n </div>\n\n <div class=\"text-center mt-2\">\n <button mat-button type=\"button\" (click)=\"switchMode()\">\n \u00BFYa tienes cuenta? Inicia sesi\u00F3n\n </button>\n </div>\n </form>\n }\n @if (errorMessage()) {\n <div class=\"alert alert-danger mt-3\" role=\"alert\">\n {{ errorMessage() }}\n </div>\n }\n </mat-card-content>\n @if (hasFooterContent()) {\n <mat-card-footer>\n <ng-container *ngTemplateOutlet=\"footerContent()\"></ng-container>\n </mat-card-footer>\n }\n</mat-card>\n", styles: [":host{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100%;padding:16px;box-sizing:border-box}:host mat-card{width:100%;max-width:400px;border-radius:12px;box-shadow:0 8px 32px #0000001a}:host mat-card-header{text-align:center;margin-bottom:20px}:host mat-card-title{font-size:24px;font-weight:600;color:var(--mat-sys-primary, #6750a4)}:host mat-form-field{width:100%}:host mat-button{border-radius:8px}:host .w-100{width:100%}:host .d-flex{display:flex}:host .flex-column{flex-direction:column}:host .gap-3{gap:12px}:host .justify-content-center{justify-content:center}:host .align-items-center{align-items:center}:host .mt-3{margin-top:12px}:host .mt-2{margin-top:8px}:host .text-center{text-align:center}:host .p-4{padding:16px}:host .rounded{border-radius:12px}:host .m-t-10{margin-top:10px}:host .alert-danger{background-color:var(--mat-sys-error-container, #ffdad6);border-color:var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-on-error-container, #410002);padding:12px;border-radius:4px;border:1px solid transparent}:host .row{display:flex;flex-wrap:wrap;margin:0 -15px}:host .col-xs-12,:host .col-sm-12,:host .col-md-12{flex:0 0 100%;max-width:100%;padding:0 15px}:host .social{display:flex;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
945
945
  }
946
946
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: LoginComponent, decorators: [{
947
947
  type: Component,
@@ -960,7 +960,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
960
960
  MatCardFooter,
961
961
  MatAnchor,
962
962
  MatCheckbox,
963
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<mat-card class=\"mat-elevation-z8 p-4 rounded\">\n <mat-card-header>\n <mat-card-title class=\"text-center\">{{ title() }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n @if (isLoginMode()) {\n <form [formGroup]=\"signinForm\" (ngSubmit)=\"signIn()\" class=\"d-flex flex-column gap-3\">\n <mat-form-field class=\"w-100\">\n <mat-label>Usuario</mat-label>\n <input matInput type=\"text\" placeholder=\"Ingrese su usuario\" formControlName=\"email\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Contrase\u00F1a</mat-label>\n <input\n matInput\n type=\"password\"\n placeholder=\"Ingrese su contrase\u00F1a\"\n formControlName=\"password\"\n autocomplete=\"current-password\"\n />\n </mat-form-field>\n\n <!-- Remember Me checkbox - conditional -->\n @if (showRememberMe()) {\n <div class=\"d-flex align-items-center mt-2\">\n <mat-checkbox formControlName=\"rememberMe\"> Recordarme </mat-checkbox>\n </div>\n }\n\n <!-- Additional signin fields -->\n <ng-container *ngTemplateOutlet=\"additionalSigninFields()\"></ng-container>\n\n <div class=\"d-flex justify-content-center mt-3\">\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!signinForm.valid || isLoading()\"\n type=\"submit\"\n class=\"w-100\"\n >\n @if (isLoading()) {\n Ingresando...\n } @else {\n <ng-container>Ingresar <mat-icon>login</mat-icon></ng-container>\n }\n </button>\n </div>\n\n <div class=\"text-center mt-2\">\n @if (showRegisterButton()) {\n <button mat-button type=\"button\" (click)=\"switchMode()\">\n \u00BFNo tienes cuenta? Reg\u00EDstrate\n </button>\n }\n </div>\n </form>\n } @else {\n <form [formGroup]=\"signupForm\" (ngSubmit)=\"registerUser()\" class=\"d-flex flex-column gap-3\">\n <mat-form-field class=\"w-100\">\n <mat-label>Nombre</mat-label>\n <input\n matInput\n type=\"text\"\n placeholder=\"Ingrese su nombre\"\n formControlName=\"displayName\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Email</mat-label>\n <input matInput type=\"email\" placeholder=\"Ingrese su email\" formControlName=\"email\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Contrase\u00F1a</mat-label>\n <input\n matInput\n type=\"password\"\n placeholder=\"Ingrese su contrase\u00F1a\"\n formControlName=\"password\"\n autocomplete=\"new-password\"\n />\n </mat-form-field>\n\n <!-- Additional signup fields -->\n <ng-container *ngTemplateOutlet=\"additionalSignupFields()\"></ng-container>\n\n <div class=\"d-flex justify-content-center mt-3\">\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!signupForm.valid || isLoading()\"\n type=\"submit\"\n class=\"w-100\"\n >\n @if (isLoading()) {\n Registrando...\n } @else {\n <ng-container>Registrarse <mat-icon>person_add</mat-icon></ng-container>\n }\n </button>\n </div>\n\n <div class=\"text-center mt-2\">\n <button mat-button type=\"button\" (click)=\"switchMode()\">\n \u00BFYa tienes cuenta? Inicia sesi\u00F3n\n </button>\n </div>\n </form>\n }\n @if (errorMessage()) {\n <div class=\"alert alert-danger mt-3\" role=\"alert\">\n {{ errorMessage() }}\n </div>\n }\n </mat-card-content>\n @if (hasFooterContent()) {\n <mat-card-footer>\n <ng-container *ngTemplateOutlet=\"footerContent()\"></ng-container>\n </mat-card-footer>\n }\n</mat-card>\n", styles: [":host{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100%;padding:16px;box-sizing:border-box}mat-card{width:100%;max-width:400px;border-radius:12px;box-shadow:0 8px 32px #0000001a}mat-card-header{text-align:center;margin-bottom:20px}mat-card-title{font-size:24px;font-weight:600;color:var(--mat-sys-on-surface, #1c1b1f)}mat-form-field{width:100%}.w-100{width:100%}.d-flex{display:flex}.flex-column{flex-direction:column}.gap-3{gap:12px}.justify-content-center{justify-content:center}.align-items-center{align-items:center}.mt-3{margin-top:12px}.mt-2{margin-top:8px}.text-center{text-align:center}.p-4{padding:16px}.rounded{border-radius:12px}.alert-danger{background-color:var(--mat-sys-error-container, #ffdad6);border-color:var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-on-error-container, #410002);padding:12px;border-radius:4px;border:1px solid transparent}.row{display:flex;flex-wrap:wrap;margin:0 -15px}.col-xs-12,.col-sm-12,.col-md-12{flex:0 0 100%;max-width:100%;padding:0 15px}.m-t-10{margin-top:10px}.social{display:flex;justify-content:center}mat-button{border-radius:8px}\n"] }]
963
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<mat-card class=\"mat-elevation-z8 p-4 rounded\">\n <mat-card-header>\n <mat-card-title class=\"text-center\">{{ title() }}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n @if (isLoginMode()) {\n <form [formGroup]=\"signinForm\" (ngSubmit)=\"signIn()\" class=\"d-flex flex-column gap-3\">\n <mat-form-field class=\"w-100\">\n <mat-label>Usuario</mat-label>\n <input matInput type=\"text\" placeholder=\"Ingrese su usuario\" formControlName=\"email\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Contrase\u00F1a</mat-label>\n <input\n matInput\n type=\"password\"\n placeholder=\"Ingrese su contrase\u00F1a\"\n formControlName=\"password\"\n autocomplete=\"current-password\"\n />\n </mat-form-field>\n\n <!-- Remember Me checkbox - conditional -->\n @if (showRememberMe()) {\n <div class=\"d-flex align-items-center mt-2\">\n <mat-checkbox formControlName=\"rememberMe\"> Recordarme </mat-checkbox>\n </div>\n }\n\n <!-- Additional signin fields -->\n <ng-container *ngTemplateOutlet=\"additionalSigninFields()\"></ng-container>\n\n <div class=\"d-flex justify-content-center mt-3\">\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!signinForm.valid || isLoading()\"\n type=\"submit\"\n class=\"w-100\"\n >\n @if (isLoading()) {\n Ingresando...\n } @else {\n <ng-container>Ingresar <mat-icon>login</mat-icon></ng-container>\n }\n </button>\n </div>\n\n <div class=\"text-center mt-2\">\n @if (showRegisterButton()) {\n <button mat-button type=\"button\" (click)=\"switchMode()\">\n \u00BFNo tienes cuenta? Reg\u00EDstrate\n </button>\n }\n </div>\n </form>\n } @else {\n <form [formGroup]=\"signupForm\" (ngSubmit)=\"registerUser()\" class=\"d-flex flex-column gap-3\">\n <mat-form-field class=\"w-100\">\n <mat-label>Nombre</mat-label>\n <input\n matInput\n type=\"text\"\n placeholder=\"Ingrese su nombre\"\n formControlName=\"displayName\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Email</mat-label>\n <input matInput type=\"email\" placeholder=\"Ingrese su email\" formControlName=\"email\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Contrase\u00F1a</mat-label>\n <input\n matInput\n type=\"password\"\n placeholder=\"Ingrese su contrase\u00F1a\"\n formControlName=\"password\"\n autocomplete=\"new-password\"\n />\n </mat-form-field>\n\n <!-- Additional signup fields -->\n <ng-container *ngTemplateOutlet=\"additionalSignupFields()\"></ng-container>\n\n <div class=\"d-flex justify-content-center mt-3\">\n <button\n mat-raised-button\n color=\"primary\"\n [disabled]=\"!signupForm.valid || isLoading()\"\n type=\"submit\"\n class=\"w-100\"\n >\n @if (isLoading()) {\n Registrando...\n } @else {\n <ng-container>Registrarse <mat-icon>person_add</mat-icon></ng-container>\n }\n </button>\n </div>\n\n <div class=\"text-center mt-2\">\n <button mat-button type=\"button\" (click)=\"switchMode()\">\n \u00BFYa tienes cuenta? Inicia sesi\u00F3n\n </button>\n </div>\n </form>\n }\n @if (errorMessage()) {\n <div class=\"alert alert-danger mt-3\" role=\"alert\">\n {{ errorMessage() }}\n </div>\n }\n </mat-card-content>\n @if (hasFooterContent()) {\n <mat-card-footer>\n <ng-container *ngTemplateOutlet=\"footerContent()\"></ng-container>\n </mat-card-footer>\n }\n</mat-card>\n", styles: [":host{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100%;padding:16px;box-sizing:border-box}:host mat-card{width:100%;max-width:400px;border-radius:12px;box-shadow:0 8px 32px #0000001a}:host mat-card-header{text-align:center;margin-bottom:20px}:host mat-card-title{font-size:24px;font-weight:600;color:var(--mat-sys-primary, #6750a4)}:host mat-form-field{width:100%}:host mat-button{border-radius:8px}:host .w-100{width:100%}:host .d-flex{display:flex}:host .flex-column{flex-direction:column}:host .gap-3{gap:12px}:host .justify-content-center{justify-content:center}:host .align-items-center{align-items:center}:host .mt-3{margin-top:12px}:host .mt-2{margin-top:8px}:host .text-center{text-align:center}:host .p-4{padding:16px}:host .rounded{border-radius:12px}:host .m-t-10{margin-top:10px}:host .alert-danger{background-color:var(--mat-sys-error-container, #ffdad6);border-color:var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-on-error-container, #410002);padding:12px;border-radius:4px;border:1px solid transparent}:host .row{display:flex;flex-wrap:wrap;margin:0 -15px}:host .col-xs-12,:host .col-sm-12,:host .col-md-12{flex:0 0 100%;max-width:100%;padding:0 15px}:host .social{display:flex;justify-content:center}\n"] }]
964
964
  }], ctorParameters: () => [] });
965
965
 
966
966
  // src/lib/presentation/components/index.ts
@@ -1 +1 @@
1
- {"version":3,"file":"acontplus-ng-auth.mjs","sources":["../tmp-esm2022/lib/domain/repositories/auth.repository.js","../tmp-esm2022/lib/repositories/token.repository.js","../tmp-esm2022/lib/ui/stores/auth.store.js","../tmp-esm2022/lib/services/url-redirect.service.js","../tmp-esm2022/lib/application/use-cases/login.use-case.js","../tmp-esm2022/lib/application/use-cases/register.use-case.js","../tmp-esm2022/lib/application/use-cases/refresh-token.use-case.js","../tmp-esm2022/lib/application/use-cases/logout.use-case.js","../tmp-esm2022/lib/application/use-cases/index.js","../tmp-esm2022/lib/application/index.js","../tmp-esm2022/lib/data/repositories/auth-http.repository.js","../tmp-esm2022/lib/data/repositories/index.js","../tmp-esm2022/lib/data/index.js","../tmp-esm2022/lib/domain/models/auth.js","../tmp-esm2022/lib/domain/models/index.js","../tmp-esm2022/lib/domain/repositories/index.js","../tmp-esm2022/lib/domain/index.js","../tmp-esm2022/lib/guards/auth.guard.js","../tmp-esm2022/lib/interceptors/auth-redirect.interceptor.js","../tmp-esm2022/lib/services/csrf.service.js","../tmp-esm2022/lib/interceptors/csrf.interceptor.js","../tmp-esm2022/lib/providers/auth.providers.js","../tmp-esm2022/lib/providers/index.js","../tmp-esm2022/lib/ui/stores/index.js","../tmp-esm2022/lib/ui/login/login.component.js","../tmp-esm2022/lib/ui/login/index.js","../tmp-esm2022/lib/ui/index.js","../tmp-esm2022/acontplus-ng-auth.js"],"sourcesContent":["export class AuthRepository {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctYXV0aC9zcmMvbGliL2RvbWFpbi9yZXBvc2l0b3JpZXMvYXV0aC5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBZ0IsY0FBYztDQUtuQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvZG9tYWluL3JlcG9zaXRvcmllcy9hdXRoLnJlcG9zaXRvcnkudHNcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvZ2luUmVxdWVzdCwgUmVnaXN0ZXJSZXF1ZXN0LCBSZWZyZXNoVG9rZW5SZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgnO1xuaW1wb3J0IHsgQXV0aFRva2VucyB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdXRoUmVwb3NpdG9yeSB7XG4gIGFic3RyYWN0IGxvZ2luKHJlcXVlc3Q6IExvZ2luUmVxdWVzdCk6IE9ic2VydmFibGU8QXV0aFRva2Vucz47XG4gIGFic3RyYWN0IHJlZ2lzdGVyKHJlcXVlc3Q6IFJlZ2lzdGVyUmVxdWVzdCk6IE9ic2VydmFibGU8QXV0aFRva2Vucz47XG4gIGFic3RyYWN0IHJlZnJlc2hUb2tlbihyZXF1ZXN0OiBSZWZyZXNoVG9rZW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPjtcbiAgYWJzdHJhY3QgbG9nb3V0KGVtYWlsOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPjtcbn1cbiJdfQ==","import { Injectable, inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { jwtDecode } from 'jwt-decode';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nimport * as i0 from \"@angular/core\";\nexport class TokenRepository {\n environment = inject(ENVIRONMENT);\n platformId = inject(PLATFORM_ID);\n saveTokens(tokens, rememberMe = false) {\n if (isPlatformBrowser(this.platformId)) {\n this.setToken(tokens.token, rememberMe);\n this.setRefreshToken(tokens.refreshToken, rememberMe);\n }\n }\n getToken() {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return (localStorage.getItem(this.environment.tokenKey) ||\n sessionStorage.getItem(this.environment.tokenKey));\n }\n getRefreshToken() {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return (localStorage.getItem(this.environment.refreshTokenKey) ||\n sessionStorage.getItem(this.environment.refreshTokenKey));\n }\n setToken(token, rememberMe = false) {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (rememberMe) {\n localStorage.setItem(this.environment.tokenKey, token);\n }\n else {\n sessionStorage.setItem(this.environment.tokenKey, token);\n }\n }\n setRefreshToken(refreshToken, rememberMe = false) {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (rememberMe) {\n localStorage.setItem(this.environment.refreshTokenKey, refreshToken);\n }\n else {\n sessionStorage.setItem(this.environment.refreshTokenKey, refreshToken);\n }\n }\n clearTokens() {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n localStorage.removeItem(this.environment.tokenKey);\n localStorage.removeItem(this.environment.refreshTokenKey);\n sessionStorage.removeItem(this.environment.tokenKey);\n sessionStorage.removeItem(this.environment.refreshTokenKey);\n }\n isAuthenticated() {\n const accessToken = this.getToken();\n if (!accessToken) {\n return false;\n }\n try {\n const decodedAccessToken = jwtDecode(accessToken);\n const accessExpiration = Number(decodedAccessToken.exp);\n const currentTimeUTC = Math.floor(Date.now() / 1000);\n return accessExpiration > currentTimeUTC;\n }\n catch {\n return false;\n }\n }\n needsRefresh() {\n const accessToken = this.getToken();\n if (!accessToken) {\n return false;\n }\n try {\n const decodedToken = jwtDecode(accessToken);\n const expiration = Number(decodedToken.exp);\n const currentTimeUTC = Math.floor(Date.now() / 1000);\n const timeUntilExpiry = expiration - currentTimeUTC;\n return timeUntilExpiry <= 300; // 5 minutes\n }\n catch {\n return false;\n }\n }\n getTokenPayload() {\n const token = this.getToken();\n if (!token)\n return null;\n try {\n return jwtDecode(token);\n }\n catch {\n return null;\n }\n }\n /**\n * Determines if tokens are stored persistently (localStorage) vs session (sessionStorage)\n */\n isRememberMeEnabled() {\n if (!isPlatformBrowser(this.platformId)) {\n return false;\n }\n // Check if tokens exist in localStorage (persistent storage)\n const tokenInLocalStorage = localStorage.getItem(this.environment.tokenKey);\n const refreshTokenInLocalStorage = localStorage.getItem(this.environment.refreshTokenKey);\n return !!(tokenInLocalStorage || refreshTokenInLocalStorage);\n }\n getUserData() {\n const token = this.getToken();\n if (!token) {\n return null;\n }\n try {\n const decodedToken = jwtDecode(token);\n const email = decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] ??\n decodedToken['email'] ??\n decodedToken['sub'] ??\n decodedToken['user_id'];\n const displayName = decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'] ??\n decodedToken['displayName'] ??\n decodedToken['display_name'] ??\n decodedToken['name'] ??\n decodedToken['given_name'];\n const name = decodedToken['name'] ?? displayName;\n if (!email) {\n return null;\n }\n const userData = {\n email: email.toString(),\n displayName: displayName?.toString() ?? 'Unknown User',\n name: name?.toString(),\n roles: this.extractArrayField(decodedToken, ['roles', 'role']),\n permissions: this.extractArrayField(decodedToken, ['permissions', 'perms']),\n tenantId: decodedToken['tenantId']?.toString() ??\n decodedToken['tenant_id']?.toString() ??\n decodedToken['tenant']?.toString(),\n companyId: decodedToken['companyId']?.toString() ??\n decodedToken['company_id']?.toString() ??\n decodedToken['organizationId']?.toString() ??\n decodedToken['org_id']?.toString(),\n locale: decodedToken['locale']?.toString(),\n timezone: decodedToken['timezone']?.toString() ?? decodedToken['tz']?.toString(),\n };\n return userData;\n }\n catch {\n return null;\n }\n }\n /**\n * Extract array field from decoded token, trying multiple possible field names\n */\n extractArrayField(decodedToken, fieldNames) {\n for (const fieldName of fieldNames) {\n const value = decodedToken[fieldName];\n if (Array.isArray(value)) {\n return value.map(v => v.toString());\n }\n if (typeof value === 'string') {\n // Handle comma-separated string values\n return value\n .split(',')\n .map(v => v.trim())\n .filter(v => v.length > 0);\n }\n }\n return undefined;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TokenRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TokenRepository, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TokenRepository, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4ucmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9yZXBvc2l0b3JpZXMvdG9rZW4ucmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBTW5ELE1BQU0sT0FBTyxlQUFlO0lBQ2xCLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV6QyxVQUFVLENBQUMsTUFBa0IsRUFBRSxVQUFVLEdBQUcsS0FBSztRQUMvQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sQ0FDTCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQy9DLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFD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SztxQkFDVCxLQUFLLENBQUMsR0FBRyxDQUFDO3FCQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztxQkFDbEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7dUdBdk1VLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyBBdXRoVG9rZW5zLCBVc2VyRGF0YSB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcbmltcG9ydCB7IElUb2tlblByb3ZpZGVyIH0gZnJvbSAnQGFjb250cGx1cy9uZy1pbmZyYXN0cnVjdHVyZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUb2tlblJlcG9zaXRvcnkgaW1wbGVtZW50cyBJVG9rZW5Qcm92aWRlciB7XG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSBpbmplY3QoRU5WSVJPTk1FTlQpO1xuICBwcml2YXRlIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXG4gIHNhdmVUb2tlbnModG9rZW5zOiBBdXRoVG9rZW5zLCByZW1lbWJlck1lID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy5zZXRUb2tlbih0b2tlbnMudG9rZW4sIHJlbWVtYmVyTWUpO1xuICAgICAgdGhpcy5zZXRSZWZyZXNoVG9rZW4odG9rZW5zLnJlZnJlc2hUb2tlbiwgcmVtZW1iZXJNZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQudG9rZW5LZXkpIHx8XG4gICAgICBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQudG9rZW5LZXkpXG4gICAgKTtcbiAgfVxuXG4gIGdldFJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5lbnZpcm9ubWVudC5yZWZyZXNoVG9rZW5LZXkpIHx8XG4gICAgICBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5KVxuICAgICk7XG4gIH1cblxuICBzZXRUb2tlbih0b2tlbjogc3RyaW5nLCByZW1lbWJlck1lID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlbWVtYmVyTWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQudG9rZW5LZXksIHRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmVudmlyb25tZW50LnRva2VuS2V5LCB0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgc2V0UmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nLCByZW1lbWJlck1lID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlbWVtYmVyTWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5LCByZWZyZXNoVG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5LCByZWZyZXNoVG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyVG9rZW5zKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmVudmlyb25tZW50LnRva2VuS2V5KTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmVudmlyb25tZW50LnJlZnJlc2hUb2tlbktleSk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmVudmlyb25tZW50LnRva2VuS2V5KTtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5KTtcbiAgfVxuXG4gIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZEFjY2Vzc1Rva2VuID0gand0RGVjb2RlKGFjY2Vzc1Rva2VuKTtcbiAgICAgIGNvbnN0IGFjY2Vzc0V4cGlyYXRpb24gPSBOdW1iZXIoZGVjb2RlZEFjY2Vzc1Rva2VuLmV4cCk7XG4gICAgICBjb25zdCBjdXJyZW50VGltZVVUQyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuXG4gICAgICByZXR1cm4gYWNjZXNzRXhwaXJhdGlvbiA+IGN1cnJlbnRUaW1lVVRDO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5lZWRzUmVmcmVzaCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGp3dERlY29kZShhY2Nlc3NUb2tlbik7XG4gICAgICBjb25zdCBleHBpcmF0aW9uID0gTnVtYmVyKGRlY29kZWRUb2tlbi5leHApO1xuICAgICAgY29uc3QgY3VycmVudFRpbWVVVEMgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgIGNvbnN0IHRpbWVVbnRpbEV4cGlyeSA9IGV4cGlyYXRpb24gLSBjdXJyZW50VGltZVVUQztcblxuICAgICAgcmV0dXJuIHRpbWVVbnRpbEV4cGlyeSA8PSAzMDA7IC8vIDUgbWludXRlc1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldFRva2VuUGF5bG9hZCgpOiB1bmtub3duIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBpZiAoIXRva2VuKSByZXR1cm4gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gand0RGVjb2RlKHRva2VuKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRva2VucyBhcmUgc3RvcmVkIHBlcnNpc3RlbnRseSAobG9jYWxTdG9yYWdlKSB2cyBzZXNzaW9uIChzZXNzaW9uU3RvcmFnZSlcbiAgICovXG4gIGlzUmVtZW1iZXJNZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdG9rZW5zIGV4aXN0IGluIGxvY2FsU3RvcmFnZSAocGVyc2lzdGVudCBzdG9yYWdlKVxuICAgIGNvbnN0IHRva2VuSW5Mb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmVudmlyb25tZW50LnRva2VuS2V5KTtcbiAgICBjb25zdCByZWZyZXNoVG9rZW5JbkxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5KTtcblxuICAgIHJldHVybiAhISh0b2tlbkluTG9jYWxTdG9yYWdlIHx8IHJlZnJlc2hUb2tlbkluTG9jYWxTdG9yYWdlKTtcbiAgfVxuXG4gIGdldFVzZXJEYXRhKCk6IFVzZXJEYXRhIHwgbnVsbCB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGp3dERlY29kZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odG9rZW4pO1xuXG4gICAgICBjb25zdCBlbWFpbCA9XG4gICAgICAgIGRlY29kZWRUb2tlblsnaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvZW1haWxhZGRyZXNzJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWydlbWFpbCddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnc3ViJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWyd1c2VyX2lkJ107XG5cbiAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID1cbiAgICAgICAgZGVjb2RlZFRva2VuWydodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9naXZlbm5hbWUnXSA/P1xuICAgICAgICBkZWNvZGVkVG9rZW5bJ2Rpc3BsYXlOYW1lJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWydkaXNwbGF5X25hbWUnXSA/P1xuICAgICAgICBkZWNvZGVkVG9rZW5bJ25hbWUnXSA/P1xuICAgICAgICBkZWNvZGVkVG9rZW5bJ2dpdmVuX25hbWUnXTtcblxuICAgICAgY29uc3QgbmFtZSA9IGRlY29kZWRUb2tlblsnbmFtZSddID8/IGRpc3BsYXlOYW1lO1xuXG4gICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VyRGF0YTogVXNlckRhdGEgPSB7XG4gICAgICAgIGVtYWlsOiBlbWFpbC50b1N0cmluZygpLFxuICAgICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWU/LnRvU3RyaW5nKCkgPz8gJ1Vua25vd24gVXNlcicsXG4gICAgICAgIG5hbWU6IG5hbWU/LnRvU3RyaW5nKCksXG4gICAgICAgIHJvbGVzOiB0aGlzLmV4dHJhY3RBcnJheUZpZWxkKGRlY29kZWRUb2tlbiwgWydyb2xlcycsICdyb2xlJ10pLFxuICAgICAgICBwZXJtaXNzaW9uczogdGhpcy5leHRyYWN0QXJyYXlGaWVsZChkZWNvZGVkVG9rZW4sIFsncGVybWlzc2lvbnMnLCAncGVybXMnXSksXG4gICAgICAgIHRlbmFudElkOlxuICAgICAgICAgIGRlY29kZWRUb2tlblsndGVuYW50SWQnXT8udG9TdHJpbmcoKSA/P1xuICAgICAgICAgIGRlY29kZWRUb2tlblsndGVuYW50X2lkJ10/LnRvU3RyaW5nKCkgPz9cbiAgICAgICAgICBkZWNvZGVkVG9rZW5bJ3RlbmFudCddPy50b1N0cmluZygpLFxuICAgICAgICBjb21wYW55SWQ6XG4gICAgICAgICAgZGVjb2RlZFRva2VuWydjb21wYW55SWQnXT8udG9TdHJpbmcoKSA/P1xuICAgICAgICAgIGRlY29kZWRUb2tlblsnY29tcGFueV9pZCddPy50b1N0cmluZygpID8/XG4gICAgICAgICAgZGVjb2RlZFRva2VuWydvcmdhbml6YXRpb25JZCddPy50b1N0cmluZygpID8/XG4gICAgICAgICAgZGVjb2RlZFRva2VuWydvcmdfaWQnXT8udG9TdHJpbmcoKSxcbiAgICAgICAgbG9jYWxlOiBkZWNvZGVkVG9rZW5bJ2xvY2FsZSddPy50b1N0cmluZygpLFxuICAgICAgICB0aW1lem9uZTogZGVjb2RlZFRva2VuWyd0aW1lem9uZSddPy50b1N0cmluZygpID8/IGRlY29kZWRUb2tlblsndHonXT8udG9TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB1c2VyRGF0YTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGFycmF5IGZpZWxkIGZyb20gZGVjb2RlZCB0b2tlbiwgdHJ5aW5nIG11bHRpcGxlIHBvc3NpYmxlIGZpZWxkIG5hbWVzXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RBcnJheUZpZWxkKFxuICAgIGRlY29kZWRUb2tlbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgZmllbGROYW1lczogc3RyaW5nW10sXG4gICk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiBmaWVsZE5hbWVzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRlY29kZWRUb2tlbltmaWVsZE5hbWVdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAodiA9PiB2LnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGFuZGxlIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgdmFsdWVzXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxuICAgICAgICAgIC5maWx0ZXIodiA9PiB2Lmxlbmd0aCA+IDApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=","// src/lib/presentation/stores/auth.store.ts\nimport { Injectable, inject, signal, NgZone } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { of, tap, catchError } from 'rxjs';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { TokenRepository } from '../../repositories/token.repository';\nimport * as i0 from \"@angular/core\";\nexport class AuthStore {\n authRepository = inject(AuthRepository);\n tokenRepository = inject(TokenRepository);\n router = inject(Router);\n ngZone = inject(NgZone);\n // Authentication state signals\n _isAuthenticated = signal(false, ...(ngDevMode ? [{ debugName: \"_isAuthenticated\" }] : []));\n _isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"_isLoading\" }] : []));\n _user = signal(null, ...(ngDevMode ? [{ debugName: \"_user\" }] : []));\n // Public readonly signals\n isAuthenticated = this._isAuthenticated.asReadonly();\n isLoading = this._isLoading.asReadonly();\n user = this._user.asReadonly();\n // Private refresh token timeout (instead of interval)\n refreshTokenTimeout;\n refreshInProgress$;\n constructor() {\n this.initializeAuthentication();\n }\n /**\n * Initialize authentication state on app startup\n */\n initializeAuthentication() {\n this._isLoading.set(true);\n try {\n const isAuthenticated = this.tokenRepository.isAuthenticated();\n this._isAuthenticated.set(isAuthenticated);\n if (isAuthenticated) {\n const userData = this.tokenRepository.getUserData();\n this._user.set(userData);\n this.scheduleTokenRefresh();\n }\n }\n catch {\n this.logout();\n }\n finally {\n this._isLoading.set(false);\n }\n }\n /**\n * Schedule token refresh based on actual expiration time\n */\n scheduleTokenRefresh() {\n const accessToken = this.tokenRepository.getToken();\n if (!accessToken) {\n return;\n }\n try {\n const decodedToken = this.decodeToken(accessToken);\n const currentTime = Math.floor(Date.now() / 1000);\n const timeUntilExpiry = decodedToken.exp - currentTime;\n // Refresh 5 minutes before expiry (300 seconds)\n const refreshTime = Math.max((timeUntilExpiry - 300) * 1000, 1000);\n // Clear any existing timeout\n if (this.refreshTokenTimeout) {\n clearTimeout(this.refreshTokenTimeout);\n }\n this.ngZone.runOutsideAngular(() => {\n this.refreshTokenTimeout = window.setTimeout(() => {\n this.ngZone.run(() => {\n // Check if refresh is still needed before executing\n if (this.tokenRepository.needsRefresh()) {\n this.refreshToken().subscribe();\n }\n });\n }, refreshTime);\n });\n }\n catch {\n // Silent fail - token might be invalid\n }\n }\n /**\n * Stop token refresh timer\n */\n stopTokenRefreshTimer() {\n if (this.refreshTokenTimeout) {\n clearTimeout(this.refreshTokenTimeout);\n this.refreshTokenTimeout = undefined;\n }\n }\n /**\n * Refresh authentication tokens\n */\n refreshToken() {\n // Return existing refresh request if one is in progress\n if (this.refreshInProgress$) {\n return this.refreshInProgress$;\n }\n const userData = this.tokenRepository.getUserData();\n const refreshToken = this.tokenRepository.getRefreshToken();\n if (!userData?.email || !refreshToken) {\n this.logout();\n return of(null);\n }\n this.refreshInProgress$ = this.authRepository\n .refreshToken({\n email: userData.email,\n refreshToken,\n })\n .pipe(tap(tokens => {\n this.setAuthenticated(tokens);\n }), catchError(() => {\n this.logout();\n return of(null);\n }), tap({\n complete: () => {\n this.refreshInProgress$ = undefined;\n },\n error: () => {\n this.refreshInProgress$ = undefined;\n },\n }));\n return this.refreshInProgress$;\n }\n /**\n * Set authentication state after successful login\n */\n setAuthenticated(tokens, rememberMe = false) {\n this.tokenRepository.saveTokens(tokens, rememberMe);\n this._isAuthenticated.set(true);\n const userData = this.tokenRepository.getUserData();\n this._user.set(userData);\n this.scheduleTokenRefresh();\n }\n /**\n * Logout user and clear all authentication data\n */\n logout() {\n const user = this._user();\n if (user) {\n // Call server-side logout first\n this.authRepository.logout(user.email, '').subscribe({\n next: () => {\n // Server logout successful, clear client-side data\n this.performClientLogout();\n },\n error: () => {\n // Server logout failed, still clear client-side data for security\n this.performClientLogout();\n },\n });\n }\n else {\n // No user data, just clear client-side data\n this.performClientLogout();\n }\n }\n /**\n * Perform client-side logout operations\n */\n performClientLogout() {\n this.stopTokenRefreshTimer();\n this.tokenRepository.clearTokens();\n this._isAuthenticated.set(false);\n this._user.set(null);\n // Navigate to login page\n this.router.navigate(['/auth']);\n }\n /**\n * Check if user is authenticated\n */\n checkAuthentication() {\n const isAuthenticated = this.tokenRepository.isAuthenticated();\n this._isAuthenticated.set(isAuthenticated);\n if (!isAuthenticated) {\n this.logout();\n }\n return isAuthenticated;\n }\n /**\n * Decode JWT token\n */\n decodeToken(token) {\n try {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(atob(base64)\n .split('')\n .map(c => {\n return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`;\n })\n .join(''));\n return JSON.parse(jsonPayload);\n }\n catch {\n throw new Error('Invalid token format');\n }\n }\n /**\n * Cleanup on store destruction\n */\n ngOnDestroy() {\n this.stopTokenRefreshTimer();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthStore, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi91aS9zdG9yZXMvYXV0aC5zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0Q0FBNEM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBTXRFLE1BQU0sT0FBTyxTQUFTO0lBQ0gsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV6QywrQkFBK0I7SUFDZCxnQkFBZ0IsR0FBRyxNQUFNLENBQVUsS0FBSyw0REFBQyxDQUFDO0lBQzFDLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxzREFBQyxDQUFDO0lBQ3BDLEtBQUssR0FBRyxNQUFNLENBQWtCLElBQUksaURBQUMsQ0FBQztJQUV2RCwwQkFBMEI7SUFDakIsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyRCxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFD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QUFXLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQzt1R0EvTlUsU0FBUzsyR0FBVCxTQUFTLGNBRlIsTUFBTTs7MkZBRVAsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvbGliL3ByZXNlbnRhdGlvbi9zdG9yZXMvYXV0aC5zdG9yZS50c1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBzaWduYWwsIE9uRGVzdHJveSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRhcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFJlcG9zaXRvcnkgfSBmcm9tICcuLi8uLi9kb21haW4vcmVwb3NpdG9yaWVzL2F1dGgucmVwb3NpdG9yeSc7XG5pbXBvcnQgeyBUb2tlblJlcG9zaXRvcnkgfSBmcm9tICcuLi8uLi9yZXBvc2l0b3JpZXMvdG9rZW4ucmVwb3NpdG9yeSc7XG5pbXBvcnQgeyBBdXRoVG9rZW5zLCBVc2VyRGF0YSwgRGVjb2RlZFRva2VuIH0gZnJvbSAnQGFjb250cGx1cy9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhTdG9yZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFJlcG9zaXRvcnkgPSBpbmplY3QoQXV0aFJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRva2VuUmVwb3NpdG9yeSA9IGluamVjdChUb2tlblJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIC8vIEF1dGhlbnRpY2F0aW9uIHN0YXRlIHNpZ25hbHNcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdXRoZW50aWNhdGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNMb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXNlciA9IHNpZ25hbDxVc2VyRGF0YSB8IG51bGw+KG51bGwpO1xuXG4gIC8vIFB1YmxpYyByZWFkb25seSBzaWduYWxzXG4gIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZCA9IHRoaXMuX2lzQXV0aGVudGljYXRlZC5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGlzTG9hZGluZyA9IHRoaXMuX2lzTG9hZGluZy5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IHVzZXIgPSB0aGlzLl91c2VyLmFzUmVhZG9ubHkoKTtcblxuICAvLyBQcml2YXRlIHJlZnJlc2ggdG9rZW4gdGltZW91dCAoaW5zdGVhZCBvZiBpbnRlcnZhbClcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5UaW1lb3V0PzogbnVtYmVyO1xuICBwcml2YXRlIHJlZnJlc2hJblByb2dyZXNzJD86IE9ic2VydmFibGU8QXV0aFRva2VucyB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUF1dGhlbnRpY2F0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhdXRoZW50aWNhdGlvbiBzdGF0ZSBvbiBhcHAgc3RhcnR1cFxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQXV0aGVudGljYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5faXNMb2FkaW5nLnNldCh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLnRva2VuUmVwb3NpdG9yeS5pc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICAgIHRoaXMuX2lzQXV0aGVudGljYXRlZC5zZXQoaXNBdXRoZW50aWNhdGVkKTtcblxuICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICBjb25zdCB1c2VyRGF0YSA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFVzZXJEYXRhKCk7XG4gICAgICAgIHRoaXMuX3VzZXIuc2V0KHVzZXJEYXRhKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVRva2VuUmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5faXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIHRva2VuIHJlZnJlc2ggYmFzZWQgb24gYWN0dWFsIGV4cGlyYXRpb24gdGltZVxuICAgKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZVRva2VuUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFRva2VuKCk7XG4gICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSB0aGlzLmRlY29kZVRva2VuKGFjY2Vzc1Rva2VuKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICBjb25zdCB0aW1lVW50aWxFeHBpcnkgPSBkZWNvZGVkVG9rZW4uZXhwIC0gY3VycmVudFRpbWU7XG5cbiAgICAgIC8vIFJlZnJlc2ggNSBtaW51dGVzIGJlZm9yZSBleHBpcnkgKDMwMCBzZWNvbmRzKVxuICAgICAgY29uc3QgcmVmcmVzaFRpbWUgPSBNYXRoLm1heCgodGltZVVudGlsRXhwaXJ5IC0gMzAwKSAqIDEwMDAsIDEwMDApO1xuXG4gICAgICAvLyBDbGVhciBhbnkgZXhpc3RpbmcgdGltZW91dFxuICAgICAgaWYgKHRoaXMucmVmcmVzaFRva2VuVGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoVG9rZW5UaW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlZnJlc2ggaXMgc3RpbGwgbmVlZGVkIGJlZm9yZSBleGVjdXRpbmdcbiAgICAgICAgICAgIGlmICh0aGlzLnRva2VuUmVwb3NpdG9yeS5uZWVkc1JlZnJlc2goKSkge1xuICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbigpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCByZWZyZXNoVGltZSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNpbGVudCBmYWlsIC0gdG9rZW4gbWlnaHQgYmUgaW52YWxpZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRva2VuIHJlZnJlc2ggdGltZXJcbiAgICovXG4gIHByaXZhdGUgc3RvcFRva2VuUmVmcmVzaFRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlZnJlc2hUb2tlblRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUb2tlblRpbWVvdXQpO1xuICAgICAgdGhpcy5yZWZyZXNoVG9rZW5UaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIGF1dGhlbnRpY2F0aW9uIHRva2Vuc1xuICAgKi9cbiAgcmVmcmVzaFRva2VuKCk6IE9ic2VydmFibGU8QXV0aFRva2VucyB8IG51bGw+IHtcbiAgICAvLyBSZXR1cm4gZXhpc3RpbmcgcmVmcmVzaCByZXF1ZXN0IGlmIG9uZSBpcyBpbiBwcm9ncmVzc1xuICAgIGlmICh0aGlzLnJlZnJlc2hJblByb2dyZXNzJCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaEluUHJvZ3Jlc3MkO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJEYXRhID0gdGhpcy50b2tlblJlcG9zaXRvcnkuZ2V0VXNlckRhdGEoKTtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnRva2VuUmVwb3NpdG9yeS5nZXRSZWZyZXNoVG9rZW4oKTtcblxuICAgIGlmICghdXNlckRhdGE/LmVtYWlsIHx8ICFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoSW5Qcm9ncmVzcyQgPSB0aGlzLmF1dGhSZXBvc2l0b3J5XG4gICAgICAucmVmcmVzaFRva2VuKHtcbiAgICAgICAgZW1haWw6IHVzZXJEYXRhLmVtYWlsLFxuICAgICAgICByZWZyZXNoVG9rZW4sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCh0b2tlbnMgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0QXV0aGVudGljYXRlZCh0b2tlbnMpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoe1xuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hJblByb2dyZXNzJCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hJblByb2dyZXNzJCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoSW5Qcm9ncmVzcyQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGF1dGhlbnRpY2F0aW9uIHN0YXRlIGFmdGVyIHN1Y2Nlc3NmdWwgbG9naW5cbiAgICovXG4gIHNldEF1dGhlbnRpY2F0ZWQodG9rZW5zOiBBdXRoVG9rZW5zLCByZW1lbWJlck1lID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuUmVwb3NpdG9yeS5zYXZlVG9rZW5zKHRva2VucywgcmVtZW1iZXJNZSk7XG4gICAgdGhpcy5faXNBdXRoZW50aWNhdGVkLnNldCh0cnVlKTtcbiAgICBjb25zdCB1c2VyRGF0YSA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFVzZXJEYXRhKCk7XG4gICAgdGhpcy5fdXNlci5zZXQodXNlckRhdGEpO1xuICAgIHRoaXMuc2NoZWR1bGVUb2tlblJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dvdXQgdXNlciBhbmQgY2xlYXIgYWxsIGF1dGhlbnRpY2F0aW9uIGRhdGFcbiAgICovXG4gIGxvZ291dCgpOiB2b2lkIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlcigpO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICAvLyBDYWxsIHNlcnZlci1zaWRlIGxvZ291dCBmaXJzdFxuICAgICAgdGhpcy5hdXRoUmVwb3NpdG9yeS5sb2dvdXQodXNlci5lbWFpbCwgJycpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBTZXJ2ZXIgbG9nb3V0IHN1Y2Nlc3NmdWwsIGNsZWFyIGNsaWVudC1zaWRlIGRhdGFcbiAgICAgICAgICB0aGlzLnBlcmZvcm1DbGllbnRMb2dvdXQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTZXJ2ZXIgbG9nb3V0IGZhaWxlZCwgc3RpbGwgY2xlYXIgY2xpZW50LXNpZGUgZGF0YSBmb3Igc2VjdXJpdHlcbiAgICAgICAgICB0aGlzLnBlcmZvcm1DbGllbnRMb2dvdXQoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyB1c2VyIGRhdGEsIGp1c3QgY2xlYXIgY2xpZW50LXNpZGUgZGF0YVxuICAgICAgdGhpcy5wZXJmb3JtQ2xpZW50TG9nb3V0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gY2xpZW50LXNpZGUgbG9nb3V0IG9wZXJhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgcGVyZm9ybUNsaWVudExvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BUb2tlblJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMudG9rZW5SZXBvc2l0b3J5LmNsZWFyVG9rZW5zKCk7XG4gICAgdGhpcy5faXNBdXRoZW50aWNhdGVkLnNldChmYWxzZSk7XG4gICAgdGhpcy5fdXNlci5zZXQobnVsbCk7XG5cbiAgICAvLyBOYXZpZ2F0ZSB0byBsb2dpbiBwYWdlXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXV0aCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB1c2VyIGlzIGF1dGhlbnRpY2F0ZWRcbiAgICovXG4gIGNoZWNrQXV0aGVudGljYXRpb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNBdXRoZW50aWNhdGVkID0gdGhpcy50b2tlblJlcG9zaXRvcnkuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgdGhpcy5faXNBdXRoZW50aWNhdGVkLnNldChpc0F1dGhlbnRpY2F0ZWQpO1xuXG4gICAgaWYgKCFpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQXV0aGVudGljYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGUgSldUIHRva2VuXG4gICAqL1xuICBwcml2YXRlIGRlY29kZVRva2VuKHRva2VuOiBzdHJpbmcpOiBEZWNvZGVkVG9rZW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlNjRVcmwgPSB0b2tlbi5zcGxpdCgnLicpWzFdO1xuICAgICAgY29uc3QgYmFzZTY0ID0gYmFzZTY0VXJsLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XG4gICAgICBjb25zdCBqc29uUGF5bG9hZCA9IGRlY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgYXRvYihiYXNlNjQpXG4gICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgIC5tYXAoYyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYCUke2AwMCR7Yy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKX1gO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25QYXlsb2FkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0b2tlbiBmb3JtYXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW51cCBvbiBzdG9yZSBkZXN0cnVjdGlvblxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wVG9rZW5SZWZyZXNoVGltZXIoKTtcbiAgfVxufVxuIl19","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport * as i0 from \"@angular/core\";\n/**\n * Service to manage URL redirection after authentication\n * Stores the intended URL when session is lost and redirects to it after successful login\n * SSR-compatible by checking platform before accessing sessionStorage\n */\nexport class UrlRedirectService {\n REDIRECT_URL_KEY = 'acp_redirect_url';\n EXCLUDED_ROUTES = [\n '/login',\n '/auth',\n '/register',\n '/forgot-password',\n '/reset-password',\n ];\n router = inject(Router);\n platformId = inject(PLATFORM_ID);\n document = inject(DOCUMENT);\n /**\n * Stores the current URL for later redirection\n * @param url - The URL to store (defaults to current URL)\n */\n storeIntendedUrl(url) {\n // Only store in browser environment\n if (!this.isBrowser()) {\n return;\n }\n const urlToStore = url || this.router.url;\n // Don't store authentication-related routes\n if (this.isExcludedRoute(urlToStore)) {\n return;\n }\n // Don't store URLs with query parameters that might contain sensitive data\n const urlWithoutParams = urlToStore.split('?')[0];\n this.getSessionStorage()?.setItem(this.REDIRECT_URL_KEY, urlWithoutParams);\n }\n /**\n * Gets the stored intended URL\n * @returns The stored URL or null if none exists\n */\n getIntendedUrl() {\n if (!this.isBrowser()) {\n return null;\n }\n return this.getSessionStorage()?.getItem(this.REDIRECT_URL_KEY) || null;\n }\n /**\n * Redirects to the stored URL and clears it from storage\n * @param defaultRoute - The default route to navigate to if no URL is stored\n */\n redirectToIntendedUrl(defaultRoute = '/') {\n const intendedUrl = this.getIntendedUrl();\n if (intendedUrl && !this.isExcludedRoute(intendedUrl)) {\n this.clearIntendedUrl();\n this.router.navigateByUrl(intendedUrl);\n }\n else {\n this.router.navigate([defaultRoute]);\n }\n }\n /**\n * Clears the stored intended URL\n */\n clearIntendedUrl() {\n if (!this.isBrowser()) {\n return;\n }\n this.getSessionStorage()?.removeItem(this.REDIRECT_URL_KEY);\n }\n /**\n * Checks if a URL should be excluded from redirection\n * @param url - The URL to check\n * @returns True if the URL should be excluded\n */\n isExcludedRoute(url) {\n return this.EXCLUDED_ROUTES.some(route => url.includes(route));\n }\n /**\n * Stores the current URL if it's not an excluded route\n * Useful for guards and interceptors\n */\n storeCurrentUrlIfAllowed() {\n const currentUrl = this.router.url;\n if (!this.isExcludedRoute(currentUrl)) {\n this.storeIntendedUrl(currentUrl);\n }\n }\n /**\n * Checks if we're running in a browser environment\n * @returns True if running in browser, false if SSR\n */\n isBrowser() {\n return isPlatformBrowser(this.platformId);\n }\n /**\n * Safely gets sessionStorage reference\n * @returns sessionStorage object or null if not available\n */\n getSessionStorage() {\n if (!this.isBrowser()) {\n return null;\n }\n try {\n return this.document.defaultView?.sessionStorage || null;\n }\n catch {\n // Handle cases where sessionStorage might be disabled\n return null;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UrlRedirectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UrlRedirectService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UrlRedirectService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXJlZGlyZWN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvc2VydmljZXMvdXJsLXJlZGlyZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRTlEOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ1osZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7SUFDdEMsZUFBZSxHQUFHO1FBQ2pDLFFBQVE7UUFDUixPQUFPO1FBQ1AsV0FBVztRQUNYLGtCQUFrQjtRQUNsQixpQkFBaUI7S0FDbEIsQ0FBQztJQUVlLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdDOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLEdBQVk7UUFDM0Isb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUUxQyw0Q0FBNEM7UUFDNUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTztRQUNULENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLFlBQVksR0FBRyxHQUFHO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUUxQyxJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZUFBZSxDQUFDLEdBQVc7UUFDakMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsd0JBQXdCO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssU0FBUztRQUNmLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQztRQUMzRCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asc0RBQXNEO1lBQ3RELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7dUdBbEhVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBQTEFURk9STV9JRCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIG1hbmFnZSBVUkwgcmVkaXJlY3Rpb24gYWZ0ZXIgYXV0aGVudGljYXRpb25cbiAqIFN0b3JlcyB0aGUgaW50ZW5kZWQgVVJMIHdoZW4gc2Vzc2lvbiBpcyBsb3N0IGFuZCByZWRpcmVjdHMgdG8gaXQgYWZ0ZXIgc3VjY2Vzc2Z1bCBsb2dpblxuICogU1NSLWNvbXBhdGlibGUgYnkgY2hlY2tpbmcgcGxhdGZvcm0gYmVmb3JlIGFjY2Vzc2luZyBzZXNzaW9uU3RvcmFnZVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVXJsUmVkaXJlY3RTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBSRURJUkVDVF9VUkxfS0VZID0gJ2FjcF9yZWRpcmVjdF91cmwnO1xuICBwcml2YXRlIHJlYWRvbmx5IEVYQ0xVREVEX1JPVVRFUyA9IFtcbiAgICAnL2xvZ2luJyxcbiAgICAnL2F1dGgnLFxuICAgICcvcmVnaXN0ZXInLFxuICAgICcvZm9yZ290LXBhc3N3b3JkJyxcbiAgICAnL3Jlc2V0LXBhc3N3b3JkJyxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBjdXJyZW50IFVSTCBmb3IgbGF0ZXIgcmVkaXJlY3Rpb25cbiAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gc3RvcmUgKGRlZmF1bHRzIHRvIGN1cnJlbnQgVVJMKVxuICAgKi9cbiAgc3RvcmVJbnRlbmRlZFVybCh1cmw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHN0b3JlIGluIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmxUb1N0b3JlID0gdXJsIHx8IHRoaXMucm91dGVyLnVybDtcblxuICAgIC8vIERvbid0IHN0b3JlIGF1dGhlbnRpY2F0aW9uLXJlbGF0ZWQgcm91dGVzXG4gICAgaWYgKHRoaXMuaXNFeGNsdWRlZFJvdXRlKHVybFRvU3RvcmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG9uJ3Qgc3RvcmUgVVJMcyB3aXRoIHF1ZXJ5IHBhcmFtZXRlcnMgdGhhdCBtaWdodCBjb250YWluIHNlbnNpdGl2ZSBkYXRhXG4gICAgY29uc3QgdXJsV2l0aG91dFBhcmFtcyA9IHVybFRvU3RvcmUuc3BsaXQoJz8nKVswXTtcbiAgICB0aGlzLmdldFNlc3Npb25TdG9yYWdlKCk/LnNldEl0ZW0odGhpcy5SRURJUkVDVF9VUkxfS0VZLCB1cmxXaXRob3V0UGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdG9yZWQgaW50ZW5kZWQgVVJMXG4gICAqIEByZXR1cm5zIFRoZSBzdG9yZWQgVVJMIG9yIG51bGwgaWYgbm9uZSBleGlzdHNcbiAgICovXG4gIGdldEludGVuZGVkVXJsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFNlc3Npb25TdG9yYWdlKCk/LmdldEl0ZW0odGhpcy5SRURJUkVDVF9VUkxfS0VZKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byB0aGUgc3RvcmVkIFVSTCBhbmQgY2xlYXJzIGl0IGZyb20gc3RvcmFnZVxuICAgKiBAcGFyYW0gZGVmYXVsdFJvdXRlIC0gVGhlIGRlZmF1bHQgcm91dGUgdG8gbmF2aWdhdGUgdG8gaWYgbm8gVVJMIGlzIHN0b3JlZFxuICAgKi9cbiAgcmVkaXJlY3RUb0ludGVuZGVkVXJsKGRlZmF1bHRSb3V0ZSA9ICcvJyk6IHZvaWQge1xuICAgIGNvbnN0IGludGVuZGVkVXJsID0gdGhpcy5nZXRJbnRlbmRlZFVybCgpO1xuXG4gICAgaWYgKGludGVuZGVkVXJsICYmICF0aGlzLmlzRXhjbHVkZWRSb3V0ZShpbnRlbmRlZFVybCkpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnRlbmRlZFVybCgpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChpbnRlbmRlZFVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtkZWZhdWx0Um91dGVdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBzdG9yZWQgaW50ZW5kZWQgVVJMXG4gICAqL1xuICBjbGVhckludGVuZGVkVXJsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmdldFNlc3Npb25TdG9yYWdlKCk/LnJlbW92ZUl0ZW0odGhpcy5SRURJUkVDVF9VUkxfS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBVUkwgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gcmVkaXJlY3Rpb25cbiAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gY2hlY2tcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgVVJMIHNob3VsZCBiZSBleGNsdWRlZFxuICAgKi9cbiAgcHJpdmF0ZSBpc0V4Y2x1ZGVkUm91dGUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5FWENMVURFRF9ST1VURVMuc29tZShyb3V0ZSA9PiB1cmwuaW5jbHVkZXMocm91dGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIGN1cnJlbnQgVVJMIGlmIGl0J3Mgbm90IGFuIGV4Y2x1ZGVkIHJvdXRlXG4gICAqIFVzZWZ1bCBmb3IgZ3VhcmRzIGFuZCBpbnRlcmNlcHRvcnNcbiAgICovXG4gIHN0b3JlQ3VycmVudFVybElmQWxsb3dlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIGlmICghdGhpcy5pc0V4Y2x1ZGVkUm91dGUoY3VycmVudFVybCkpIHtcbiAgICAgIHRoaXMuc3RvcmVJbnRlbmRlZFVybChjdXJyZW50VXJsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBicm93c2VyIGVudmlyb25tZW50XG4gICAqIEByZXR1cm5zIFRydWUgaWYgcnVubmluZyBpbiBicm93c2VyLCBmYWxzZSBpZiBTU1JcbiAgICovXG4gIHByaXZhdGUgaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBnZXRzIHNlc3Npb25TdG9yYWdlIHJlZmVyZW5jZVxuICAgKiBAcmV0dXJucyBzZXNzaW9uU3RvcmFnZSBvYmplY3Qgb3IgbnVsbCBpZiBub3QgYXZhaWxhYmxlXG4gICAqL1xuICBwcml2YXRlIGdldFNlc3Npb25TdG9yYWdlKCk6IFN0b3JhZ2UgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc/LnNlc3Npb25TdG9yYWdlIHx8IG51bGw7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgc2Vzc2lvblN0b3JhZ2UgbWlnaHQgYmUgZGlzYWJsZWRcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19","// src/lib/application/use-cases/login.use-case.ts\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { tap } from 'rxjs';\nimport { BaseUseCase } from '@acontplus/ng-infrastructure';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { AuthStore } from '../../ui/stores/auth.store';\nimport { UrlRedirectService } from '../../services/url-redirect.service';\nimport * as i0 from \"@angular/core\";\nexport class LoginUseCase extends BaseUseCase {\n authRepository = inject(AuthRepository);\n authStore = inject(AuthStore);\n router = inject(Router);\n urlRedirectService = inject(UrlRedirectService);\n execute(request) {\n return this.authRepository.login(request).pipe(tap(tokens => {\n // Set authentication state with rememberMe preference\n this.authStore.setAuthenticated(tokens, request.rememberMe ?? false);\n // Redirect to intended URL or default route\n this.urlRedirectService.redirectToIntendedUrl('/');\n }));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginUseCase, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginUseCase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginUseCase, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4udXNlLWNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vdXNlLWNhc2VzL2xvZ2luLnVzZS1jYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFLekUsTUFBTSxPQUFPLFlBQWEsU0FBUSxXQUFxQztJQUNwRCxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUVqRSxPQUFPLENBQUMsT0FBcUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzVDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNYLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBRXJFLDRDQUE0QztZQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7dUdBaEJVLFlBQVk7MkdBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvbG9naW4udXNlLWNhc2UudHNcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZVVzZUNhc2UgfSBmcm9tICdAYWNvbnRwbHVzL25nLWluZnJhc3RydWN0dXJlJztcbmltcG9ydCB7IEF1dGhSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLi4vZG9tYWluL3JlcG9zaXRvcmllcy9hdXRoLnJlcG9zaXRvcnknO1xuaW1wb3J0IHsgTG9naW5SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluL21vZGVscy9hdXRoJztcbmltcG9ydCB7IEF1dGhUb2tlbnMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFN0b3JlIH0gZnJvbSAnLi4vLi4vdWkvc3RvcmVzL2F1dGguc3RvcmUnO1xuaW1wb3J0IHsgVXJsUmVkaXJlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXJsLXJlZGlyZWN0LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9naW5Vc2VDYXNlIGV4dGVuZHMgQmFzZVVzZUNhc2U8TG9naW5SZXF1ZXN0LCBBdXRoVG9rZW5zPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFJlcG9zaXRvcnkgPSBpbmplY3QoQXV0aFJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTdG9yZSA9IGluamVjdChBdXRoU3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVybFJlZGlyZWN0U2VydmljZSA9IGluamVjdChVcmxSZWRpcmVjdFNlcnZpY2UpO1xuXG4gIGV4ZWN1dGUocmVxdWVzdDogTG9naW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFJlcG9zaXRvcnkubG9naW4ocmVxdWVzdCkucGlwZShcbiAgICAgIHRhcCh0b2tlbnMgPT4ge1xuICAgICAgICAvLyBTZXQgYXV0aGVudGljYXRpb24gc3RhdGUgd2l0aCByZW1lbWJlck1lIHByZWZlcmVuY2VcbiAgICAgICAgdGhpcy5hdXRoU3RvcmUuc2V0QXV0aGVudGljYXRlZCh0b2tlbnMsIHJlcXVlc3QucmVtZW1iZXJNZSA/PyBmYWxzZSk7XG5cbiAgICAgICAgLy8gUmVkaXJlY3QgdG8gaW50ZW5kZWQgVVJMIG9yIGRlZmF1bHQgcm91dGVcbiAgICAgICAgdGhpcy51cmxSZWRpcmVjdFNlcnZpY2UucmVkaXJlY3RUb0ludGVuZGVkVXJsKCcvJyk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=","// src/lib/application/use-cases/register.use-case.ts\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { tap } from 'rxjs';\nimport { BaseUseCase } from '@acontplus/ng-infrastructure';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { AuthStore } from '../../ui/stores/auth.store';\nimport * as i0 from \"@angular/core\";\nexport class RegisterUseCase extends BaseUseCase {\n authRepository = inject(AuthRepository);\n authStore = inject(AuthStore);\n router = inject(Router);\n execute(request) {\n return this.authRepository.register(request).pipe(tap(tokens => {\n // Set authentication state\n this.authStore.setAuthenticated(tokens);\n // Navigate to main page\n this.router.navigate(['/']);\n }));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RegisterUseCase, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RegisterUseCase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RegisterUseCase, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIudXNlLWNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vdXNlLWNhc2VzL3JlZ2lzdGVyLnVzZS1jYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsV0FBd0M7SUFDMUQsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFekMsT0FBTyxDQUFDLE9BQXdCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMvQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDWCwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV4Qyx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO3VHQWZVLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvcmVnaXN0ZXIudXNlLWNhc2UudHNcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZVVzZUNhc2UgfSBmcm9tICdAYWNvbnRwbHVzL25nLWluZnJhc3RydWN0dXJlJztcbmltcG9ydCB7IEF1dGhSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLi4vZG9tYWluL3JlcG9zaXRvcmllcy9hdXRoLnJlcG9zaXRvcnknO1xuaW1wb3J0IHsgUmVnaXN0ZXJSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluL21vZGVscy9hdXRoJztcbmltcG9ydCB7IEF1dGhUb2tlbnMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFN0b3JlIH0gZnJvbSAnLi4vLi4vdWkvc3RvcmVzL2F1dGguc3RvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJVc2VDYXNlIGV4dGVuZHMgQmFzZVVzZUNhc2U8UmVnaXN0ZXJSZXF1ZXN0LCBBdXRoVG9rZW5zPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFJlcG9zaXRvcnkgPSBpbmplY3QoQXV0aFJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTdG9yZSA9IGluamVjdChBdXRoU3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIGV4ZWN1dGUocmVxdWVzdDogUmVnaXN0ZXJSZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFJlcG9zaXRvcnkucmVnaXN0ZXIocmVxdWVzdCkucGlwZShcbiAgICAgIHRhcCh0b2tlbnMgPT4ge1xuICAgICAgICAvLyBTZXQgYXV0aGVudGljYXRpb24gc3RhdGVcbiAgICAgICAgdGhpcy5hdXRoU3RvcmUuc2V0QXV0aGVudGljYXRlZCh0b2tlbnMpO1xuXG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIG1haW4gcGFnZVxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=","// src/lib/application/use-cases/refresh-token.use-case.ts\nimport { Injectable, inject } from '@angular/core';\nimport { throwError, catchError, tap } from 'rxjs';\nimport { BaseUseCase } from '@acontplus/ng-infrastructure';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { TokenRepository } from '../../repositories/token.repository';\nimport { AuthStore } from '../../ui/stores/auth.store';\nimport * as i0 from \"@angular/core\";\nexport class RefreshTokenUseCase extends BaseUseCase {\n authRepository = inject(AuthRepository);\n tokenRepository = inject(TokenRepository);\n authStore = inject(AuthStore);\n execute() {\n const userData = this.tokenRepository.getUserData();\n const refreshToken = this.tokenRepository.getRefreshToken();\n if (!userData?.email || !refreshToken || refreshToken.trim().length === 0) {\n const error = new Error('No refresh token or email available');\n return throwError(() => error);\n }\n return this.authRepository\n .refreshToken({\n email: userData.email,\n refreshToken,\n })\n .pipe(tap(tokens => {\n // Preserve the rememberMe preference from the current token storage\n const rememberMe = this.tokenRepository.isRememberMeEnabled();\n // Update authentication state\n this.authStore.setAuthenticated(tokens, rememberMe);\n }), catchError(error => {\n // Don't logout here, let the interceptor handle it\n return throwError(() => error);\n }));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RefreshTokenUseCase, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RefreshTokenUseCase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RefreshTokenUseCase, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi51c2UtY2FzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvcmVmcmVzaC10b2tlbi51c2UtY2FzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQTZCO0lBQ25ELGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRS9DLE9BQU87UUFDTCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFNUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjO2FBQ3ZCLFlBQVksQ0FBQztZQUNaLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztZQUNyQixZQUFZO1NBQ2IsQ0FBQzthQUNELElBQUksQ0FDSCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDWCxvRUFBb0U7WUFDcEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzlELDhCQUE4QjtZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsbURBQW1EO1lBQ25ELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO3VHQS9CVSxtQkFBbUI7MkdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvcmVmcmVzaC10b2tlbi51c2UtY2FzZS50c1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VVc2VDYXNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1pbmZyYXN0cnVjdHVyZSc7XG5pbXBvcnQgeyBBdXRoUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2RvbWFpbi9yZXBvc2l0b3JpZXMvYXV0aC5yZXBvc2l0b3J5JztcbmltcG9ydCB7IFRva2VuUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL3JlcG9zaXRvcmllcy90b2tlbi5yZXBvc2l0b3J5JztcbmltcG9ydCB7IEF1dGhUb2tlbnMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFN0b3JlIH0gZnJvbSAnLi4vLi4vdWkvc3RvcmVzL2F1dGguc3RvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVmcmVzaFRva2VuVXNlQ2FzZSBleHRlbmRzIEJhc2VVc2VDYXNlPHZvaWQsIEF1dGhUb2tlbnM+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoUmVwb3NpdG9yeSA9IGluamVjdChBdXRoUmVwb3NpdG9yeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9rZW5SZXBvc2l0b3J5ID0gaW5qZWN0KFRva2VuUmVwb3NpdG9yeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFN0b3JlID0gaW5qZWN0KEF1dGhTdG9yZSk7XG5cbiAgZXhlY3V0ZSgpOiBPYnNlcnZhYmxlPEF1dGhUb2tlbnM+IHtcbiAgICBjb25zdCB1c2VyRGF0YSA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFVzZXJEYXRhKCk7XG4gICAgY29uc3QgcmVmcmVzaFRva2VuID0gdGhpcy50b2tlblJlcG9zaXRvcnkuZ2V0UmVmcmVzaFRva2VuKCk7XG5cbiAgICBpZiAoIXVzZXJEYXRhPy5lbWFpbCB8fCAhcmVmcmVzaFRva2VuIHx8IHJlZnJlc2hUb2tlbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignTm8gcmVmcmVzaCB0b2tlbiBvciBlbWFpbCBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hdXRoUmVwb3NpdG9yeVxuICAgICAgLnJlZnJlc2hUb2tlbih7XG4gICAgICAgIGVtYWlsOiB1c2VyRGF0YS5lbWFpbCxcbiAgICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAodG9rZW5zID0+IHtcbiAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgcmVtZW1iZXJNZSBwcmVmZXJlbmNlIGZyb20gdGhlIGN1cnJlbnQgdG9rZW4gc3RvcmFnZVxuICAgICAgICAgIGNvbnN0IHJlbWVtYmVyTWUgPSB0aGlzLnRva2VuUmVwb3NpdG9yeS5pc1JlbWVtYmVyTWVFbmFibGVkKCk7XG4gICAgICAgICAgLy8gVXBkYXRlIGF1dGhlbnRpY2F0aW9uIHN0YXRlXG4gICAgICAgICAgdGhpcy5hdXRoU3RvcmUuc2V0QXV0aGVudGljYXRlZCh0b2tlbnMsIHJlbWVtYmVyTWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgLy8gRG9uJ3QgbG9nb3V0IGhlcmUsIGxldCB0aGUgaW50ZXJjZXB0b3IgaGFuZGxlIGl0XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==","// src/lib/application/use-cases/logout.use-case.ts\nimport { Injectable, inject } from '@angular/core';\nimport { of, tap } from 'rxjs';\nimport { BaseUseCase } from '@acontplus/ng-infrastructure';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { TokenRepository } from '../../repositories/token.repository';\nimport { AuthStore } from '../../ui/stores/auth.store';\nimport * as i0 from \"@angular/core\";\nexport class LogoutUseCase extends BaseUseCase {\n authRepository = inject(AuthRepository);\n tokenRepository = inject(TokenRepository);\n authStore = inject(AuthStore);\n execute() {\n const userData = this.tokenRepository.getUserData();\n const refreshToken = this.tokenRepository.getRefreshToken();\n if (userData?.email && refreshToken && refreshToken.length > 0) {\n return this.authRepository\n .logout(userData.email, refreshToken)\n .pipe(tap(() => this.cleanup()));\n }\n this.cleanup();\n return of(void 0);\n }\n cleanup() {\n // Use auth store for centralized logout\n this.authStore.logout();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LogoutUseCase, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LogoutUseCase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LogoutUseCase, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nb3V0LnVzZS1jYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctYXV0aC9zcmMvbGliL2FwcGxpY2F0aW9uL3VzZS1jYXNlcy9sb2dvdXQudXNlLWNhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbURBQW1EO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLGFBQWMsU0FBUSxXQUF1QjtJQUN2QyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUvQyxPQUFPO1FBQ0wsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTVELElBQUksUUFBUSxFQUFFLEtBQUssSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxPQUFPLElBQUksQ0FBQyxjQUFjO2lCQUN2QixNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7aUJBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRU8sT0FBTztRQUNiLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzFCLENBQUM7dUdBdEJVLGFBQWE7MkdBQWIsYUFBYSxjQUZaLE1BQU07OzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvbG9nb3V0LnVzZS1jYXNlLnRzXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VVc2VDYXNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1pbmZyYXN0cnVjdHVyZSc7XG5pbXBvcnQgeyBBdXRoUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2RvbWFpbi9yZXBvc2l0b3JpZXMvYXV0aC5yZXBvc2l0b3J5JztcbmltcG9ydCB7IFRva2VuUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL3JlcG9zaXRvcmllcy90b2tlbi5yZXBvc2l0b3J5JztcbmltcG9ydCB7IEF1dGhTdG9yZSB9IGZyb20gJy4uLy4uL3VpL3N0b3Jlcy9hdXRoLnN0b3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExvZ291dFVzZUNhc2UgZXh0ZW5kcyBCYXNlVXNlQ2FzZTx2b2lkLCB2b2lkPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFJlcG9zaXRvcnkgPSBpbmplY3QoQXV0aFJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRva2VuUmVwb3NpdG9yeSA9IGluamVjdChUb2tlblJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTdG9yZSA9IGluamVjdChBdXRoU3RvcmUpO1xuXG4gIGV4ZWN1dGUoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgdXNlckRhdGEgPSB0aGlzLnRva2VuUmVwb3NpdG9yeS5nZXRVc2VyRGF0YSgpO1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFJlZnJlc2hUb2tlbigpO1xuXG4gICAgaWYgKHVzZXJEYXRhPy5lbWFpbCAmJiByZWZyZXNoVG9rZW4gJiYgcmVmcmVzaFRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmF1dGhSZXBvc2l0b3J5XG4gICAgICAgIC5sb2dvdXQodXNlckRhdGEuZW1haWwsIHJlZnJlc2hUb2tlbilcbiAgICAgICAgLnBpcGUodGFwKCgpID0+IHRoaXMuY2xlYW51cCgpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgcmV0dXJuIG9mKHZvaWQgMCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXAoKTogdm9pZCB7XG4gICAgLy8gVXNlIGF1dGggc3RvcmUgZm9yIGNlbnRyYWxpemVkIGxvZ291dFxuICAgIHRoaXMuYXV0aFN0b3JlLmxvZ291dCgpO1xuICB9XG59XG4iXX0=","// src/lib/application/use-cases/index.ts\nexport * from './login.use-case';\nexport * from './register.use-case';\nexport * from './refresh-token.use-case';\nexport * from './logout.use-case';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vdXNlLWNhc2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vbG9naW4udXNlLWNhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlci51c2UtY2FzZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlZnJlc2gtdG9rZW4udXNlLWNhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2dvdXQudXNlLWNhc2UnO1xuIl19","// src/lib/application/index.ts\nexport * from './use-cases';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi9pbmRleC50c1xuZXhwb3J0ICogZnJvbSAnLi91c2UtY2FzZXMnO1xuIl19","// src/lib/data/repositories/auth-http.repository.ts\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { AUTH_API } from '@acontplus/ng-config';\nimport * as i0 from \"@angular/core\";\nfunction getDeviceInfo() {\n return `${navigator.platform ?? 'Unknown'} - ${navigator.userAgent}`;\n}\nexport class AuthHttpRepository extends AuthRepository {\n http = inject(HttpClient);\n URL = `${AUTH_API.AUTH}`;\n login(request) {\n return this.http.post(`${this.URL}login`, request, {\n headers: {\n 'Device-Info': getDeviceInfo(),\n },\n withCredentials: true,\n });\n }\n register(request) {\n return this.http.post(`${this.URL}register`, request, {\n headers: {\n 'Device-Info': getDeviceInfo(),\n },\n withCredentials: true,\n });\n }\n refreshToken(request) {\n return this.http.post(`${this.URL}refresh`, request, {\n headers: {\n 'Device-Info': getDeviceInfo(),\n },\n withCredentials: true,\n });\n }\n logout(email, refreshToken) {\n return this.http.post(`${this.URL}logout`, { email, refreshToken: refreshToken || undefined }, {\n headers: {},\n withCredentials: true, // Ensure cookies are sent\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthHttpRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthHttpRepository, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthHttpRepository, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1odHRwLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZGF0YS9yZXBvc2l0b3JpZXMvYXV0aC1odHRwLnJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9EO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFHM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUVoRCxTQUFTLGFBQWE7SUFDcEIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLElBQUksU0FBUyxNQUFNLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN2RSxDQUFDO0FBS0QsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFDbkMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFMUMsS0FBSyxDQUFDLE9BQXFCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLEVBQUUsT0FBTyxFQUFFO1lBQzdELE9BQU8sRUFBRTtnQkFDUCxhQUFhLEVBQUUsYUFBYSxFQUFFO2FBQy9CO1lBQ0QsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUF3QjtRQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLE9BQU8sRUFBRTtZQUNoRSxPQUFPLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFLGFBQWEsRUFBRTthQUMvQjtZQUNELGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBNEI7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBYSxHQUFHLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxPQUFPLEVBQUU7WUFDL0QsT0FBTyxFQUFFO2dCQUNQLGFBQWEsRUFBRSxhQUFhLEVBQUU7YUFDL0I7WUFDRCxlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWEsRUFBRSxZQUFvQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFDbkIsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksSUFBSSxTQUFTLEVBQUUsRUFDbEQ7WUFDRSxPQUFPLEVBQUUsRUFBRTtZQUNYLGVBQWUsRUFBRSxJQUFJLEVBQUUsMEJBQTBCO1NBQ2xELENBQ0YsQ0FBQztJQUNKLENBQUM7dUdBeENVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvbGliL2RhdGEvcmVwb3NpdG9yaWVzL2F1dGgtaHR0cC5yZXBvc2l0b3J5LnRzXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2RvbWFpbi9yZXBvc2l0b3JpZXMvYXV0aC5yZXBvc2l0b3J5JztcbmltcG9ydCB7IExvZ2luUmVxdWVzdCwgUmVnaXN0ZXJSZXF1ZXN0LCBSZWZyZXNoVG9rZW5SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluL21vZGVscy9hdXRoJztcbmltcG9ydCB7IEF1dGhUb2tlbnMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgQVVUSF9BUEkgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5cbmZ1bmN0aW9uIGdldERldmljZUluZm8oKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke25hdmlnYXRvci5wbGF0Zm9ybSA/PyAnVW5rbm93bid9IC0gJHtuYXZpZ2F0b3IudXNlckFnZW50fWA7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoSHR0cFJlcG9zaXRvcnkgZXh0ZW5kcyBBdXRoUmVwb3NpdG9yeSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBVUkwgPSBgJHtBVVRIX0FQSS5BVVRIfWA7XG5cbiAgbG9naW4ocmVxdWVzdDogTG9naW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEF1dGhUb2tlbnM+KGAke3RoaXMuVVJMfWxvZ2luYCwgcmVxdWVzdCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnRGV2aWNlLUluZm8nOiBnZXREZXZpY2VJbmZvKCksXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcmVnaXN0ZXIocmVxdWVzdDogUmVnaXN0ZXJSZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEF1dGhUb2tlbnM+KGAke3RoaXMuVVJMfXJlZ2lzdGVyYCwgcmVxdWVzdCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnRGV2aWNlLUluZm8nOiBnZXREZXZpY2VJbmZvKCksXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaFRva2VuKHJlcXVlc3Q6IFJlZnJlc2hUb2tlblJlcXVlc3QpOiBPYnNlcnZhYmxlPEF1dGhUb2tlbnM+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXV0aFRva2Vucz4oYCR7dGhpcy5VUkx9cmVmcmVzaGAsIHJlcXVlc3QsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0RldmljZS1JbmZvJzogZ2V0RGV2aWNlSW5mbygpLFxuICAgICAgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGxvZ291dChlbWFpbDogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDx2b2lkPihcbiAgICAgIGAke3RoaXMuVVJMfWxvZ291dGAsXG4gICAgICB7IGVtYWlsLCByZWZyZXNoVG9rZW46IHJlZnJlc2hUb2tlbiB8fCB1bmRlZmluZWQgfSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSwgLy8gRW5zdXJlIGNvb2tpZXMgYXJlIHNlbnRcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIl19","// src/lib/data/repositories/index.ts\nexport * from './auth-http.repository';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZGF0YS9yZXBvc2l0b3JpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUNBQXFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvbGliL2RhdGEvcmVwb3NpdG9yaWVzL2luZGV4LnRzXG5leHBvcnQgKiBmcm9tICcuL2F1dGgtaHR0cC5yZXBvc2l0b3J5JztcbiJdfQ==","// src/lib/data/index.ts\nexport * from './repositories';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZGF0YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvZGF0YS9pbmRleC50c1xuZXhwb3J0ICogZnJvbSAnLi9yZXBvc2l0b3JpZXMnO1xuIl19","// src/lib/domain/models/auth.ts\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9kb21haW4vbW9kZWxzL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9kb21haW4vbW9kZWxzL2F1dGgudHNcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICByZW1lbWJlck1lPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlblJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbn1cbiJdfQ==","// src/lib/domain/models/index.ts\nexport * from './auth';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZG9tYWluL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsY0FBYyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvbGliL2RvbWFpbi9tb2RlbHMvaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vYXV0aCc7XG4iXX0=","// src/lib/domain/repositories/index.ts\nexport * from './auth.repository';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZG9tYWluL3JlcG9zaXRvcmllcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvZG9tYWluL3JlcG9zaXRvcmllcy9pbmRleC50c1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoLnJlcG9zaXRvcnknO1xuIl19","// src/lib/domain/index.ts\nexport * from './models';\nexport * from './repositories';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZG9tYWluL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9kb21haW4vaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVwb3NpdG9yaWVzJztcbiJdfQ==","import { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TokenRepository } from '../repositories/token.repository';\nimport { UrlRedirectService } from '../services/url-redirect.service';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nexport const authGuard = (_route, state) => {\n const tokenRepository = inject(TokenRepository);\n const router = inject(Router);\n const urlRedirectService = inject(UrlRedirectService);\n const environment = inject(ENVIRONMENT);\n if (tokenRepository.isAuthenticated()) {\n return true;\n }\n // Store the current URL for redirection after login\n urlRedirectService.storeIntendedUrl(state.url);\n // Redirect to login page (configurable via environment)\n router.navigate([`/${environment.loginRoute}`]);\n return false;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBaUIsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3hELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFeEMsSUFBSSxlQUFlLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRS9DLHdEQUF3RDtJQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVG9rZW5SZXBvc2l0b3J5IH0gZnJvbSAnLi4vcmVwb3NpdG9yaWVzL3Rva2VuLnJlcG9zaXRvcnknO1xuaW1wb3J0IHsgVXJsUmVkaXJlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXJsLXJlZGlyZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5cbmV4cG9ydCBjb25zdCBhdXRoR3VhcmQ6IENhbkFjdGl2YXRlRm4gPSAoX3JvdXRlLCBzdGF0ZSkgPT4ge1xuICBjb25zdCB0b2tlblJlcG9zaXRvcnkgPSBpbmplY3QoVG9rZW5SZXBvc2l0b3J5KTtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIGNvbnN0IHVybFJlZGlyZWN0U2VydmljZSA9IGluamVjdChVcmxSZWRpcmVjdFNlcnZpY2UpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgaWYgKHRva2VuUmVwb3NpdG9yeS5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgVVJMIGZvciByZWRpcmVjdGlvbiBhZnRlciBsb2dpblxuICB1cmxSZWRpcmVjdFNlcnZpY2Uuc3RvcmVJbnRlbmRlZFVybChzdGF0ZS51cmwpO1xuXG4gIC8vIFJlZGlyZWN0IHRvIGxvZ2luIHBhZ2UgKGNvbmZpZ3VyYWJsZSB2aWEgZW52aXJvbm1lbnQpXG4gIHJvdXRlci5uYXZpZ2F0ZShbYC8ke2Vudmlyb25tZW50LmxvZ2luUm91dGV9YF0pO1xuICByZXR1cm4gZmFsc2U7XG59O1xuIl19","import { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { catchError } from 'rxjs/operators';\nimport { throwError } from 'rxjs';\nimport { UrlRedirectService } from '../services/url-redirect.service';\nimport { TokenRepository } from '../repositories/token.repository';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\n/**\n * Interceptor that handles authentication errors and manages URL redirection\n * Captures the current URL when a 401 error occurs and redirects to login\n */\nexport const authRedirectInterceptor = (req, next) => {\n const router = inject(Router);\n const urlRedirectService = inject(UrlRedirectService);\n const tokenRepository = inject(TokenRepository);\n const environment = inject(ENVIRONMENT);\n return next(req).pipe(catchError((error) => {\n // Handle 401 Unauthorized errors\n if (error.status === 401) {\n // Only store and redirect if user was previously authenticated\n // This prevents redirect loops and handles session expiry scenarios\n if (tokenRepository.isAuthenticated()) {\n // Store the current URL for redirection after re-authentication\n urlRedirectService.storeCurrentUrlIfAllowed();\n // Navigate to login page\n router.navigate([`/${environment.loginRoute}`]);\n }\n }\n // Re-throw the error so other error handlers can process it\n return throwError(() => error);\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1yZWRpcmVjdC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9pbnRlcmNlcHRvcnMvYXV0aC1yZWRpcmVjdC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUN0RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDbkIsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1FBQ3RDLGlDQUFpQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDekIsK0RBQStEO1lBQy9ELG9FQUFvRTtZQUNwRSxJQUFJLGVBQWUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxnRUFBZ0U7Z0JBQ2hFLGtCQUFrQixDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBRTlDLHlCQUF5QjtnQkFDekIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQztRQUVELDREQUE0RDtRQUM1RCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEludGVyY2VwdG9yRm4sIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVybFJlZGlyZWN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VybC1yZWRpcmVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFRva2VuUmVwb3NpdG9yeSB9IGZyb20gJy4uL3JlcG9zaXRvcmllcy90b2tlbi5yZXBvc2l0b3J5JztcbmltcG9ydCB7IEVOVklST05NRU5UIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb25maWcnO1xuXG4vKipcbiAqIEludGVyY2VwdG9yIHRoYXQgaGFuZGxlcyBhdXRoZW50aWNhdGlvbiBlcnJvcnMgYW5kIG1hbmFnZXMgVVJMIHJlZGlyZWN0aW9uXG4gKiBDYXB0dXJlcyB0aGUgY3VycmVudCBVUkwgd2hlbiBhIDQwMSBlcnJvciBvY2N1cnMgYW5kIHJlZGlyZWN0cyB0byBsb2dpblxuICovXG5leHBvcnQgY29uc3QgYXV0aFJlZGlyZWN0SW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xuICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgY29uc3QgdXJsUmVkaXJlY3RTZXJ2aWNlID0gaW5qZWN0KFVybFJlZGlyZWN0U2VydmljZSk7XG4gIGNvbnN0IHRva2VuUmVwb3NpdG9yeSA9IGluamVjdChUb2tlblJlcG9zaXRvcnkpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgcmV0dXJuIG5leHQocmVxKS5waXBlKFxuICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgLy8gSGFuZGxlIDQwMSBVbmF1dGhvcml6ZWQgZXJyb3JzXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgLy8gT25seSBzdG9yZSBhbmQgcmVkaXJlY3QgaWYgdXNlciB3YXMgcHJldmlvdXNseSBhdXRoZW50aWNhdGVkXG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgcmVkaXJlY3QgbG9vcHMgYW5kIGhhbmRsZXMgc2Vzc2lvbiBleHBpcnkgc2NlbmFyaW9zXG4gICAgICAgIGlmICh0b2tlblJlcG9zaXRvcnkuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBVUkwgZm9yIHJlZGlyZWN0aW9uIGFmdGVyIHJlLWF1dGhlbnRpY2F0aW9uXG4gICAgICAgICAgdXJsUmVkaXJlY3RTZXJ2aWNlLnN0b3JlQ3VycmVudFVybElmQWxsb3dlZCgpO1xuXG4gICAgICAgICAgLy8gTmF2aWdhdGUgdG8gbG9naW4gcGFnZVxuICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbYC8ke2Vudmlyb25tZW50LmxvZ2luUm91dGV9YF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlLXRocm93IHRoZSBlcnJvciBzbyBvdGhlciBlcnJvciBoYW5kbGVycyBjYW4gcHJvY2VzcyBpdFxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgIH0pLFxuICApO1xufTtcbiJdfQ==","// src/lib/services/csrf.service.ts\nimport { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { firstValueFrom, map } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class CsrfService {\n http = inject(HttpClient);\n csrfToken = null;\n /**\n * Get CSRF token, fetching it if not available\n */\n async getCsrfToken() {\n if (this.csrfToken) {\n return this.csrfToken;\n }\n try {\n this.csrfToken = await firstValueFrom(this.http\n .get('csrf-token')\n .pipe(map(response => response.csrfToken)));\n return this.csrfToken || '';\n }\n catch {\n // If CSRF endpoint fails, return empty token\n // Server should handle missing CSRF tokens appropriately\n return '';\n }\n }\n /**\n * Clear stored CSRF token (useful on logout)\n */\n clearCsrfToken() {\n this.csrfToken = null;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CsrfService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CsrfService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CsrfService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NyZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctYXV0aC9zcmMvbGliL3NlcnZpY2VzL2NzcmYuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUszQyxNQUFNLE9BQU8sV0FBVztJQUNkLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFrQixJQUFJLENBQUM7SUFFeEM7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxjQUFjLENBQ25DLElBQUksQ0FBQyxJQUFJO2lCQUNOLEdBQUcsQ0FBd0IsWUFBWSxDQUFDO2lCQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQzdDLENBQUM7WUFFRixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw2Q0FBNkM7WUFDN0MseURBQXlEO1lBQ3pELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO3VHQWhDVSxXQUFXOzJHQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvc2VydmljZXMvY3NyZi5zZXJ2aWNlLnRzXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDc3JmU2VydmljZSB7XG4gIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSBjc3JmVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBHZXQgQ1NSRiB0b2tlbiwgZmV0Y2hpbmcgaXQgaWYgbm90IGF2YWlsYWJsZVxuICAgKi9cbiAgYXN5bmMgZ2V0Q3NyZlRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuY3NyZlRva2VuKSB7XG4gICAgICByZXR1cm4gdGhpcy5jc3JmVG9rZW47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY3NyZlRva2VuID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgIC5nZXQ8eyBjc3JmVG9rZW46IHN0cmluZyB9PignY3NyZi10b2tlbicpXG4gICAgICAgICAgLnBpcGUobWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmNzcmZUb2tlbikpLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHRoaXMuY3NyZlRva2VuIHx8ICcnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWYgQ1NSRiBlbmRwb2ludCBmYWlscywgcmV0dXJuIGVtcHR5IHRva2VuXG4gICAgICAvLyBTZXJ2ZXIgc2hvdWxkIGhhbmRsZSBtaXNzaW5nIENTUkYgdG9rZW5zIGFwcHJvcHJpYXRlbHlcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgc3RvcmVkIENTUkYgdG9rZW4gKHVzZWZ1bCBvbiBsb2dvdXQpXG4gICAqL1xuICBjbGVhckNzcmZUb2tlbigpOiB2b2lkIHtcbiAgICB0aGlzLmNzcmZUb2tlbiA9IG51bGw7XG4gIH1cbn1cbiJdfQ==","import { HttpContextToken } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { from } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { CsrfService } from '../services/csrf.service';\n// A token to use with HttpContext for skipping CSRF token addition on specific requests.\nexport const SKIP_CSRF = new HttpContextToken(() => false);\n/**\n * HTTP interceptor that automatically adds CSRF tokens to state-changing requests\n * Only applies to requests to the same origin to avoid leaking tokens to external APIs\n */\nexport const csrfInterceptor = (req, next) => {\n const csrfService = inject(CsrfService);\n // Check if CSRF should be skipped for this request\n const skipCsrf = req.context.get(SKIP_CSRF);\n if (skipCsrf) {\n return next(req);\n }\n // Only add CSRF token to state-changing requests (POST, PUT, PATCH, DELETE)\n const isStateChangingMethod = ['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method.toUpperCase());\n // Only add CSRF token to same-origin requests\n const isSameOrigin = isRequestToSameOrigin(req);\n if (isStateChangingMethod && isSameOrigin) {\n return from(csrfService.getCsrfToken()).pipe(switchMap(csrfToken => {\n const modifiedReq = req.clone({\n setHeaders: {\n 'X-CSRF-Token': csrfToken,\n },\n });\n return next(modifiedReq);\n }));\n }\n // For non-state-changing requests or external requests, proceed without modification\n return next(req);\n};\n/**\n * Checks if the request is going to the same origin as the current application\n */\nfunction isRequestToSameOrigin(req) {\n try {\n const requestUrl = new URL(req.url, window.location.origin);\n return requestUrl.origin === window.location.origin;\n }\n catch {\n // If URL parsing fails, assume it's not same origin for security\n return false;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NyZi5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9pbnRlcmNlcHRvcnMvY3NyZi5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixDQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXBFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDOUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXhDLG1EQUFtRDtJQUNuRCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUN2RSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUN6QixDQUFDO0lBRUYsOENBQThDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhELElBQUkscUJBQXFCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMxQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDcEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsVUFBVSxFQUFFO29CQUNWLGNBQWMsRUFBRSxTQUFTO2lCQUMxQjthQUNGLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxHQUF5QjtJQUN0RCxJQUFJLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsT0FBTyxVQUFVLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3RELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxpRUFBaUU7UUFDakUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBJbnRlcmNlcHRvckZuLCBIdHRwUmVxdWVzdCwgSHR0cENvbnRleHRUb2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3NyZlNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jc3JmLnNlcnZpY2UnO1xuXG4vLyBBIHRva2VuIHRvIHVzZSB3aXRoIEh0dHBDb250ZXh0IGZvciBza2lwcGluZyBDU1JGIHRva2VuIGFkZGl0aW9uIG9uIHNwZWNpZmljIHJlcXVlc3RzLlxuZXhwb3J0IGNvbnN0IFNLSVBfQ1NSRiA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4+KCgpID0+IGZhbHNlKTtcblxuLyoqXG4gKiBIVFRQIGludGVyY2VwdG9yIHRoYXQgYXV0b21hdGljYWxseSBhZGRzIENTUkYgdG9rZW5zIHRvIHN0YXRlLWNoYW5naW5nIHJlcXVlc3RzXG4gKiBPbmx5IGFwcGxpZXMgdG8gcmVxdWVzdHMgdG8gdGhlIHNhbWUgb3JpZ2luIHRvIGF2b2lkIGxlYWtpbmcgdG9rZW5zIHRvIGV4dGVybmFsIEFQSXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNzcmZJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxLCBuZXh0KSA9PiB7XG4gIGNvbnN0IGNzcmZTZXJ2aWNlID0gaW5qZWN0KENzcmZTZXJ2aWNlKTtcblxuICAvLyBDaGVjayBpZiBDU1JGIHNob3VsZCBiZSBza2lwcGVkIGZvciB0aGlzIHJlcXVlc3RcbiAgY29uc3Qgc2tpcENzcmYgPSByZXEuY29udGV4dC5nZXQoU0tJUF9DU1JGKTtcbiAgaWYgKHNraXBDc3JmKSB7XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfVxuXG4gIC8vIE9ubHkgYWRkIENTUkYgdG9rZW4gdG8gc3RhdGUtY2hhbmdpbmcgcmVxdWVzdHMgKFBPU1QsIFBVVCwgUEFUQ0gsIERFTEVURSlcbiAgY29uc3QgaXNTdGF0ZUNoYW5naW5nTWV0aG9kID0gWydQT1NUJywgJ1BVVCcsICdQQVRDSCcsICdERUxFVEUnXS5pbmNsdWRlcyhcbiAgICByZXEubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICk7XG5cbiAgLy8gT25seSBhZGQgQ1NSRiB0b2tlbiB0byBzYW1lLW9yaWdpbiByZXF1ZXN0c1xuICBjb25zdCBpc1NhbWVPcmlnaW4gPSBpc1JlcXVlc3RUb1NhbWVPcmlnaW4ocmVxKTtcblxuICBpZiAoaXNTdGF0ZUNoYW5naW5nTWV0aG9kICYmIGlzU2FtZU9yaWdpbikge1xuICAgIHJldHVybiBmcm9tKGNzcmZTZXJ2aWNlLmdldENzcmZUb2tlbigpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNzcmZUb2tlbiA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVkUmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgICAnWC1DU1JGLVRva2VuJzogY3NyZlRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV4dChtb2RpZmllZFJlcSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gRm9yIG5vbi1zdGF0ZS1jaGFuZ2luZyByZXF1ZXN0cyBvciBleHRlcm5hbCByZXF1ZXN0cywgcHJvY2VlZCB3aXRob3V0IG1vZGlmaWNhdGlvblxuICByZXR1cm4gbmV4dChyZXEpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHJlcXVlc3QgaXMgZ29pbmcgdG8gdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIGlzUmVxdWVzdFRvU2FtZU9yaWdpbihyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+KTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVxdWVzdFVybCA9IG5ldyBVUkwocmVxLnVybCwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgcmV0dXJuIHJlcXVlc3RVcmwub3JpZ2luID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZiBVUkwgcGFyc2luZyBmYWlscywgYXNzdW1lIGl0J3Mgbm90IHNhbWUgb3JpZ2luIGZvciBzZWN1cml0eVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19","import { TOKEN_PROVIDER } from '@acontplus/ng-infrastructure';\nimport { TokenRepository } from '../repositories/token.repository';\nimport { AuthRepository } from '../domain/repositories/auth.repository';\nimport { AuthHttpRepository } from '../data/repositories/auth-http.repository';\nexport const authProviders = [\n {\n provide: AuthRepository,\n useClass: AuthHttpRepository,\n },\n {\n provide: TOKEN_PROVIDER,\n useClass: TokenRepository,\n },\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvcHJvdmlkZXJzL2F1dGgucHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRS9FLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBZTtJQUN2QztRQUNFLE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7S0FDN0I7SUFDRDtRQUNFLE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLFFBQVEsRUFBRSxlQUFlO0tBQzFCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvcHJvdmlkZXJzL2F1dGgucHJvdmlkZXJzLnRzXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVE9LRU5fUFJPVklERVIgfSBmcm9tICdAYWNvbnRwbHVzL25nLWluZnJhc3RydWN0dXJlJztcbmltcG9ydCB7IFRva2VuUmVwb3NpdG9yeSB9IGZyb20gJy4uL3JlcG9zaXRvcmllcy90b2tlbi5yZXBvc2l0b3J5JztcbmltcG9ydCB7IEF1dGhSZXBvc2l0b3J5IH0gZnJvbSAnLi4vZG9tYWluL3JlcG9zaXRvcmllcy9hdXRoLnJlcG9zaXRvcnknO1xuaW1wb3J0IHsgQXV0aEh0dHBSZXBvc2l0b3J5IH0gZnJvbSAnLi4vZGF0YS9yZXBvc2l0b3JpZXMvYXV0aC1odHRwLnJlcG9zaXRvcnknO1xuXG5leHBvcnQgY29uc3QgYXV0aFByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAge1xuICAgIHByb3ZpZGU6IEF1dGhSZXBvc2l0b3J5LFxuICAgIHVzZUNsYXNzOiBBdXRoSHR0cFJlcG9zaXRvcnksXG4gIH0sXG4gIHtcbiAgICBwcm92aWRlOiBUT0tFTl9QUk9WSURFUixcbiAgICB1c2VDbGFzczogVG9rZW5SZXBvc2l0b3J5LFxuICB9LFxuXTtcbiJdfQ==","// src/lib/providers/index.ts\nexport * from './auth.providers';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3QixjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9wcm92aWRlcnMvaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vYXV0aC5wcm92aWRlcnMnO1xuIl19","// src/lib/presentation/stores/index.ts\nexport * from './auth.store';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvdWkvc3RvcmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QztBQUN2QyxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvcHJlc2VudGF0aW9uL3N0b3Jlcy9pbmRleC50c1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoLnN0b3JlJztcbiJdfQ==","// src/lib/presentation/components/login/login.component.ts\nimport { ChangeDetectionStrategy, Component, inject, input, signal, computed, ViewEncapsulation, } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, Validators, ReactiveFormsModule, } from '@angular/forms';\nimport { MatCard, MatCardContent, MatCardFooter, MatCardHeader, MatCardTitle, } from '@angular/material/card';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatAnchor, MatButton } from '@angular/material/button';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { AuthStore } from '../stores/auth.store';\nimport { LoginUseCase } from '../../application/use-cases/login.use-case';\nimport { RegisterUseCase } from '../../application/use-cases/register.use-case';\nimport { LoggingService } from '@acontplus/ng-infrastructure';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nexport class LoginComponent {\n title = input('Login', ...(ngDevMode ? [{ debugName: \"title\" }] : []));\n showRegisterButton = input(true, ...(ngDevMode ? [{ debugName: \"showRegisterButton\" }] : []));\n showRememberMe = input(true, ...(ngDevMode ? [{ debugName: \"showRememberMe\" }] : []));\n // Additional form controls that can be passed from parent components\n additionalSigninControls = input({}, ...(ngDevMode ? [{ debugName: \"additionalSigninControls\" }] : []));\n additionalSignupControls = input({}, ...(ngDevMode ? [{ debugName: \"additionalSignupControls\" }] : []));\n // Additional field templates\n additionalSigninFields = input(null, ...(ngDevMode ? [{ debugName: \"additionalSigninFields\" }] : []));\n additionalSignupFields = input(null, ...(ngDevMode ? [{ debugName: \"additionalSignupFields\" }] : []));\n // Footer content template\n footerContent = input(null, ...(ngDevMode ? [{ debugName: \"footerContent\" }] : []));\n // Computed signal to check if footer content exists\n hasFooterContent = computed(() => this.footerContent() !== null, ...(ngDevMode ? [{ debugName: \"hasFooterContent\" }] : []));\n fb = inject(FormBuilder);\n authStore = inject(AuthStore);\n loginUseCase = inject(LoginUseCase);\n registerUseCase = inject(RegisterUseCase);\n loggingService = inject(LoggingService);\n // Angular 20+ signals\n isLoginMode = signal(true, ...(ngDevMode ? [{ debugName: \"isLoginMode\" }] : []));\n isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n errorMessage = signal(null, ...(ngDevMode ? [{ debugName: \"errorMessage\" }] : []));\n signinForm;\n signupForm;\n constructor() {\n this.signinForm = this.fb.group({\n email: ['', [Validators.required, Validators.email]],\n password: ['', Validators.required],\n rememberMe: [false], // Default to false (unchecked)\n });\n this.signupForm = this.fb.group({\n displayName: ['', Validators.required],\n email: ['', [Validators.required, Validators.email]],\n password: ['', [Validators.required, Validators.minLength(6)]],\n });\n }\n ngOnInit() {\n // Handle rememberMe control based on showRememberMe input\n if (!this.showRememberMe()) {\n // Remove rememberMe control if not needed\n this.signinForm.removeControl('rememberMe');\n }\n // Add additional controls to signin form\n Object.entries(this.additionalSigninControls()).forEach(([key, control]) => {\n this.signinForm.addControl(key, control);\n });\n // Add additional controls to signup form\n Object.entries(this.additionalSignupControls()).forEach(([key, control]) => {\n this.signupForm.addControl(key, control);\n });\n }\n switchMode() {\n this.isLoginMode.set(!this.isLoginMode());\n this.errorMessage.set(null);\n }\n signIn() {\n if (this.signinForm.valid) {\n this.isLoading.set(true);\n this.errorMessage.set(null);\n // Prepare login request with rememberMe handling\n const loginRequest = {\n ...this.signinForm.value,\n // If showRememberMe is false, default rememberMe to false\n rememberMe: this.showRememberMe() ? (this.signinForm.value.rememberMe ?? false) : false,\n };\n this.loginUseCase.execute(loginRequest).subscribe({\n next: () => {\n this.isLoading.set(false);\n },\n error: error => {\n this.isLoading.set(false);\n this.errorMessage.set('Error al iniciar sesión. Verifique sus credenciales.');\n this.loggingService.error('Login failed', { error });\n },\n });\n }\n }\n registerUser() {\n if (this.signupForm.valid) {\n this.isLoading.set(true);\n this.errorMessage.set(null);\n this.registerUseCase.execute(this.signupForm.value).subscribe({\n next: () => {\n this.isLoading.set(false);\n this.signupForm.reset();\n this.isLoginMode.set(true);\n },\n error: error => {\n this.isLoading.set(false);\n this.errorMessage.set('Error al registrar usuario. Intente nuevamente.');\n this.loggingService.error('Register error', { error });\n },\n });\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.2\", type: LoginComponent, isStandalone: true, selector: \"acp-login\", inputs: { title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: false, transformFunction: null }, showRegisterButton: { classPropertyName: \"showRegisterButton\", publicName: \"showRegisterButton\", isSignal: true, isRequired: false, transformFunction: null }, showRememberMe: { classPropertyName: \"showRememberMe\", publicName: \"showRememberMe\", isSignal: true, isRequired: false, transformFunction: null }, additionalSigninControls: { classPropertyName: \"additionalSigninControls\", publicName: \"additionalSigninControls\", isSignal: true, isRequired: false, transformFunction: null }, additionalSignupControls: { classPropertyName: \"additionalSignupControls\", publicName: \"additionalSignupControls\", isSignal: true, isRequired: false, transformFunction: null }, additionalSigninFields: { classPropertyName: \"additionalSigninFields\", publicName: \"additionalSigninFields\", isSignal: true, isRequired: false, transformFunction: null }, additionalSignupFields: { classPropertyName: \"additionalSignupFields\", publicName: \"additionalSignupFields\", isSignal: true, isRequired: false, transformFunction: null }, footerContent: { classPropertyName: \"footerContent\", publicName: \"footerContent\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: \"<mat-card class=\\\"mat-elevation-z8 p-4 rounded\\\">\\n <mat-card-header>\\n <mat-card-title class=\\\"text-center\\\">{{ title() }}</mat-card-title>\\n </mat-card-header>\\n <mat-card-content>\\n @if (isLoginMode()) {\\n <form [formGroup]=\\\"signinForm\\\" (ngSubmit)=\\\"signIn()\\\" class=\\\"d-flex flex-column gap-3\\\">\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Usuario</mat-label>\\n <input matInput type=\\\"text\\\" placeholder=\\\"Ingrese su usuario\\\" formControlName=\\\"email\\\" />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Contrase\\u00F1a</mat-label>\\n <input\\n matInput\\n type=\\\"password\\\"\\n placeholder=\\\"Ingrese su contrase\\u00F1a\\\"\\n formControlName=\\\"password\\\"\\n autocomplete=\\\"current-password\\\"\\n />\\n </mat-form-field>\\n\\n <!-- Remember Me checkbox - conditional -->\\n @if (showRememberMe()) {\\n <div class=\\\"d-flex align-items-center mt-2\\\">\\n <mat-checkbox formControlName=\\\"rememberMe\\\"> Recordarme </mat-checkbox>\\n </div>\\n }\\n\\n <!-- Additional signin fields -->\\n <ng-container *ngTemplateOutlet=\\\"additionalSigninFields()\\\"></ng-container>\\n\\n <div class=\\\"d-flex justify-content-center mt-3\\\">\\n <button\\n mat-raised-button\\n color=\\\"primary\\\"\\n [disabled]=\\\"!signinForm.valid || isLoading()\\\"\\n type=\\\"submit\\\"\\n class=\\\"w-100\\\"\\n >\\n @if (isLoading()) {\\n Ingresando...\\n } @else {\\n <ng-container>Ingresar <mat-icon>login</mat-icon></ng-container>\\n }\\n </button>\\n </div>\\n\\n <div class=\\\"text-center mt-2\\\">\\n @if (showRegisterButton()) {\\n <button mat-button type=\\\"button\\\" (click)=\\\"switchMode()\\\">\\n \\u00BFNo tienes cuenta? Reg\\u00EDstrate\\n </button>\\n }\\n </div>\\n </form>\\n } @else {\\n <form [formGroup]=\\\"signupForm\\\" (ngSubmit)=\\\"registerUser()\\\" class=\\\"d-flex flex-column gap-3\\\">\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Nombre</mat-label>\\n <input\\n matInput\\n type=\\\"text\\\"\\n placeholder=\\\"Ingrese su nombre\\\"\\n formControlName=\\\"displayName\\\"\\n />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Email</mat-label>\\n <input matInput type=\\\"email\\\" placeholder=\\\"Ingrese su email\\\" formControlName=\\\"email\\\" />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Contrase\\u00F1a</mat-label>\\n <input\\n matInput\\n type=\\\"password\\\"\\n placeholder=\\\"Ingrese su contrase\\u00F1a\\\"\\n formControlName=\\\"password\\\"\\n autocomplete=\\\"new-password\\\"\\n />\\n </mat-form-field>\\n\\n <!-- Additional signup fields -->\\n <ng-container *ngTemplateOutlet=\\\"additionalSignupFields()\\\"></ng-container>\\n\\n <div class=\\\"d-flex justify-content-center mt-3\\\">\\n <button\\n mat-raised-button\\n color=\\\"primary\\\"\\n [disabled]=\\\"!signupForm.valid || isLoading()\\\"\\n type=\\\"submit\\\"\\n class=\\\"w-100\\\"\\n >\\n @if (isLoading()) {\\n Registrando...\\n } @else {\\n <ng-container>Registrarse <mat-icon>person_add</mat-icon></ng-container>\\n }\\n </button>\\n </div>\\n\\n <div class=\\\"text-center mt-2\\\">\\n <button mat-button type=\\\"button\\\" (click)=\\\"switchMode()\\\">\\n \\u00BFYa tienes cuenta? Inicia sesi\\u00F3n\\n </button>\\n </div>\\n </form>\\n }\\n @if (errorMessage()) {\\n <div class=\\\"alert alert-danger mt-3\\\" role=\\\"alert\\\">\\n {{ errorMessage() }}\\n </div>\\n }\\n </mat-card-content>\\n @if (hasFooterContent()) {\\n <mat-card-footer>\\n <ng-container *ngTemplateOutlet=\\\"footerContent()\\\"></ng-container>\\n </mat-card-footer>\\n }\\n</mat-card>\\n\", styles: [\":host{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100%;padding:16px;box-sizing:border-box}mat-card{width:100%;max-width:400px;border-radius:12px;box-shadow:0 8px 32px #0000001a}mat-card-header{text-align:center;margin-bottom:20px}mat-card-title{font-size:24px;font-weight:600;color:var(--mat-sys-on-surface, #1c1b1f)}mat-form-field{width:100%}.w-100{width:100%}.d-flex{display:flex}.flex-column{flex-direction:column}.gap-3{gap:12px}.justify-content-center{justify-content:center}.align-items-center{align-items:center}.mt-3{margin-top:12px}.mt-2{margin-top:8px}.text-center{text-align:center}.p-4{padding:16px}.rounded{border-radius:12px}.alert-danger{background-color:var(--mat-sys-error-container, #ffdad6);border-color:var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-on-error-container, #410002);padding:12px;border-radius:4px;border:1px solid transparent}.row{display:flex;flex-wrap:wrap;margin:0 -15px}.col-xs-12,.col-sm-12,.col-md-12{flex:0 0 100%;max-width:100%;padding:0 15px}.m-t-10{margin-top:10px}.social{display:flex;justify-content:center}mat-button{border-radius:8px}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i2.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i2.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"directive\", type: i2.FormControlName, selector: \"[formControlName]\", inputs: [\"formControlName\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"] }, { kind: \"component\", type: MatCard, selector: \"mat-card\", inputs: [\"appearance\"], exportAs: [\"matCard\"] }, { kind: \"component\", type: MatCardHeader, selector: \"mat-card-header\" }, { kind: \"directive\", type: MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: MatCardTitle, selector: \"mat-card-title, [mat-card-title], [matCardTitle]\" }, { kind: \"directive\", type: MatCardContent, selector: \"mat-card-content\" }, { kind: \"component\", type: MatFormField, selector: \"mat-form-field\", inputs: [\"hideRequiredMarker\", \"color\", \"floatLabel\", \"appearance\", \"subscriptSizing\", \"hintLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: MatInput, selector: \"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]\", inputs: [\"disabled\", \"id\", \"placeholder\", \"name\", \"required\", \"type\", \"errorStateMatcher\", \"aria-describedby\", \"value\", \"readonly\", \"disabledInteractive\"], exportAs: [\"matInput\"] }, { kind: \"component\", type: MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: MatButton, selector: \" button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] \", inputs: [\"matButton\"], exportAs: [\"matButton\", \"matAnchor\"] }, { kind: \"directive\", type: MatCardFooter, selector: \"mat-card-footer\" }, { kind: \"component\", type: MatCheckbox, selector: \"mat-checkbox\", inputs: [\"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-expanded\", \"aria-controls\", \"aria-owns\", \"id\", \"required\", \"labelPosition\", \"name\", \"value\", \"disableRipple\", \"tabIndex\", \"color\", \"disabledInteractive\", \"checked\", \"disabled\", \"indeterminate\"], outputs: [\"change\", \"indeterminateChange\"], exportAs: [\"matCheckbox\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginComponent, decorators: [{\n type: Component,\n args: [{ selector: 'acp-login', imports: [\n CommonModule,\n ReactiveFormsModule,\n MatCard,\n MatCardHeader,\n MatLabel,\n MatCardTitle,\n MatCardContent,\n MatFormField,\n MatInput,\n MatIcon,\n MatButton,\n MatCardFooter,\n MatAnchor,\n MatCheckbox,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"<mat-card class=\\\"mat-elevation-z8 p-4 rounded\\\">\\n <mat-card-header>\\n <mat-card-title class=\\\"text-center\\\">{{ title() }}</mat-card-title>\\n </mat-card-header>\\n <mat-card-content>\\n @if (isLoginMode()) {\\n <form [formGroup]=\\\"signinForm\\\" (ngSubmit)=\\\"signIn()\\\" class=\\\"d-flex flex-column gap-3\\\">\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Usuario</mat-label>\\n <input matInput type=\\\"text\\\" placeholder=\\\"Ingrese su usuario\\\" formControlName=\\\"email\\\" />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Contrase\\u00F1a</mat-label>\\n <input\\n matInput\\n type=\\\"password\\\"\\n placeholder=\\\"Ingrese su contrase\\u00F1a\\\"\\n formControlName=\\\"password\\\"\\n autocomplete=\\\"current-password\\\"\\n />\\n </mat-form-field>\\n\\n <!-- Remember Me checkbox - conditional -->\\n @if (showRememberMe()) {\\n <div class=\\\"d-flex align-items-center mt-2\\\">\\n <mat-checkbox formControlName=\\\"rememberMe\\\"> Recordarme </mat-checkbox>\\n </div>\\n }\\n\\n <!-- Additional signin fields -->\\n <ng-container *ngTemplateOutlet=\\\"additionalSigninFields()\\\"></ng-container>\\n\\n <div class=\\\"d-flex justify-content-center mt-3\\\">\\n <button\\n mat-raised-button\\n color=\\\"primary\\\"\\n [disabled]=\\\"!signinForm.valid || isLoading()\\\"\\n type=\\\"submit\\\"\\n class=\\\"w-100\\\"\\n >\\n @if (isLoading()) {\\n Ingresando...\\n } @else {\\n <ng-container>Ingresar <mat-icon>login</mat-icon></ng-container>\\n }\\n </button>\\n </div>\\n\\n <div class=\\\"text-center mt-2\\\">\\n @if (showRegisterButton()) {\\n <button mat-button type=\\\"button\\\" (click)=\\\"switchMode()\\\">\\n \\u00BFNo tienes cuenta? Reg\\u00EDstrate\\n </button>\\n }\\n </div>\\n </form>\\n } @else {\\n <form [formGroup]=\\\"signupForm\\\" (ngSubmit)=\\\"registerUser()\\\" class=\\\"d-flex flex-column gap-3\\\">\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Nombre</mat-label>\\n <input\\n matInput\\n type=\\\"text\\\"\\n placeholder=\\\"Ingrese su nombre\\\"\\n formControlName=\\\"displayName\\\"\\n />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Email</mat-label>\\n <input matInput type=\\\"email\\\" placeholder=\\\"Ingrese su email\\\" formControlName=\\\"email\\\" />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Contrase\\u00F1a</mat-label>\\n <input\\n matInput\\n type=\\\"password\\\"\\n placeholder=\\\"Ingrese su contrase\\u00F1a\\\"\\n formControlName=\\\"password\\\"\\n autocomplete=\\\"new-password\\\"\\n />\\n </mat-form-field>\\n\\n <!-- Additional signup fields -->\\n <ng-container *ngTemplateOutlet=\\\"additionalSignupFields()\\\"></ng-container>\\n\\n <div class=\\\"d-flex justify-content-center mt-3\\\">\\n <button\\n mat-raised-button\\n color=\\\"primary\\\"\\n [disabled]=\\\"!signupForm.valid || isLoading()\\\"\\n type=\\\"submit\\\"\\n class=\\\"w-100\\\"\\n >\\n @if (isLoading()) {\\n Registrando...\\n } @else {\\n <ng-container>Registrarse <mat-icon>person_add</mat-icon></ng-container>\\n }\\n </button>\\n </div>\\n\\n <div class=\\\"text-center mt-2\\\">\\n <button mat-button type=\\\"button\\\" (click)=\\\"switchMode()\\\">\\n \\u00BFYa tienes cuenta? Inicia sesi\\u00F3n\\n </button>\\n </div>\\n </form>\\n }\\n @if (errorMessage()) {\\n <div class=\\\"alert alert-danger mt-3\\\" role=\\\"alert\\\">\\n {{ errorMessage() }}\\n </div>\\n }\\n </mat-card-content>\\n @if (hasFooterContent()) {\\n <mat-card-footer>\\n <ng-container *ngTemplateOutlet=\\\"footerContent()\\\"></ng-container>\\n </mat-card-footer>\\n }\\n</mat-card>\\n\", styles: [\":host{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100%;padding:16px;box-sizing:border-box}mat-card{width:100%;max-width:400px;border-radius:12px;box-shadow:0 8px 32px #0000001a}mat-card-header{text-align:center;margin-bottom:20px}mat-card-title{font-size:24px;font-weight:600;color:var(--mat-sys-on-surface, #1c1b1f)}mat-form-field{width:100%}.w-100{width:100%}.d-flex{display:flex}.flex-column{flex-direction:column}.gap-3{gap:12px}.justify-content-center{justify-content:center}.align-items-center{align-items:center}.mt-3{margin-top:12px}.mt-2{margin-top:8px}.text-center{text-align:center}.p-4{padding:16px}.rounded{border-radius:12px}.alert-danger{background-color:var(--mat-sys-error-container, #ffdad6);border-color:var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-on-error-container, #410002);padding:12px;border-radius:4px;border:1px solid transparent}.row{display:flex;flex-wrap:wrap;margin:0 -15px}.col-xs-12,.col-sm-12,.col-md-12{flex:0 0 100%;max-width:100%;padding:0 15px}.m-t-10{margin-top:10px}.social{display:flex;justify-content:center}mat-button{border-radius:8px}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctYXV0aC9zcmMvbGliL3VpL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi91aS9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyREFBMkQ7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUdSLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLFdBQVcsRUFDWCxVQUFVLEVBQ1YsbUJBQW1CLEdBRXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLE9BQU8sRUFDUCxjQUFjLEVBQ2QsYUFBYSxFQUNiLGFBQWEsRUFDYixZQUFZLEdBQ2IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBeUI5RCxNQUFNLE9BQU8sY0FBYztJQUN6QixLQUFLLEdBQUcsS0FBSyxDQUFTLE9BQU8saURBQUMsQ0FBQztJQUMvQixrQkFBa0IsR0FBRyxLQUFLLENBQVUsSUFBSSw4REFBQyxDQUFDO0lBQzFDLGNBQWMsR0FBRyxLQUFLLENBQVUsSUFBSSwwREFBQyxDQUFDO0lBRXRDLHFFQUFxRTtJQUNyRSx3QkFBd0IsR0FBRyxLQUFLLENBQWtDLEVBQUUsb0VBQUMsQ0FBQztJQUN0RSx3QkFBd0IsR0FBRyxLQUFLLENBQWtDLEVBQUUsb0VBQUMsQ0FBQztJQUV0RSw2QkFBNkI7SUFDN0Isc0JBQXNCLEdBQUcsS0FBSyxDQUE4QixJQUFJLGtFQUFDLENBQUM7SUFDbEUsc0JBQXNCLEdBQUcsS0FBSyxDQUE4QixJQUFJLGtFQUFDLENBQUM7SUFFbEUsMEJBQTBCO0lBQzFCLGFBQWEsR0FBRyxLQUFLLENBQThCLElBQUkseURBQUMsQ0FBQztJQUV6RCxvREFBb0Q7SUFDcEQsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLDREQUFDLENBQUM7SUFFaEQsRUFBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QixTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXpELHNCQUFzQjtJQUN0QixXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksdURBQUMsQ0FBQztJQUMzQixTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUsscURBQUMsQ0FBQztJQUMxQixZQUFZLEdBQUcsTUFBTSxDQUFnQixJQUFJLHdEQUFDLENBQUM7SUFFM0MsVUFBVSxDQUFZO0lBQ3RCLFVBQVUsQ0FBWTtJQUV0QjtRQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDOUIsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsK0JBQStCO1NBQ3JELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDOUIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDdEMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTiwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzNCLDBDQUEwQztZQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ3pFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILHlDQUF5QztRQUN6QyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFNUIsaURBQWlEO1lBQ2pELE1BQU0sWUFBWSxHQUFHO2dCQUNuQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSztnQkFDeEIsMERBQTBEO2dCQUMxRCxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzthQUN4RixDQUFDO1lBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNoRCxJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUNULElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixDQUFDO2dCQUNELEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDYixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztvQkFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDdkQsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDNUQsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO29CQUN6RSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3pELENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzt1R0FqSFUsY0FBYzsyRkFBZCxjQUFjLG0wQ0M1RDNCLHNuSUEySEEseXBDRG5GSSxZQUFZLHFNQUNaLG1CQUFtQiw2OEJBQ25CLE9BQU8sb0dBQ1AsYUFBYSw0REFDYixRQUFRLHNEQUNSLFlBQVksNkZBQ1osY0FBYyw2REFDZCxZQUFZLDRMQUNaLFFBQVEsd1ZBQ1IsT0FBTywySUFDUCxTQUFTLHlVQUNULGFBQWEsNERBRWIsV0FBVzs7MkZBT0YsY0FBYztrQkF2QjFCLFNBQVM7K0JBQ0UsV0FBVyxXQUNaO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsUUFBUTt3QkFDUixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixRQUFRO3dCQUNSLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxhQUFhO3dCQUNiLFNBQVM7d0JBQ1QsV0FBVztxQkFDWixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvcHJlc2VudGF0aW9uL2NvbXBvbmVudHMvbG9naW4vbG9naW4uY29tcG9uZW50LnRzXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRm9ybUdyb3VwLFxuICBGb3JtQnVpbGRlcixcbiAgVmFsaWRhdG9ycyxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgQWJzdHJhY3RDb250cm9sLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBNYXRDYXJkLFxuICBNYXRDYXJkQ29udGVudCxcbiAgTWF0Q2FyZEZvb3RlcixcbiAgTWF0Q2FyZEhlYWRlcixcbiAgTWF0Q2FyZFRpdGxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QW5jaG9yLCBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3ggfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBBdXRoU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXV0aC5zdG9yZSc7XG5pbXBvcnQgeyBMb2dpblVzZUNhc2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvbG9naW4udXNlLWNhc2UnO1xuaW1wb3J0IHsgUmVnaXN0ZXJVc2VDYXNlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24vdXNlLWNhc2VzL3JlZ2lzdGVyLnVzZS1jYXNlJztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1pbmZyYXN0cnVjdHVyZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjcC1sb2dpbicsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRDYXJkLFxuICAgIE1hdENhcmRIZWFkZXIsXG4gICAgTWF0TGFiZWwsXG4gICAgTWF0Q2FyZFRpdGxlLFxuICAgIE1hdENhcmRDb250ZW50LFxuICAgIE1hdEZvcm1GaWVsZCxcbiAgICBNYXRJbnB1dCxcbiAgICBNYXRJY29uLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRDYXJkRm9vdGVyLFxuICAgIE1hdEFuY2hvcixcbiAgICBNYXRDaGVja2JveCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgdGl0bGUgPSBpbnB1dDxzdHJpbmc+KCdMb2dpbicpO1xuICBzaG93UmVnaXN0ZXJCdXR0b24gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgc2hvd1JlbWVtYmVyTWUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAvLyBBZGRpdGlvbmFsIGZvcm0gY29udHJvbHMgdGhhdCBjYW4gYmUgcGFzc2VkIGZyb20gcGFyZW50IGNvbXBvbmVudHNcbiAgYWRkaXRpb25hbFNpZ25pbkNvbnRyb2xzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPj4oe30pO1xuICBhZGRpdGlvbmFsU2lnbnVwQ29udHJvbHMgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCBBYnN0cmFjdENvbnRyb2w+Pih7fSk7XG5cbiAgLy8gQWRkaXRpb25hbCBmaWVsZCB0ZW1wbGF0ZXNcbiAgYWRkaXRpb25hbFNpZ25pbkZpZWxkcyA9IGlucHV0PFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbD4obnVsbCk7XG4gIGFkZGl0aW9uYWxTaWdudXBGaWVsZHMgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuXG4gIC8vIEZvb3RlciBjb250ZW50IHRlbXBsYXRlXG4gIGZvb3RlckNvbnRlbnQgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuXG4gIC8vIENvbXB1dGVkIHNpZ25hbCB0byBjaGVjayBpZiBmb290ZXIgY29udGVudCBleGlzdHNcbiAgaGFzRm9vdGVyQ29udGVudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZm9vdGVyQ29udGVudCgpICE9PSBudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoU3RvcmUgPSBpbmplY3QoQXV0aFN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dpblVzZUNhc2UgPSBpbmplY3QoTG9naW5Vc2VDYXNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RlclVzZUNhc2UgPSBpbmplY3QoUmVnaXN0ZXJVc2VDYXNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnaW5nU2VydmljZSA9IGluamVjdChMb2dnaW5nU2VydmljZSk7XG5cbiAgLy8gQW5ndWxhciAyMCsgc2lnbmFsc1xuICBpc0xvZ2luTW9kZSA9IHNpZ25hbCh0cnVlKTtcbiAgaXNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgZXJyb3JNZXNzYWdlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHNpZ25pbkZvcm06IEZvcm1Hcm91cDtcbiAgc2lnbnVwRm9ybTogRm9ybUdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2lnbmluRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXSxcbiAgICAgIHBhc3N3b3JkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcmVtZW1iZXJNZTogW2ZhbHNlXSwgLy8gRGVmYXVsdCB0byBmYWxzZSAodW5jaGVja2VkKVxuICAgIH0pO1xuXG4gICAgdGhpcy5zaWdudXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkaXNwbGF5TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGVtYWlsOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXV0sXG4gICAgICBwYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildXSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSByZW1lbWJlck1lIGNvbnRyb2wgYmFzZWQgb24gc2hvd1JlbWVtYmVyTWUgaW5wdXRcbiAgICBpZiAoIXRoaXMuc2hvd1JlbWVtYmVyTWUoKSkge1xuICAgICAgLy8gUmVtb3ZlIHJlbWVtYmVyTWUgY29udHJvbCBpZiBub3QgbmVlZGVkXG4gICAgICB0aGlzLnNpZ25pbkZvcm0ucmVtb3ZlQ29udHJvbCgncmVtZW1iZXJNZScpO1xuICAgIH1cblxuICAgIC8vIEFkZCBhZGRpdGlvbmFsIGNvbnRyb2xzIHRvIHNpZ25pbiBmb3JtXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5hZGRpdGlvbmFsU2lnbmluQ29udHJvbHMoKSkuZm9yRWFjaCgoW2tleSwgY29udHJvbF0pID0+IHtcbiAgICAgIHRoaXMuc2lnbmluRm9ybS5hZGRDb250cm9sKGtleSwgY29udHJvbCk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYWRkaXRpb25hbCBjb250cm9scyB0byBzaWdudXAgZm9ybVxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuYWRkaXRpb25hbFNpZ251cENvbnRyb2xzKCkpLmZvckVhY2goKFtrZXksIGNvbnRyb2xdKSA9PiB7XG4gICAgICB0aGlzLnNpZ251cEZvcm0uYWRkQ29udHJvbChrZXksIGNvbnRyb2wpO1xuICAgIH0pO1xuICB9XG5cbiAgc3dpdGNoTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9naW5Nb2RlLnNldCghdGhpcy5pc0xvZ2luTW9kZSgpKTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZS5zZXQobnVsbCk7XG4gIH1cblxuICBzaWduSW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2lnbmluRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2Uuc2V0KG51bGwpO1xuXG4gICAgICAvLyBQcmVwYXJlIGxvZ2luIHJlcXVlc3Qgd2l0aCByZW1lbWJlck1lIGhhbmRsaW5nXG4gICAgICBjb25zdCBsb2dpblJlcXVlc3QgPSB7XG4gICAgICAgIC4uLnRoaXMuc2lnbmluRm9ybS52YWx1ZSxcbiAgICAgICAgLy8gSWYgc2hvd1JlbWVtYmVyTWUgaXMgZmFsc2UsIGRlZmF1bHQgcmVtZW1iZXJNZSB0byBmYWxzZVxuICAgICAgICByZW1lbWJlck1lOiB0aGlzLnNob3dSZW1lbWJlck1lKCkgPyAodGhpcy5zaWduaW5Gb3JtLnZhbHVlLnJlbWVtYmVyTWUgPz8gZmFsc2UpIDogZmFsc2UsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmxvZ2luVXNlQ2FzZS5leGVjdXRlKGxvZ2luUmVxdWVzdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZS5zZXQoJ0Vycm9yIGFsIGluaWNpYXIgc2VzacOzbi4gVmVyaWZpcXVlIHN1cyBjcmVkZW5jaWFsZXMuJyk7XG4gICAgICAgICAgdGhpcy5sb2dnaW5nU2VydmljZS5lcnJvcignTG9naW4gZmFpbGVkJywgeyBlcnJvciB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyVXNlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaWdudXBGb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZS5zZXQobnVsbCk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXJVc2VDYXNlLmV4ZWN1dGUodGhpcy5zaWdudXBGb3JtLnZhbHVlKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnNpZ251cEZvcm0ucmVzZXQoKTtcbiAgICAgICAgICB0aGlzLmlzTG9naW5Nb2RlLnNldCh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlLnNldCgnRXJyb3IgYWwgcmVnaXN0cmFyIHVzdWFyaW8uIEludGVudGUgbnVldmFtZW50ZS4nKTtcbiAgICAgICAgICB0aGlzLmxvZ2dpbmdTZXJ2aWNlLmVycm9yKCdSZWdpc3RlciBlcnJvcicsIHsgZXJyb3IgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxtYXQtY2FyZCBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejggcC00IHJvdW5kZWRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICA8bWF0LWNhcmQtdGl0bGUgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPnt7IHRpdGxlKCkgfX08L21hdC1jYXJkLXRpdGxlPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgQGlmIChpc0xvZ2luTW9kZSgpKSB7XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNpZ25pbkZvcm1cIiAobmdTdWJtaXQpPVwic2lnbkluKClcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+VXN1YXJpbzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSBzdSB1c3VhcmlvXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiAvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5Db250cmFzZcOxYTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkluZ3Jlc2Ugc3UgY29udHJhc2XDsWFcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8IS0tIFJlbWVtYmVyIE1lIGNoZWNrYm94IC0gY29uZGl0aW9uYWwgLS0+XG4gICAgICAgIEBpZiAoc2hvd1JlbWVtYmVyTWUoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwicmVtZW1iZXJNZVwiPiBSZWNvcmRhcm1lIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBBZGRpdGlvbmFsIHNpZ25pbiBmaWVsZHMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRpdGlvbmFsU2lnbmluRmllbGRzKClcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtM1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzaWduaW5Gb3JtLnZhbGlkIHx8IGlzTG9hZGluZygpXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChpc0xvYWRpbmcoKSkge1xuICAgICAgICAgICAgICBJbmdyZXNhbmRvLi4uXG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5JbmdyZXNhciA8bWF0LWljb24+bG9naW48L21hdC1pY29uPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXQtMlwiPlxuICAgICAgICAgIEBpZiAoc2hvd1JlZ2lzdGVyQnV0dG9uKCkpIHtcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInN3aXRjaE1vZGUoKVwiPlxuICAgICAgICAgICAgICDCv05vIHRpZW5lcyBjdWVudGE/IFJlZ8Otc3RyYXRlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzaWdudXBGb3JtXCIgKG5nU3VibWl0KT1cInJlZ2lzdGVyVXNlcigpXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTNcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPk5vbWJyZTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSBzdSBub21icmVcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPkVtYWlsPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSBzdSBlbWFpbFwiIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+Q29udHJhc2XDsWE8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHN1IGNvbnRyYXNlw7FhXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8IS0tIEFkZGl0aW9uYWwgc2lnbnVwIGZpZWxkcyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkZGl0aW9uYWxTaWdudXBGaWVsZHMoKVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNpZ251cEZvcm0udmFsaWQgfHwgaXNMb2FkaW5nKClcIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBjbGFzcz1cInctMTAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIFJlZ2lzdHJhbmRvLi4uXG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5SZWdpc3RyYXJzZSA8bWF0LWljb24+cGVyc29uX2FkZDwvbWF0LWljb24+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0yXCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic3dpdGNoTW9kZSgpXCI+XG4gICAgICAgICAgICDCv1lhIHRpZW5lcyBjdWVudGE/IEluaWNpYSBzZXNpw7NuXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIH1cbiAgICBAaWYgKGVycm9yTWVzc2FnZSgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIG10LTNcIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlKCkgfX1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuICBAaWYgKGhhc0Zvb3RlckNvbnRlbnQoKSkge1xuICAgIDxtYXQtY2FyZC1mb290ZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyQ29udGVudCgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XG4gIH1cbjwvbWF0LWNhcmQ+XG4iXX0=","// src/lib/presentation/components/index.ts\nexport { LoginComponent } from './login.component';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvdWkvbG9naW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvcHJlc2VudGF0aW9uL2NvbXBvbmVudHMvaW5kZXgudHNcbmV4cG9ydCB7IExvZ2luQ29tcG9uZW50IH0gZnJvbSAnLi9sb2dpbi5jb21wb25lbnQnO1xuIl19","// src/lib/presentation/index.ts\nexport * from './stores';\nexport * from './login';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvdWkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDO0FBQ2hDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9wcmVzZW50YXRpb24vaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9naW4nO1xuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvbnRwbHVzLW5nLWF1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9hY29udHBsdXMtbmctYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["catchError"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAO,MAAM,cAAc,CAAC;AAC5B;;ACIO,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,IAAI,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACpC,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE;AAC3C,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAChD,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC;AACnD,YAAY,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC;AACjE;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,QAAQ,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC/D,YAAY,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC7D;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,QAAQ,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;AACtE,YAAY,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;AACpE;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE;AACxC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY;AACZ;AACA,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;AAClE;AACA,aAAa;AACb,YAAY,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;AACpE;AACA;AACA,IAAI,eAAe,CAAC,YAAY,EAAE,UAAU,GAAG,KAAK,EAAE;AACtD,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY;AACZ;AACA,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,YAAY,CAAC;AAChF;AACA,aAAa;AACb,YAAY,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,YAAY,CAAC;AAClF;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY;AACZ;AACA,QAAQ,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC1D,QAAQ,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;AACjE,QAAQ,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC5D,QAAQ,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;AACnE;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3C,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAY,OAAO,KAAK;AACxB;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,kBAAkB,GAAG,SAAS,CAAC,WAAW,CAAC;AAC7D,YAAY,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACnE,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAChE,YAAY,OAAO,gBAAgB,GAAG,cAAc;AACpD;AACA,QAAQ,MAAM;AACd,YAAY,OAAO,KAAK;AACxB;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3C,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAY,OAAO,KAAK;AACxB;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC;AACvD,YAAY,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;AACvD,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAChE,YAAY,MAAM,eAAe,GAAG,UAAU,GAAG,cAAc;AAC/D,YAAY,OAAO,eAAe,IAAI,GAAG,CAAC;AAC1C;AACA,QAAQ,MAAM;AACd,YAAY,OAAO,KAAK;AACxB;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AACrC,QAAQ,IAAI,CAAC,KAAK;AAClB,YAAY,OAAO,IAAI;AACvB,QAAQ,IAAI;AACZ,YAAY,OAAO,SAAS,CAAC,KAAK,CAAC;AACnC;AACA,QAAQ,MAAM;AACd,YAAY,OAAO,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjD,YAAY,OAAO,KAAK;AACxB;AACA;AACA,QAAQ,MAAM,mBAAmB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACnF,QAAQ,MAAM,0BAA0B,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;AACjG,QAAQ,OAAO,CAAC,EAAE,mBAAmB,IAAI,0BAA0B,CAAC;AACpE;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AACrC,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;AACjD,YAAY,MAAM,KAAK,GAAG,YAAY,CAAC,oEAAoE,CAAC;AAC5G,gBAAgB,YAAY,CAAC,OAAO,CAAC;AACrC,gBAAgB,YAAY,CAAC,KAAK,CAAC;AACnC,gBAAgB,YAAY,CAAC,SAAS,CAAC;AACvC,YAAY,MAAM,WAAW,GAAG,YAAY,CAAC,iEAAiE,CAAC;AAC/G,gBAAgB,YAAY,CAAC,aAAa,CAAC;AAC3C,gBAAgB,YAAY,CAAC,cAAc,CAAC;AAC5C,gBAAgB,YAAY,CAAC,MAAM,CAAC;AACpC,gBAAgB,YAAY,CAAC,YAAY,CAAC;AAC1C,YAAY,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,WAAW;AAC5D,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,gBAAgB,OAAO,IAAI;AAC3B;AACA,YAAY,MAAM,QAAQ,GAAG;AAC7B,gBAAgB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;AACvC,gBAAgB,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,cAAc;AACtE,gBAAgB,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;AACtC,gBAAgB,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC9E,gBAAgB,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAC3F,gBAAgB,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE;AAC9D,oBAAoB,YAAY,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE;AACzD,oBAAoB,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE;AACtD,gBAAgB,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE;AAChE,oBAAoB,YAAY,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE;AAC1D,oBAAoB,YAAY,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE;AAC9D,oBAAoB,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE;AACtD,gBAAgB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE;AAC1D,gBAAgB,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE;AAChG,aAAa;AACb,YAAY,OAAO,QAAQ;AAC3B;AACA,QAAQ,MAAM;AACd,YAAY,OAAO,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,YAAY,EAAE,UAAU,EAAE;AAChD,QAAQ,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAC5C,YAAY,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC;AACjD,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtC,gBAAgB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;AACnD;AACA,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3C;AACA,gBAAgB,OAAO;AACvB,qBAAqB,KAAK,CAAC,GAAG;AAC9B,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;AACtC,qBAAqB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C;AACA;AACA,QAAQ,OAAO,SAAS;AACxB;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AAC1K,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACjJ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AACzH,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACtLb;AAOO,MAAM,SAAS,CAAC;AACvB,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C,IAAI,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC7C,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B;AACA,IAAI,gBAAgB,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnF,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxE;AACA,IAAI,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;AACxD,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAClC;AACA,IAAI,mBAAmB;AACvB,IAAI,kBAAkB;AACtB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AACvC;AACA;AACA;AACA;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI;AACZ,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;AAC1E,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC;AACtD,YAAY,IAAI,eAAe,EAAE;AACjC,gBAAgB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AACnE,gBAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxC,gBAAgB,IAAI,CAAC,oBAAoB,EAAE;AAC3C;AACA;AACA,QAAQ,MAAM;AACd,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB;AACA,gBAAgB;AAChB,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AAC3D,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAY;AACZ;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;AAC9D,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7D,YAAY,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,GAAG,WAAW;AAClE;AACA,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC;AAC9E;AACA,YAAY,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC1C,gBAAgB,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACtD;AACA,YAAY,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM;AAChD,gBAAgB,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AACnE,oBAAoB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM;AAC1C;AACA,wBAAwB,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,EAAE;AACjE,4BAA4B,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE;AAC3D;AACA,qBAAqB,CAAC;AACtB,iBAAiB,EAAE,WAAW,CAAC;AAC/B,aAAa,CAAC;AACd;AACA,QAAQ,MAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACtC,YAAY,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAClD,YAAY,IAAI,CAAC,mBAAmB,GAAG,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB;AACA,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACrC,YAAY,OAAO,IAAI,CAAC,kBAAkB;AAC1C;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAC3D,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;AACnE,QAAQ,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,YAAY,EAAE;AAC/C,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,OAAO,EAAE,CAAC,IAAI,CAAC;AAC3B;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACvC,aAAa,YAAY,CAAC;AAC1B,YAAY,KAAK,EAAE,QAAQ,CAAC,KAAK;AACjC,YAAY,YAAY;AACxB,SAAS;AACT,aAAa,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI;AAChC,YAAY,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;AACzC,SAAS,CAAC,EAAE,UAAU,CAAC,MAAM;AAC7B,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,OAAO,EAAE,CAAC,IAAI,CAAC;AAC3B,SAAS,CAAC,EAAE,GAAG,CAAC;AAChB,YAAY,QAAQ,EAAE,MAAM;AAC5B,gBAAgB,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnD,aAAa;AACb,YAAY,KAAK,EAAE,MAAM;AACzB,gBAAgB,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnD,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,IAAI,CAAC,kBAAkB;AACtC;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE;AACjD,QAAQ,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC;AAC3D,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAC3D,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AAChC,QAAQ,IAAI,CAAC,oBAAoB,EAAE;AACnC;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAQ,IAAI,IAAI,EAAE;AAClB;AACA,YAAY,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;AACjE,gBAAgB,IAAI,EAAE,MAAM;AAC5B;AACA,oBAAoB,IAAI,CAAC,mBAAmB,EAAE;AAC9C,iBAAiB;AACjB,gBAAgB,KAAK,EAAE,MAAM;AAC7B;AACA,oBAAoB,IAAI,CAAC,mBAAmB,EAAE;AAC9C,iBAAiB;AACjB,aAAa,CAAC;AACd;AACA,aAAa;AACb;AACA,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAC1C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;AACvC;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;AACtE,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC;AAClD,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB;AACA,QAAQ,OAAO,eAAe;AAC9B;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI;AACZ,YAAY,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjD,YAAY,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC1E,YAAY,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM;AAC9D,iBAAiB,KAAK,CAAC,EAAE;AACzB,iBAAiB,GAAG,CAAC,CAAC,IAAI;AAC1B,gBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,aAAa;AACb,iBAAiB,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAC1C;AACA,QAAQ,MAAM;AACd,YAAY,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AACnD;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AACpK,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC3I;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnH,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;;AC/MvC;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,CAAC;AAChC,IAAI,gBAAgB,GAAG,kBAAkB;AACzC,IAAI,eAAe,GAAG;AACtB,QAAQ,QAAQ;AAChB,QAAQ,OAAO;AACf,QAAQ,WAAW;AACnB,QAAQ,kBAAkB;AAC1B,QAAQ,iBAAiB;AACzB,KAAK;AACL,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,IAAI,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACpC,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC/B;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,GAAG,EAAE;AAC1B;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AAC/B,YAAY;AACZ;AACA,QAAQ,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG;AACjD;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE;AAC9C,YAAY;AACZ;AACA;AACA,QAAQ,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,QAAQ,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AAClF;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AAC/B,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,OAAO,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI;AAC/E;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,YAAY,GAAG,GAAG,EAAE;AAC9C,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACjD,QAAQ,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE;AAC/D,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAY,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC;AAClD;AACA,aAAa;AACb,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AAC/B,YAAY;AACZ;AACA,QAAQ,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,GAAG,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtE;AACA;AACA;AACA;AACA;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;AAC1C,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE;AAC/C,YAAY,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AAC/B,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,IAAI;AACZ,YAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,IAAI,IAAI;AACpE;AACA,QAAQ,MAAM;AACd;AACA,YAAY,OAAO,IAAI;AACvB;AACA;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AAC7K,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACpJ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACzHb;AASO,MAAM,YAAY,SAAS,WAAW,CAAC;AAC9C,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AACjC,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,IAAI,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACnD,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI;AACrE;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;AAChF;AACA,YAAY,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAC9D,SAAS,CAAC,CAAC;AACX;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AACzK,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC9I;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AACtH,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AC9Bb;AAQO,MAAM,eAAe,SAAS,WAAW,CAAC;AACjD,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AACjC,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI;AACxE;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC;AACnD;AACA,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AACvC,SAAS,CAAC,CAAC;AACX;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AAC5K,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACjJ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AACzH,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AC5Bb;AAQO,MAAM,mBAAmB,SAAS,WAAW,CAAC;AACrD,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C,IAAI,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC7C,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AACjC,IAAI,OAAO,GAAG;AACd,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAC3D,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;AACnE,QAAQ,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACnF,YAAY,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,qCAAqC,CAAC;AAC1E,YAAY,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;AAC1C;AACA,QAAQ,OAAO,IAAI,CAAC;AACpB,aAAa,YAAY,CAAC;AAC1B,YAAY,KAAK,EAAE,QAAQ,CAAC,KAAK;AACjC,YAAY,YAAY;AACxB,SAAS;AACT,aAAa,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI;AAChC;AACA,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;AACzE;AACA,YAAY,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC;AAC/D,SAAS,CAAC,EAAE,UAAU,CAAC,KAAK,IAAI;AAChC;AACA,YAAY,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;AAC1C,SAAS,CAAC,CAAC;AACX;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AAChL,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACrJ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AC1Cb;AAQO,MAAM,aAAa,SAAS,WAAW,CAAC;AAC/C,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C,IAAI,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC7C,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AACjC,IAAI,OAAO,GAAG;AACd,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;AAC3D,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;AACnE,QAAQ,IAAI,QAAQ,EAAE,KAAK,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACxE,YAAY,OAAO,IAAI,CAAC;AACxB,iBAAiB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY;AACpD,iBAAiB,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAChD;AACA,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,QAAQ,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACzB;AACA,IAAI,OAAO,GAAG;AACd;AACA,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC/B;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AAC1K,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC/I;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACvH,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACnCb;;ACAA;;ACAA;AAMA,SAAS,aAAa,GAAG;AACzB,IAAI,OAAO,CAAC,EAAE,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;AACxE;AACO,MAAM,kBAAkB,SAAS,cAAc,CAAC;AACvD,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7B,IAAI,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,IAAI,KAAK,CAAC,OAAO,EAAE;AACnB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;AAC3D,YAAY,OAAO,EAAE;AACrB,gBAAgB,aAAa,EAAE,aAAa,EAAE;AAC9C,aAAa;AACb,YAAY,eAAe,EAAE,IAAI;AACjC,SAAS,CAAC;AACV;AACA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE;AAC9D,YAAY,OAAO,EAAE;AACrB,gBAAgB,aAAa,EAAE,aAAa,EAAE;AAC9C,aAAa;AACb,YAAY,eAAe,EAAE,IAAI;AACjC,SAAS,CAAC;AACV;AACA,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE;AAC7D,YAAY,OAAO,EAAE;AACrB,gBAAgB,aAAa,EAAE,aAAa,EAAE;AAC9C,aAAa;AACb,YAAY,eAAe,EAAE,IAAI;AACjC,SAAS,CAAC;AACV;AACA,IAAI,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE;AAChC,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,IAAI,SAAS,EAAE,EAAE;AACvG,YAAY,OAAO,EAAE,EAAE;AACvB,YAAY,eAAe,EAAE,IAAI;AACjC,SAAS,CAAC;AACV;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AAC/K,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACpJ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AClDb;;ACAA;;ACAA;;ACAA;;ACAA;;ACAA;;ACKY,MAAC,SAAS,GAAG,CAAC,MAAM,EAAE,KAAK,KAAK;AAC5C,IAAI,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACnD,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACjC,IAAI,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACzD,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC3C,IAAI,IAAI,eAAe,CAAC,eAAe,EAAE,EAAE;AAC3C,QAAQ,OAAO,IAAI;AACnB;AACA;AACA,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;AAClD;AACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACnD,IAAI,OAAO,KAAK;AAChB;;ACXA;AACA;AACA;AACA;AACY,MAAC,uBAAuB,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK;AACtD,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACjC,IAAI,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACzD,IAAI,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACnD,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC3C,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAACA,YAAU,CAAC,CAAC,KAAK,KAAK;AAChD;AACA,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;AAClC;AACA;AACA,YAAY,IAAI,eAAe,CAAC,eAAe,EAAE,EAAE;AACnD;AACA,gBAAgB,kBAAkB,CAAC,wBAAwB,EAAE;AAC7D;AACA,gBAAgB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/D;AACA;AACA;AACA,QAAQ,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;AACtC,KAAK,CAAC,CAAC;AACP;;AC/BA;AAKO,MAAM,WAAW,CAAC;AACzB,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7B,IAAI,SAAS,GAAG,IAAI;AACpB;AACA;AACA;AACA,IAAI,MAAM,YAAY,GAAG;AACzB,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,OAAO,IAAI,CAAC,SAAS;AACjC;AACA,QAAQ,IAAI;AACZ,YAAY,IAAI,CAAC,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC;AACvD,iBAAiB,GAAG,CAAC,YAAY;AACjC,iBAAiB,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3D,YAAY,OAAO,IAAI,CAAC,SAAS,IAAI,EAAE;AACvC;AACA,QAAQ,MAAM;AACd;AACA;AACA,YAAY,OAAO,EAAE;AACrB;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;AAC7B;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AACtK,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC7I;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACrH,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACpCb;AACY,MAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,MAAM,KAAK;AACzD;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK;AAC9C,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC3C;AACA,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/C,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC;AACxB;AACA;AACA,IAAI,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AACvG;AACA,IAAI,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC;AACnD,IAAI,IAAI,qBAAqB,IAAI,YAAY,EAAE;AAC/C,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI;AAC5E,YAAY,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC;AAC1C,gBAAgB,UAAU,EAAE;AAC5B,oBAAoB,cAAc,EAAE,SAAS;AAC7C,iBAAiB;AACjB,aAAa,CAAC;AACd,YAAY,OAAO,IAAI,CAAC,WAAW,CAAC;AACpC,SAAS,CAAC,CAAC;AACX;AACA;AACA,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,GAAG,EAAE;AACpC,IAAI,IAAI;AACR,QAAQ,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnE,QAAQ,OAAO,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC3D;AACA,IAAI,MAAM;AACV;AACA,QAAQ,OAAO,KAAK;AACpB;AACA;;AC3CY,MAAC,aAAa,GAAG;AAC7B,IAAI;AACJ,QAAQ,OAAO,EAAE,cAAc;AAC/B,QAAQ,QAAQ,EAAE,kBAAkB;AACpC,KAAK;AACL,IAAI;AACJ,QAAQ,OAAO,EAAE,cAAc;AAC/B,QAAQ,QAAQ,EAAE,eAAe;AACjC,KAAK;AACL;;ACbA;;ACAA;;ACAA;AAiBO,MAAM,cAAc,CAAC;AAC5B,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1E,IAAI,kBAAkB,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjG,IAAI,cAAc,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzF;AACA,IAAI,wBAAwB,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3G,IAAI,wBAAwB,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3G;AACA,IAAI,sBAAsB,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,IAAI,sBAAsB,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG;AACA,IAAI,aAAa,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF;AACA,IAAI,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/H,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAC5B,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AACjC,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACvC,IAAI,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC7C,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C;AACA,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpF,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjF,IAAI,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtF,IAAI,UAAU;AACd,IAAI,UAAU;AACd,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxC,YAAY,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AAChE,YAAY,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC/C,YAAY,UAAU,EAAE,CAAC,KAAK,CAAC;AAC/B,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxC,YAAY,WAAW,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAClD,YAAY,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AAChE,YAAY,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,SAAS,CAAC;AACV;AACA,IAAI,QAAQ,GAAG;AACf;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;AACpC;AACA,YAAY,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC;AACvD;AACA;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK;AACpF,YAAY,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;AACpD,SAAS,CAAC;AACV;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK;AACpF,YAAY,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;AACpD,SAAS,CAAC;AACV;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACjD,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACnC,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC;AACA,YAAY,MAAM,YAAY,GAAG;AACjC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;AACxC;AACA,gBAAgB,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,IAAI,KAAK;AACvG,aAAa;AACb,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;AAC9D,gBAAgB,IAAI,EAAE,MAAM;AAC5B,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7C,iBAAiB;AACjB,gBAAgB,KAAK,EAAE,KAAK,IAAI;AAChC,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7C,oBAAoB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,sDAAsD,CAAC;AACjG,oBAAoB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC;AACxE,iBAAiB;AACjB,aAAa,CAAC;AACd;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACnC,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,YAAY,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAC1E,gBAAgB,IAAI,EAAE,MAAM;AAC5B,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7C,oBAAoB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AAC3C,oBAAoB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9C,iBAAiB;AACjB,gBAAgB,KAAK,EAAE,KAAK,IAAI;AAChC,oBAAoB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7C,oBAAoB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,iDAAiD,CAAC;AAC5F,oBAAoB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC;AAC1E,iBAAiB;AACjB,aAAa,CAAC;AACd;AACA;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AACxK,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,wBAAwB,EAAE,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,UAAU,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,wBAAwB,EAAE,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,UAAU,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,sBAAsB,EAAE,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,sBAAsB,EAAE,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,snIAAsnI,EAAE,MAAM,EAAE,CAAC,kmCAAkmC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,8CAA8C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,8MAA8M,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,2CAA2C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,0FAA0F,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,kDAAkD,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,oBAAoB,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,yHAAyH,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,iOAAiO,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,qBAAqB,CAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AAC9zT;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;AACxH,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE;AACrD,wBAAwB,YAAY;AACpC,wBAAwB,mBAAmB;AAC3C,wBAAwB,OAAO;AAC/B,wBAAwB,aAAa;AACrC,wBAAwB,QAAQ;AAChC,wBAAwB,YAAY;AACpC,wBAAwB,cAAc;AACtC,wBAAwB,YAAY;AACpC,wBAAwB,QAAQ;AAChC,wBAAwB,OAAO;AAC/B,wBAAwB,SAAS;AACjC,wBAAwB,aAAa;AACrC,wBAAwB,SAAS;AACjC,wBAAwB,WAAW;AACnC,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,snIAAsnI,EAAE,MAAM,EAAE,CAAC,kmCAAkmC,CAAC,EAAE;AAC/1K,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;;ACtIvC;;ACAA;;ACAA;AACA;AACA;;;;"}
1
+ {"version":3,"file":"acontplus-ng-auth.mjs","sources":["../tmp-esm2022/lib/domain/repositories/auth.repository.js","../tmp-esm2022/lib/repositories/token.repository.js","../tmp-esm2022/lib/ui/stores/auth.store.js","../tmp-esm2022/lib/services/url-redirect.service.js","../tmp-esm2022/lib/application/use-cases/login.use-case.js","../tmp-esm2022/lib/application/use-cases/register.use-case.js","../tmp-esm2022/lib/application/use-cases/refresh-token.use-case.js","../tmp-esm2022/lib/application/use-cases/logout.use-case.js","../tmp-esm2022/lib/application/use-cases/index.js","../tmp-esm2022/lib/application/index.js","../tmp-esm2022/lib/data/repositories/auth-http.repository.js","../tmp-esm2022/lib/data/repositories/index.js","../tmp-esm2022/lib/data/index.js","../tmp-esm2022/lib/domain/models/auth.js","../tmp-esm2022/lib/domain/models/index.js","../tmp-esm2022/lib/domain/repositories/index.js","../tmp-esm2022/lib/domain/index.js","../tmp-esm2022/lib/guards/auth.guard.js","../tmp-esm2022/lib/interceptors/auth-redirect.interceptor.js","../tmp-esm2022/lib/services/csrf.service.js","../tmp-esm2022/lib/interceptors/csrf.interceptor.js","../tmp-esm2022/lib/providers/auth.providers.js","../tmp-esm2022/lib/providers/index.js","../tmp-esm2022/lib/ui/stores/index.js","../tmp-esm2022/lib/ui/login/login.component.js","../tmp-esm2022/lib/ui/login/index.js","../tmp-esm2022/lib/ui/index.js","../tmp-esm2022/acontplus-ng-auth.js"],"sourcesContent":["export class AuthRepository {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctYXV0aC9zcmMvbGliL2RvbWFpbi9yZXBvc2l0b3JpZXMvYXV0aC5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBZ0IsY0FBYztDQUtuQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvZG9tYWluL3JlcG9zaXRvcmllcy9hdXRoLnJlcG9zaXRvcnkudHNcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvZ2luUmVxdWVzdCwgUmVnaXN0ZXJSZXF1ZXN0LCBSZWZyZXNoVG9rZW5SZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgnO1xuaW1wb3J0IHsgQXV0aFRva2VucyB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdXRoUmVwb3NpdG9yeSB7XG4gIGFic3RyYWN0IGxvZ2luKHJlcXVlc3Q6IExvZ2luUmVxdWVzdCk6IE9ic2VydmFibGU8QXV0aFRva2Vucz47XG4gIGFic3RyYWN0IHJlZ2lzdGVyKHJlcXVlc3Q6IFJlZ2lzdGVyUmVxdWVzdCk6IE9ic2VydmFibGU8QXV0aFRva2Vucz47XG4gIGFic3RyYWN0IHJlZnJlc2hUb2tlbihyZXF1ZXN0OiBSZWZyZXNoVG9rZW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPjtcbiAgYWJzdHJhY3QgbG9nb3V0KGVtYWlsOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPjtcbn1cbiJdfQ==","import { Injectable, inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { jwtDecode } from 'jwt-decode';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nimport * as i0 from \"@angular/core\";\nexport class TokenRepository {\n environment = inject(ENVIRONMENT);\n platformId = inject(PLATFORM_ID);\n saveTokens(tokens, rememberMe = false) {\n if (isPlatformBrowser(this.platformId)) {\n this.setToken(tokens.token, rememberMe);\n this.setRefreshToken(tokens.refreshToken, rememberMe);\n }\n }\n getToken() {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return (localStorage.getItem(this.environment.tokenKey) ||\n sessionStorage.getItem(this.environment.tokenKey));\n }\n getRefreshToken() {\n if (!isPlatformBrowser(this.platformId)) {\n return null;\n }\n return (localStorage.getItem(this.environment.refreshTokenKey) ||\n sessionStorage.getItem(this.environment.refreshTokenKey));\n }\n setToken(token, rememberMe = false) {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (rememberMe) {\n localStorage.setItem(this.environment.tokenKey, token);\n }\n else {\n sessionStorage.setItem(this.environment.tokenKey, token);\n }\n }\n setRefreshToken(refreshToken, rememberMe = false) {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (rememberMe) {\n localStorage.setItem(this.environment.refreshTokenKey, refreshToken);\n }\n else {\n sessionStorage.setItem(this.environment.refreshTokenKey, refreshToken);\n }\n }\n clearTokens() {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n localStorage.removeItem(this.environment.tokenKey);\n localStorage.removeItem(this.environment.refreshTokenKey);\n sessionStorage.removeItem(this.environment.tokenKey);\n sessionStorage.removeItem(this.environment.refreshTokenKey);\n }\n isAuthenticated() {\n const accessToken = this.getToken();\n if (!accessToken) {\n return false;\n }\n try {\n const decodedAccessToken = jwtDecode(accessToken);\n const accessExpiration = Number(decodedAccessToken.exp);\n const currentTimeUTC = Math.floor(Date.now() / 1000);\n return accessExpiration > currentTimeUTC;\n }\n catch {\n return false;\n }\n }\n needsRefresh() {\n const accessToken = this.getToken();\n if (!accessToken) {\n return false;\n }\n try {\n const decodedToken = jwtDecode(accessToken);\n const expiration = Number(decodedToken.exp);\n const currentTimeUTC = Math.floor(Date.now() / 1000);\n const timeUntilExpiry = expiration - currentTimeUTC;\n return timeUntilExpiry <= 300; // 5 minutes\n }\n catch {\n return false;\n }\n }\n getTokenPayload() {\n const token = this.getToken();\n if (!token)\n return null;\n try {\n return jwtDecode(token);\n }\n catch {\n return null;\n }\n }\n /**\n * Determines if tokens are stored persistently (localStorage) vs session (sessionStorage)\n */\n isRememberMeEnabled() {\n if (!isPlatformBrowser(this.platformId)) {\n return false;\n }\n // Check if tokens exist in localStorage (persistent storage)\n const tokenInLocalStorage = localStorage.getItem(this.environment.tokenKey);\n const refreshTokenInLocalStorage = localStorage.getItem(this.environment.refreshTokenKey);\n return !!(tokenInLocalStorage || refreshTokenInLocalStorage);\n }\n getUserData() {\n const token = this.getToken();\n if (!token) {\n return null;\n }\n try {\n const decodedToken = jwtDecode(token);\n const email = decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] ??\n decodedToken['email'] ??\n decodedToken['sub'] ??\n decodedToken['user_id'];\n const displayName = decodedToken['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'] ??\n decodedToken['displayName'] ??\n decodedToken['display_name'] ??\n decodedToken['name'] ??\n decodedToken['given_name'];\n const name = decodedToken['name'] ?? displayName;\n if (!email) {\n return null;\n }\n const userData = {\n email: email.toString(),\n displayName: displayName?.toString() ?? 'Unknown User',\n name: name?.toString(),\n roles: this.extractArrayField(decodedToken, ['roles', 'role']),\n permissions: this.extractArrayField(decodedToken, ['permissions', 'perms']),\n tenantId: decodedToken['tenantId']?.toString() ??\n decodedToken['tenant_id']?.toString() ??\n decodedToken['tenant']?.toString(),\n companyId: decodedToken['companyId']?.toString() ??\n decodedToken['company_id']?.toString() ??\n decodedToken['organizationId']?.toString() ??\n decodedToken['org_id']?.toString(),\n locale: decodedToken['locale']?.toString(),\n timezone: decodedToken['timezone']?.toString() ?? decodedToken['tz']?.toString(),\n };\n return userData;\n }\n catch {\n return null;\n }\n }\n /**\n * Extract array field from decoded token, trying multiple possible field names\n */\n extractArrayField(decodedToken, fieldNames) {\n for (const fieldName of fieldNames) {\n const value = decodedToken[fieldName];\n if (Array.isArray(value)) {\n return value.map(v => v.toString());\n }\n if (typeof value === 'string') {\n // Handle comma-separated string values\n return value\n .split(',')\n .map(v => v.trim())\n .filter(v => v.length > 0);\n }\n }\n return undefined;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TokenRepository, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TokenRepository, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: TokenRepository, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4ucmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9yZXBvc2l0b3JpZXMvdG9rZW4ucmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBTW5ELE1BQU0sT0FBTyxlQUFlO0lBQ2xCLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV6QyxVQUFVLENBQUMsTUFBa0IsRUFBRSxVQUFVLEdBQUcsS0FBSztRQUMvQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sQ0FDTCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQy9DLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFD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SztxQkFDVCxLQUFLLENBQUMsR0FBRyxDQUFDO3FCQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztxQkFDbEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7dUdBdk1VLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyBBdXRoVG9rZW5zLCBVc2VyRGF0YSB9IGZyb20gJ0BhY29udHBsdXMvY29yZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCB9IGZyb20gJ0BhY29udHBsdXMvbmctY29uZmlnJztcbmltcG9ydCB7IElUb2tlblByb3ZpZGVyIH0gZnJvbSAnQGFjb250cGx1cy9uZy1pbmZyYXN0cnVjdHVyZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUb2tlblJlcG9zaXRvcnkgaW1wbGVtZW50cyBJVG9rZW5Qcm92aWRlciB7XG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSBpbmplY3QoRU5WSVJPTk1FTlQpO1xuICBwcml2YXRlIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXG4gIHNhdmVUb2tlbnModG9rZW5zOiBBdXRoVG9rZW5zLCByZW1lbWJlck1lID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy5zZXRUb2tlbih0b2tlbnMudG9rZW4sIHJlbWVtYmVyTWUpO1xuICAgICAgdGhpcy5zZXRSZWZyZXNoVG9rZW4odG9rZW5zLnJlZnJlc2hUb2tlbiwgcmVtZW1iZXJNZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQudG9rZW5LZXkpIHx8XG4gICAgICBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQudG9rZW5LZXkpXG4gICAgKTtcbiAgfVxuXG4gIGdldFJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5lbnZpcm9ubWVudC5yZWZyZXNoVG9rZW5LZXkpIHx8XG4gICAgICBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5KVxuICAgICk7XG4gIH1cblxuICBzZXRUb2tlbih0b2tlbjogc3RyaW5nLCByZW1lbWJlck1lID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlbWVtYmVyTWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQudG9rZW5LZXksIHRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmVudmlyb25tZW50LnRva2VuS2V5LCB0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgc2V0UmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nLCByZW1lbWJlck1lID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlbWVtYmVyTWUpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5LCByZWZyZXNoVG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5LCByZWZyZXNoVG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyVG9rZW5zKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmVudmlyb25tZW50LnRva2VuS2V5KTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmVudmlyb25tZW50LnJlZnJlc2hUb2tlbktleSk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmVudmlyb25tZW50LnRva2VuS2V5KTtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5KTtcbiAgfVxuXG4gIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZEFjY2Vzc1Rva2VuID0gand0RGVjb2RlKGFjY2Vzc1Rva2VuKTtcbiAgICAgIGNvbnN0IGFjY2Vzc0V4cGlyYXRpb24gPSBOdW1iZXIoZGVjb2RlZEFjY2Vzc1Rva2VuLmV4cCk7XG4gICAgICBjb25zdCBjdXJyZW50VGltZVVUQyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuXG4gICAgICByZXR1cm4gYWNjZXNzRXhwaXJhdGlvbiA+IGN1cnJlbnRUaW1lVVRDO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5lZWRzUmVmcmVzaCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGp3dERlY29kZShhY2Nlc3NUb2tlbik7XG4gICAgICBjb25zdCBleHBpcmF0aW9uID0gTnVtYmVyKGRlY29kZWRUb2tlbi5leHApO1xuICAgICAgY29uc3QgY3VycmVudFRpbWVVVEMgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgIGNvbnN0IHRpbWVVbnRpbEV4cGlyeSA9IGV4cGlyYXRpb24gLSBjdXJyZW50VGltZVVUQztcblxuICAgICAgcmV0dXJuIHRpbWVVbnRpbEV4cGlyeSA8PSAzMDA7IC8vIDUgbWludXRlc1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldFRva2VuUGF5bG9hZCgpOiB1bmtub3duIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBpZiAoIXRva2VuKSByZXR1cm4gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gand0RGVjb2RlKHRva2VuKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRva2VucyBhcmUgc3RvcmVkIHBlcnNpc3RlbnRseSAobG9jYWxTdG9yYWdlKSB2cyBzZXNzaW9uIChzZXNzaW9uU3RvcmFnZSlcbiAgICovXG4gIGlzUmVtZW1iZXJNZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdG9rZW5zIGV4aXN0IGluIGxvY2FsU3RvcmFnZSAocGVyc2lzdGVudCBzdG9yYWdlKVxuICAgIGNvbnN0IHRva2VuSW5Mb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmVudmlyb25tZW50LnRva2VuS2V5KTtcbiAgICBjb25zdCByZWZyZXNoVG9rZW5JbkxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZW52aXJvbm1lbnQucmVmcmVzaFRva2VuS2V5KTtcblxuICAgIHJldHVybiAhISh0b2tlbkluTG9jYWxTdG9yYWdlIHx8IHJlZnJlc2hUb2tlbkluTG9jYWxTdG9yYWdlKTtcbiAgfVxuXG4gIGdldFVzZXJEYXRhKCk6IFVzZXJEYXRhIHwgbnVsbCB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGp3dERlY29kZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odG9rZW4pO1xuXG4gICAgICBjb25zdCBlbWFpbCA9XG4gICAgICAgIGRlY29kZWRUb2tlblsnaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvZW1haWxhZGRyZXNzJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWydlbWFpbCddID8/XG4gICAgICAgIGRlY29kZWRUb2tlblsnc3ViJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWyd1c2VyX2lkJ107XG5cbiAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID1cbiAgICAgICAgZGVjb2RlZFRva2VuWydodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9naXZlbm5hbWUnXSA/P1xuICAgICAgICBkZWNvZGVkVG9rZW5bJ2Rpc3BsYXlOYW1lJ10gPz9cbiAgICAgICAgZGVjb2RlZFRva2VuWydkaXNwbGF5X25hbWUnXSA/P1xuICAgICAgICBkZWNvZGVkVG9rZW5bJ25hbWUnXSA/P1xuICAgICAgICBkZWNvZGVkVG9rZW5bJ2dpdmVuX25hbWUnXTtcblxuICAgICAgY29uc3QgbmFtZSA9IGRlY29kZWRUb2tlblsnbmFtZSddID8/IGRpc3BsYXlOYW1lO1xuXG4gICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VyRGF0YTogVXNlckRhdGEgPSB7XG4gICAgICAgIGVtYWlsOiBlbWFpbC50b1N0cmluZygpLFxuICAgICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWU/LnRvU3RyaW5nKCkgPz8gJ1Vua25vd24gVXNlcicsXG4gICAgICAgIG5hbWU6IG5hbWU/LnRvU3RyaW5nKCksXG4gICAgICAgIHJvbGVzOiB0aGlzLmV4dHJhY3RBcnJheUZpZWxkKGRlY29kZWRUb2tlbiwgWydyb2xlcycsICdyb2xlJ10pLFxuICAgICAgICBwZXJtaXNzaW9uczogdGhpcy5leHRyYWN0QXJyYXlGaWVsZChkZWNvZGVkVG9rZW4sIFsncGVybWlzc2lvbnMnLCAncGVybXMnXSksXG4gICAgICAgIHRlbmFudElkOlxuICAgICAgICAgIGRlY29kZWRUb2tlblsndGVuYW50SWQnXT8udG9TdHJpbmcoKSA/P1xuICAgICAgICAgIGRlY29kZWRUb2tlblsndGVuYW50X2lkJ10/LnRvU3RyaW5nKCkgPz9cbiAgICAgICAgICBkZWNvZGVkVG9rZW5bJ3RlbmFudCddPy50b1N0cmluZygpLFxuICAgICAgICBjb21wYW55SWQ6XG4gICAgICAgICAgZGVjb2RlZFRva2VuWydjb21wYW55SWQnXT8udG9TdHJpbmcoKSA/P1xuICAgICAgICAgIGRlY29kZWRUb2tlblsnY29tcGFueV9pZCddPy50b1N0cmluZygpID8/XG4gICAgICAgICAgZGVjb2RlZFRva2VuWydvcmdhbml6YXRpb25JZCddPy50b1N0cmluZygpID8/XG4gICAgICAgICAgZGVjb2RlZFRva2VuWydvcmdfaWQnXT8udG9TdHJpbmcoKSxcbiAgICAgICAgbG9jYWxlOiBkZWNvZGVkVG9rZW5bJ2xvY2FsZSddPy50b1N0cmluZygpLFxuICAgICAgICB0aW1lem9uZTogZGVjb2RlZFRva2VuWyd0aW1lem9uZSddPy50b1N0cmluZygpID8/IGRlY29kZWRUb2tlblsndHonXT8udG9TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB1c2VyRGF0YTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGFycmF5IGZpZWxkIGZyb20gZGVjb2RlZCB0b2tlbiwgdHJ5aW5nIG11bHRpcGxlIHBvc3NpYmxlIGZpZWxkIG5hbWVzXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RBcnJheUZpZWxkKFxuICAgIGRlY29kZWRUb2tlbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgZmllbGROYW1lczogc3RyaW5nW10sXG4gICk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiBmaWVsZE5hbWVzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRlY29kZWRUb2tlbltmaWVsZE5hbWVdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAodiA9PiB2LnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGFuZGxlIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgdmFsdWVzXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxuICAgICAgICAgIC5maWx0ZXIodiA9PiB2Lmxlbmd0aCA+IDApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=","// src/lib/presentation/stores/auth.store.ts\nimport { Injectable, inject, signal, NgZone } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { of, tap, catchError } from 'rxjs';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { TokenRepository } from '../../repositories/token.repository';\nimport * as i0 from \"@angular/core\";\nexport class AuthStore {\n authRepository = inject(AuthRepository);\n tokenRepository = inject(TokenRepository);\n router = inject(Router);\n ngZone = inject(NgZone);\n // Authentication state signals\n _isAuthenticated = signal(false, ...(ngDevMode ? [{ debugName: \"_isAuthenticated\" }] : []));\n _isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"_isLoading\" }] : []));\n _user = signal(null, ...(ngDevMode ? [{ debugName: \"_user\" }] : []));\n // Public readonly signals\n isAuthenticated = this._isAuthenticated.asReadonly();\n isLoading = this._isLoading.asReadonly();\n user = this._user.asReadonly();\n // Private refresh token timeout (instead of interval)\n refreshTokenTimeout;\n refreshInProgress$;\n constructor() {\n this.initializeAuthentication();\n }\n /**\n * Initialize authentication state on app startup\n */\n initializeAuthentication() {\n this._isLoading.set(true);\n try {\n const isAuthenticated = this.tokenRepository.isAuthenticated();\n this._isAuthenticated.set(isAuthenticated);\n if (isAuthenticated) {\n const userData = this.tokenRepository.getUserData();\n this._user.set(userData);\n this.scheduleTokenRefresh();\n }\n }\n catch {\n this.logout();\n }\n finally {\n this._isLoading.set(false);\n }\n }\n /**\n * Schedule token refresh based on actual expiration time\n */\n scheduleTokenRefresh() {\n const accessToken = this.tokenRepository.getToken();\n if (!accessToken) {\n return;\n }\n try {\n const decodedToken = this.decodeToken(accessToken);\n const currentTime = Math.floor(Date.now() / 1000);\n const timeUntilExpiry = decodedToken.exp - currentTime;\n // Refresh 5 minutes before expiry (300 seconds)\n const refreshTime = Math.max((timeUntilExpiry - 300) * 1000, 1000);\n // Clear any existing timeout\n if (this.refreshTokenTimeout) {\n clearTimeout(this.refreshTokenTimeout);\n }\n this.ngZone.runOutsideAngular(() => {\n this.refreshTokenTimeout = window.setTimeout(() => {\n this.ngZone.run(() => {\n // Check if refresh is still needed before executing\n if (this.tokenRepository.needsRefresh()) {\n this.refreshToken().subscribe();\n }\n });\n }, refreshTime);\n });\n }\n catch {\n // Silent fail - token might be invalid\n }\n }\n /**\n * Stop token refresh timer\n */\n stopTokenRefreshTimer() {\n if (this.refreshTokenTimeout) {\n clearTimeout(this.refreshTokenTimeout);\n this.refreshTokenTimeout = undefined;\n }\n }\n /**\n * Refresh authentication tokens\n */\n refreshToken() {\n // Return existing refresh request if one is in progress\n if (this.refreshInProgress$) {\n return this.refreshInProgress$;\n }\n const userData = this.tokenRepository.getUserData();\n const refreshToken = this.tokenRepository.getRefreshToken();\n if (!userData?.email || !refreshToken) {\n this.logout();\n return of(null);\n }\n this.refreshInProgress$ = this.authRepository\n .refreshToken({\n email: userData.email,\n refreshToken,\n })\n .pipe(tap(tokens => {\n this.setAuthenticated(tokens);\n }), catchError(() => {\n this.logout();\n return of(null);\n }), tap({\n complete: () => {\n this.refreshInProgress$ = undefined;\n },\n error: () => {\n this.refreshInProgress$ = undefined;\n },\n }));\n return this.refreshInProgress$;\n }\n /**\n * Set authentication state after successful login\n */\n setAuthenticated(tokens, rememberMe = false) {\n this.tokenRepository.saveTokens(tokens, rememberMe);\n this._isAuthenticated.set(true);\n const userData = this.tokenRepository.getUserData();\n this._user.set(userData);\n this.scheduleTokenRefresh();\n }\n /**\n * Logout user and clear all authentication data\n */\n logout() {\n const user = this._user();\n if (user) {\n // Call server-side logout first\n this.authRepository.logout(user.email, '').subscribe({\n next: () => {\n // Server logout successful, clear client-side data\n this.performClientLogout();\n },\n error: () => {\n // Server logout failed, still clear client-side data for security\n this.performClientLogout();\n },\n });\n }\n else {\n // No user data, just clear client-side data\n this.performClientLogout();\n }\n }\n /**\n * Perform client-side logout operations\n */\n performClientLogout() {\n this.stopTokenRefreshTimer();\n this.tokenRepository.clearTokens();\n this._isAuthenticated.set(false);\n this._user.set(null);\n // Navigate to login page\n this.router.navigate(['/auth']);\n }\n /**\n * Check if user is authenticated\n */\n checkAuthentication() {\n const isAuthenticated = this.tokenRepository.isAuthenticated();\n this._isAuthenticated.set(isAuthenticated);\n if (!isAuthenticated) {\n this.logout();\n }\n return isAuthenticated;\n }\n /**\n * Decode JWT token\n */\n decodeToken(token) {\n try {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(atob(base64)\n .split('')\n .map(c => {\n return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`;\n })\n .join(''));\n return JSON.parse(jsonPayload);\n }\n catch {\n throw new Error('Invalid token format');\n }\n }\n /**\n * Cleanup on store destruction\n */\n ngOnDestroy() {\n this.stopTokenRefreshTimer();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthStore, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi91aS9zdG9yZXMvYXV0aC5zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0Q0FBNEM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBTXRFLE1BQU0sT0FBTyxTQUFTO0lBQ0gsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV6QywrQkFBK0I7SUFDZCxnQkFBZ0IsR0FBRyxNQUFNLENBQVUsS0FBSyw0REFBQyxDQUFDO0lBQzFDLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxzREFBQyxDQUFDO0lBQ3BDLEtBQUssR0FBRyxNQUFNLENBQWtCLElBQUksaURBQUMsQ0FBQztJQUV2RCwwQkFBMEI7SUFDakIsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyRCxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFD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QUFXLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQzt1R0EvTlUsU0FBUzsyR0FBVCxTQUFTLGNBRlIsTUFBTTs7MkZBRVAsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvbGliL3ByZXNlbnRhdGlvbi9zdG9yZXMvYXV0aC5zdG9yZS50c1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBzaWduYWwsIE9uRGVzdHJveSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRhcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFJlcG9zaXRvcnkgfSBmcm9tICcuLi8uLi9kb21haW4vcmVwb3NpdG9yaWVzL2F1dGgucmVwb3NpdG9yeSc7XG5pbXBvcnQgeyBUb2tlblJlcG9zaXRvcnkgfSBmcm9tICcuLi8uLi9yZXBvc2l0b3JpZXMvdG9rZW4ucmVwb3NpdG9yeSc7XG5pbXBvcnQgeyBBdXRoVG9rZW5zLCBVc2VyRGF0YSwgRGVjb2RlZFRva2VuIH0gZnJvbSAnQGFjb250cGx1cy9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhTdG9yZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFJlcG9zaXRvcnkgPSBpbmplY3QoQXV0aFJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRva2VuUmVwb3NpdG9yeSA9IGluamVjdChUb2tlblJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIC8vIEF1dGhlbnRpY2F0aW9uIHN0YXRlIHNpZ25hbHNcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdXRoZW50aWNhdGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNMb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXNlciA9IHNpZ25hbDxVc2VyRGF0YSB8IG51bGw+KG51bGwpO1xuXG4gIC8vIFB1YmxpYyByZWFkb25seSBzaWduYWxzXG4gIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZCA9IHRoaXMuX2lzQXV0aGVudGljYXRlZC5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGlzTG9hZGluZyA9IHRoaXMuX2lzTG9hZGluZy5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IHVzZXIgPSB0aGlzLl91c2VyLmFzUmVhZG9ubHkoKTtcblxuICAvLyBQcml2YXRlIHJlZnJlc2ggdG9rZW4gdGltZW91dCAoaW5zdGVhZCBvZiBpbnRlcnZhbClcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5UaW1lb3V0PzogbnVtYmVyO1xuICBwcml2YXRlIHJlZnJlc2hJblByb2dyZXNzJD86IE9ic2VydmFibGU8QXV0aFRva2VucyB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUF1dGhlbnRpY2F0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhdXRoZW50aWNhdGlvbiBzdGF0ZSBvbiBhcHAgc3RhcnR1cFxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQXV0aGVudGljYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5faXNMb2FkaW5nLnNldCh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLnRva2VuUmVwb3NpdG9yeS5pc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICAgIHRoaXMuX2lzQXV0aGVudGljYXRlZC5zZXQoaXNBdXRoZW50aWNhdGVkKTtcblxuICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICBjb25zdCB1c2VyRGF0YSA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFVzZXJEYXRhKCk7XG4gICAgICAgIHRoaXMuX3VzZXIuc2V0KHVzZXJEYXRhKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVRva2VuUmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5faXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIHRva2VuIHJlZnJlc2ggYmFzZWQgb24gYWN0dWFsIGV4cGlyYXRpb24gdGltZVxuICAgKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZVRva2VuUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFRva2VuKCk7XG4gICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSB0aGlzLmRlY29kZVRva2VuKGFjY2Vzc1Rva2VuKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICBjb25zdCB0aW1lVW50aWxFeHBpcnkgPSBkZWNvZGVkVG9rZW4uZXhwIC0gY3VycmVudFRpbWU7XG5cbiAgICAgIC8vIFJlZnJlc2ggNSBtaW51dGVzIGJlZm9yZSBleHBpcnkgKDMwMCBzZWNvbmRzKVxuICAgICAgY29uc3QgcmVmcmVzaFRpbWUgPSBNYXRoLm1heCgodGltZVVudGlsRXhwaXJ5IC0gMzAwKSAqIDEwMDAsIDEwMDApO1xuXG4gICAgICAvLyBDbGVhciBhbnkgZXhpc3RpbmcgdGltZW91dFxuICAgICAgaWYgKHRoaXMucmVmcmVzaFRva2VuVGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoVG9rZW5UaW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlZnJlc2ggaXMgc3RpbGwgbmVlZGVkIGJlZm9yZSBleGVjdXRpbmdcbiAgICAgICAgICAgIGlmICh0aGlzLnRva2VuUmVwb3NpdG9yeS5uZWVkc1JlZnJlc2goKSkge1xuICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbigpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCByZWZyZXNoVGltZSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNpbGVudCBmYWlsIC0gdG9rZW4gbWlnaHQgYmUgaW52YWxpZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRva2VuIHJlZnJlc2ggdGltZXJcbiAgICovXG4gIHByaXZhdGUgc3RvcFRva2VuUmVmcmVzaFRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlZnJlc2hUb2tlblRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUb2tlblRpbWVvdXQpO1xuICAgICAgdGhpcy5yZWZyZXNoVG9rZW5UaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIGF1dGhlbnRpY2F0aW9uIHRva2Vuc1xuICAgKi9cbiAgcmVmcmVzaFRva2VuKCk6IE9ic2VydmFibGU8QXV0aFRva2VucyB8IG51bGw+IHtcbiAgICAvLyBSZXR1cm4gZXhpc3RpbmcgcmVmcmVzaCByZXF1ZXN0IGlmIG9uZSBpcyBpbiBwcm9ncmVzc1xuICAgIGlmICh0aGlzLnJlZnJlc2hJblByb2dyZXNzJCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaEluUHJvZ3Jlc3MkO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJEYXRhID0gdGhpcy50b2tlblJlcG9zaXRvcnkuZ2V0VXNlckRhdGEoKTtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnRva2VuUmVwb3NpdG9yeS5nZXRSZWZyZXNoVG9rZW4oKTtcblxuICAgIGlmICghdXNlckRhdGE/LmVtYWlsIHx8ICFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoSW5Qcm9ncmVzcyQgPSB0aGlzLmF1dGhSZXBvc2l0b3J5XG4gICAgICAucmVmcmVzaFRva2VuKHtcbiAgICAgICAgZW1haWw6IHVzZXJEYXRhLmVtYWlsLFxuICAgICAgICByZWZyZXNoVG9rZW4sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCh0b2tlbnMgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0QXV0aGVudGljYXRlZCh0b2tlbnMpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoe1xuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hJblByb2dyZXNzJCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hJblByb2dyZXNzJCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoSW5Qcm9ncmVzcyQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGF1dGhlbnRpY2F0aW9uIHN0YXRlIGFmdGVyIHN1Y2Nlc3NmdWwgbG9naW5cbiAgICovXG4gIHNldEF1dGhlbnRpY2F0ZWQodG9rZW5zOiBBdXRoVG9rZW5zLCByZW1lbWJlck1lID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuUmVwb3NpdG9yeS5zYXZlVG9rZW5zKHRva2VucywgcmVtZW1iZXJNZSk7XG4gICAgdGhpcy5faXNBdXRoZW50aWNhdGVkLnNldCh0cnVlKTtcbiAgICBjb25zdCB1c2VyRGF0YSA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFVzZXJEYXRhKCk7XG4gICAgdGhpcy5fdXNlci5zZXQodXNlckRhdGEpO1xuICAgIHRoaXMuc2NoZWR1bGVUb2tlblJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dvdXQgdXNlciBhbmQgY2xlYXIgYWxsIGF1dGhlbnRpY2F0aW9uIGRhdGFcbiAgICovXG4gIGxvZ291dCgpOiB2b2lkIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlcigpO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICAvLyBDYWxsIHNlcnZlci1zaWRlIGxvZ291dCBmaXJzdFxuICAgICAgdGhpcy5hdXRoUmVwb3NpdG9yeS5sb2dvdXQodXNlci5lbWFpbCwgJycpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBTZXJ2ZXIgbG9nb3V0IHN1Y2Nlc3NmdWwsIGNsZWFyIGNsaWVudC1zaWRlIGRhdGFcbiAgICAgICAgICB0aGlzLnBlcmZvcm1DbGllbnRMb2dvdXQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTZXJ2ZXIgbG9nb3V0IGZhaWxlZCwgc3RpbGwgY2xlYXIgY2xpZW50LXNpZGUgZGF0YSBmb3Igc2VjdXJpdHlcbiAgICAgICAgICB0aGlzLnBlcmZvcm1DbGllbnRMb2dvdXQoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyB1c2VyIGRhdGEsIGp1c3QgY2xlYXIgY2xpZW50LXNpZGUgZGF0YVxuICAgICAgdGhpcy5wZXJmb3JtQ2xpZW50TG9nb3V0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gY2xpZW50LXNpZGUgbG9nb3V0IG9wZXJhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgcGVyZm9ybUNsaWVudExvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BUb2tlblJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMudG9rZW5SZXBvc2l0b3J5LmNsZWFyVG9rZW5zKCk7XG4gICAgdGhpcy5faXNBdXRoZW50aWNhdGVkLnNldChmYWxzZSk7XG4gICAgdGhpcy5fdXNlci5zZXQobnVsbCk7XG5cbiAgICAvLyBOYXZpZ2F0ZSB0byBsb2dpbiBwYWdlXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXV0aCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB1c2VyIGlzIGF1dGhlbnRpY2F0ZWRcbiAgICovXG4gIGNoZWNrQXV0aGVudGljYXRpb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNBdXRoZW50aWNhdGVkID0gdGhpcy50b2tlblJlcG9zaXRvcnkuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgdGhpcy5faXNBdXRoZW50aWNhdGVkLnNldChpc0F1dGhlbnRpY2F0ZWQpO1xuXG4gICAgaWYgKCFpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQXV0aGVudGljYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGUgSldUIHRva2VuXG4gICAqL1xuICBwcml2YXRlIGRlY29kZVRva2VuKHRva2VuOiBzdHJpbmcpOiBEZWNvZGVkVG9rZW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlNjRVcmwgPSB0b2tlbi5zcGxpdCgnLicpWzFdO1xuICAgICAgY29uc3QgYmFzZTY0ID0gYmFzZTY0VXJsLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XG4gICAgICBjb25zdCBqc29uUGF5bG9hZCA9IGRlY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgYXRvYihiYXNlNjQpXG4gICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgIC5tYXAoYyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYCUke2AwMCR7Yy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKX1gO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25QYXlsb2FkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0b2tlbiBmb3JtYXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW51cCBvbiBzdG9yZSBkZXN0cnVjdGlvblxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wVG9rZW5SZWZyZXNoVGltZXIoKTtcbiAgfVxufVxuIl19","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport * as i0 from \"@angular/core\";\n/**\n * Service to manage URL redirection after authentication\n * Stores the intended URL when session is lost and redirects to it after successful login\n * SSR-compatible by checking platform before accessing sessionStorage\n */\nexport class UrlRedirectService {\n REDIRECT_URL_KEY = 'acp_redirect_url';\n EXCLUDED_ROUTES = [\n '/login',\n '/auth',\n '/register',\n '/forgot-password',\n '/reset-password',\n ];\n router = inject(Router);\n platformId = inject(PLATFORM_ID);\n document = inject(DOCUMENT);\n /**\n * Stores the current URL for later redirection\n * @param url - The URL to store (defaults to current URL)\n */\n storeIntendedUrl(url) {\n // Only store in browser environment\n if (!this.isBrowser()) {\n return;\n }\n const urlToStore = url || this.router.url;\n // Don't store authentication-related routes\n if (this.isExcludedRoute(urlToStore)) {\n return;\n }\n // Don't store URLs with query parameters that might contain sensitive data\n const urlWithoutParams = urlToStore.split('?')[0];\n this.getSessionStorage()?.setItem(this.REDIRECT_URL_KEY, urlWithoutParams);\n }\n /**\n * Gets the stored intended URL\n * @returns The stored URL or null if none exists\n */\n getIntendedUrl() {\n if (!this.isBrowser()) {\n return null;\n }\n return this.getSessionStorage()?.getItem(this.REDIRECT_URL_KEY) || null;\n }\n /**\n * Redirects to the stored URL and clears it from storage\n * @param defaultRoute - The default route to navigate to if no URL is stored\n */\n redirectToIntendedUrl(defaultRoute = '/') {\n const intendedUrl = this.getIntendedUrl();\n if (intendedUrl && !this.isExcludedRoute(intendedUrl)) {\n this.clearIntendedUrl();\n this.router.navigateByUrl(intendedUrl);\n }\n else {\n this.router.navigate([defaultRoute]);\n }\n }\n /**\n * Clears the stored intended URL\n */\n clearIntendedUrl() {\n if (!this.isBrowser()) {\n return;\n }\n this.getSessionStorage()?.removeItem(this.REDIRECT_URL_KEY);\n }\n /**\n * Checks if a URL should be excluded from redirection\n * @param url - The URL to check\n * @returns True if the URL should be excluded\n */\n isExcludedRoute(url) {\n return this.EXCLUDED_ROUTES.some(route => url.includes(route));\n }\n /**\n * Stores the current URL if it's not an excluded route\n * Useful for guards and interceptors\n */\n storeCurrentUrlIfAllowed() {\n const currentUrl = this.router.url;\n if (!this.isExcludedRoute(currentUrl)) {\n this.storeIntendedUrl(currentUrl);\n }\n }\n /**\n * Checks if we're running in a browser environment\n * @returns True if running in browser, false if SSR\n */\n isBrowser() {\n return isPlatformBrowser(this.platformId);\n }\n /**\n * Safely gets sessionStorage reference\n * @returns sessionStorage object or null if not available\n */\n getSessionStorage() {\n if (!this.isBrowser()) {\n return null;\n }\n try {\n return this.document.defaultView?.sessionStorage || null;\n }\n catch {\n // Handle cases where sessionStorage might be disabled\n return null;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UrlRedirectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UrlRedirectService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: UrlRedirectService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLXJlZGlyZWN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvc2VydmljZXMvdXJsLXJlZGlyZWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRTlEOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ1osZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7SUFDdEMsZUFBZSxHQUFHO1FBQ2pDLFFBQVE7UUFDUixPQUFPO1FBQ1AsV0FBVztRQUNYLGtCQUFrQjtRQUNsQixpQkFBaUI7S0FDbEIsQ0FBQztJQUVlLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdDOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLEdBQVk7UUFDM0Isb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUUxQyw0Q0FBNEM7UUFDNUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTztRQUNULENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLFlBQVksR0FBRyxHQUFHO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUUxQyxJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZUFBZSxDQUFDLEdBQVc7UUFDakMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsd0JBQXdCO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssU0FBUztRQUNmLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQztRQUMzRCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asc0RBQXNEO1lBQ3RELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7dUdBbEhVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBQTEFURk9STV9JRCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIG1hbmFnZSBVUkwgcmVkaXJlY3Rpb24gYWZ0ZXIgYXV0aGVudGljYXRpb25cbiAqIFN0b3JlcyB0aGUgaW50ZW5kZWQgVVJMIHdoZW4gc2Vzc2lvbiBpcyBsb3N0IGFuZCByZWRpcmVjdHMgdG8gaXQgYWZ0ZXIgc3VjY2Vzc2Z1bCBsb2dpblxuICogU1NSLWNvbXBhdGlibGUgYnkgY2hlY2tpbmcgcGxhdGZvcm0gYmVmb3JlIGFjY2Vzc2luZyBzZXNzaW9uU3RvcmFnZVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVXJsUmVkaXJlY3RTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBSRURJUkVDVF9VUkxfS0VZID0gJ2FjcF9yZWRpcmVjdF91cmwnO1xuICBwcml2YXRlIHJlYWRvbmx5IEVYQ0xVREVEX1JPVVRFUyA9IFtcbiAgICAnL2xvZ2luJyxcbiAgICAnL2F1dGgnLFxuICAgICcvcmVnaXN0ZXInLFxuICAgICcvZm9yZ290LXBhc3N3b3JkJyxcbiAgICAnL3Jlc2V0LXBhc3N3b3JkJyxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBjdXJyZW50IFVSTCBmb3IgbGF0ZXIgcmVkaXJlY3Rpb25cbiAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gc3RvcmUgKGRlZmF1bHRzIHRvIGN1cnJlbnQgVVJMKVxuICAgKi9cbiAgc3RvcmVJbnRlbmRlZFVybCh1cmw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHN0b3JlIGluIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmxUb1N0b3JlID0gdXJsIHx8IHRoaXMucm91dGVyLnVybDtcblxuICAgIC8vIERvbid0IHN0b3JlIGF1dGhlbnRpY2F0aW9uLXJlbGF0ZWQgcm91dGVzXG4gICAgaWYgKHRoaXMuaXNFeGNsdWRlZFJvdXRlKHVybFRvU3RvcmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG9uJ3Qgc3RvcmUgVVJMcyB3aXRoIHF1ZXJ5IHBhcmFtZXRlcnMgdGhhdCBtaWdodCBjb250YWluIHNlbnNpdGl2ZSBkYXRhXG4gICAgY29uc3QgdXJsV2l0aG91dFBhcmFtcyA9IHVybFRvU3RvcmUuc3BsaXQoJz8nKVswXTtcbiAgICB0aGlzLmdldFNlc3Npb25TdG9yYWdlKCk/LnNldEl0ZW0odGhpcy5SRURJUkVDVF9VUkxfS0VZLCB1cmxXaXRob3V0UGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdG9yZWQgaW50ZW5kZWQgVVJMXG4gICAqIEByZXR1cm5zIFRoZSBzdG9yZWQgVVJMIG9yIG51bGwgaWYgbm9uZSBleGlzdHNcbiAgICovXG4gIGdldEludGVuZGVkVXJsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFNlc3Npb25TdG9yYWdlKCk/LmdldEl0ZW0odGhpcy5SRURJUkVDVF9VUkxfS0VZKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byB0aGUgc3RvcmVkIFVSTCBhbmQgY2xlYXJzIGl0IGZyb20gc3RvcmFnZVxuICAgKiBAcGFyYW0gZGVmYXVsdFJvdXRlIC0gVGhlIGRlZmF1bHQgcm91dGUgdG8gbmF2aWdhdGUgdG8gaWYgbm8gVVJMIGlzIHN0b3JlZFxuICAgKi9cbiAgcmVkaXJlY3RUb0ludGVuZGVkVXJsKGRlZmF1bHRSb3V0ZSA9ICcvJyk6IHZvaWQge1xuICAgIGNvbnN0IGludGVuZGVkVXJsID0gdGhpcy5nZXRJbnRlbmRlZFVybCgpO1xuXG4gICAgaWYgKGludGVuZGVkVXJsICYmICF0aGlzLmlzRXhjbHVkZWRSb3V0ZShpbnRlbmRlZFVybCkpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnRlbmRlZFVybCgpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChpbnRlbmRlZFVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtkZWZhdWx0Um91dGVdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBzdG9yZWQgaW50ZW5kZWQgVVJMXG4gICAqL1xuICBjbGVhckludGVuZGVkVXJsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmdldFNlc3Npb25TdG9yYWdlKCk/LnJlbW92ZUl0ZW0odGhpcy5SRURJUkVDVF9VUkxfS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBVUkwgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gcmVkaXJlY3Rpb25cbiAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gY2hlY2tcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgVVJMIHNob3VsZCBiZSBleGNsdWRlZFxuICAgKi9cbiAgcHJpdmF0ZSBpc0V4Y2x1ZGVkUm91dGUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5FWENMVURFRF9ST1VURVMuc29tZShyb3V0ZSA9PiB1cmwuaW5jbHVkZXMocm91dGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIGN1cnJlbnQgVVJMIGlmIGl0J3Mgbm90IGFuIGV4Y2x1ZGVkIHJvdXRlXG4gICAqIFVzZWZ1bCBmb3IgZ3VhcmRzIGFuZCBpbnRlcmNlcHRvcnNcbiAgICovXG4gIHN0b3JlQ3VycmVudFVybElmQWxsb3dlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIGlmICghdGhpcy5pc0V4Y2x1ZGVkUm91dGUoY3VycmVudFVybCkpIHtcbiAgICAgIHRoaXMuc3RvcmVJbnRlbmRlZFVybChjdXJyZW50VXJsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBicm93c2VyIGVudmlyb25tZW50XG4gICAqIEByZXR1cm5zIFRydWUgaWYgcnVubmluZyBpbiBicm93c2VyLCBmYWxzZSBpZiBTU1JcbiAgICovXG4gIHByaXZhdGUgaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBnZXRzIHNlc3Npb25TdG9yYWdlIHJlZmVyZW5jZVxuICAgKiBAcmV0dXJucyBzZXNzaW9uU3RvcmFnZSBvYmplY3Qgb3IgbnVsbCBpZiBub3QgYXZhaWxhYmxlXG4gICAqL1xuICBwcml2YXRlIGdldFNlc3Npb25TdG9yYWdlKCk6IFN0b3JhZ2UgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc/LnNlc3Npb25TdG9yYWdlIHx8IG51bGw7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgc2Vzc2lvblN0b3JhZ2UgbWlnaHQgYmUgZGlzYWJsZWRcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19","// src/lib/application/use-cases/login.use-case.ts\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { tap } from 'rxjs';\nimport { BaseUseCase } from '@acontplus/ng-infrastructure';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { AuthStore } from '../../ui/stores/auth.store';\nimport { UrlRedirectService } from '../../services/url-redirect.service';\nimport * as i0 from \"@angular/core\";\nexport class LoginUseCase extends BaseUseCase {\n authRepository = inject(AuthRepository);\n authStore = inject(AuthStore);\n router = inject(Router);\n urlRedirectService = inject(UrlRedirectService);\n execute(request) {\n return this.authRepository.login(request).pipe(tap(tokens => {\n // Set authentication state with rememberMe preference\n this.authStore.setAuthenticated(tokens, request.rememberMe ?? false);\n // Redirect to intended URL or default route\n this.urlRedirectService.redirectToIntendedUrl('/');\n }));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginUseCase, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginUseCase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginUseCase, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4udXNlLWNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vdXNlLWNhc2VzL2xvZ2luLnVzZS1jYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFLekUsTUFBTSxPQUFPLFlBQWEsU0FBUSxXQUFxQztJQUNwRCxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUVqRSxPQUFPLENBQUMsT0FBcUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzVDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNYLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBRXJFLDRDQUE0QztZQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7dUdBaEJVLFlBQVk7MkdBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvbG9naW4udXNlLWNhc2UudHNcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZVVzZUNhc2UgfSBmcm9tICdAYWNvbnRwbHVzL25nLWluZnJhc3RydWN0dXJlJztcbmltcG9ydCB7IEF1dGhSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLi4vZG9tYWluL3JlcG9zaXRvcmllcy9hdXRoLnJlcG9zaXRvcnknO1xuaW1wb3J0IHsgTG9naW5SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluL21vZGVscy9hdXRoJztcbmltcG9ydCB7IEF1dGhUb2tlbnMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFN0b3JlIH0gZnJvbSAnLi4vLi4vdWkvc3RvcmVzL2F1dGguc3RvcmUnO1xuaW1wb3J0IHsgVXJsUmVkaXJlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXJsLXJlZGlyZWN0LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9naW5Vc2VDYXNlIGV4dGVuZHMgQmFzZVVzZUNhc2U8TG9naW5SZXF1ZXN0LCBBdXRoVG9rZW5zPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFJlcG9zaXRvcnkgPSBpbmplY3QoQXV0aFJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTdG9yZSA9IGluamVjdChBdXRoU3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVybFJlZGlyZWN0U2VydmljZSA9IGluamVjdChVcmxSZWRpcmVjdFNlcnZpY2UpO1xuXG4gIGV4ZWN1dGUocmVxdWVzdDogTG9naW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFJlcG9zaXRvcnkubG9naW4ocmVxdWVzdCkucGlwZShcbiAgICAgIHRhcCh0b2tlbnMgPT4ge1xuICAgICAgICAvLyBTZXQgYXV0aGVudGljYXRpb24gc3RhdGUgd2l0aCByZW1lbWJlck1lIHByZWZlcmVuY2VcbiAgICAgICAgdGhpcy5hdXRoU3RvcmUuc2V0QXV0aGVudGljYXRlZCh0b2tlbnMsIHJlcXVlc3QucmVtZW1iZXJNZSA/PyBmYWxzZSk7XG5cbiAgICAgICAgLy8gUmVkaXJlY3QgdG8gaW50ZW5kZWQgVVJMIG9yIGRlZmF1bHQgcm91dGVcbiAgICAgICAgdGhpcy51cmxSZWRpcmVjdFNlcnZpY2UucmVkaXJlY3RUb0ludGVuZGVkVXJsKCcvJyk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=","// src/lib/application/use-cases/register.use-case.ts\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { tap } from 'rxjs';\nimport { BaseUseCase } from '@acontplus/ng-infrastructure';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { AuthStore } from '../../ui/stores/auth.store';\nimport * as i0 from \"@angular/core\";\nexport class RegisterUseCase extends BaseUseCase {\n authRepository = inject(AuthRepository);\n authStore = inject(AuthStore);\n router = inject(Router);\n execute(request) {\n return this.authRepository.register(request).pipe(tap(tokens => {\n // Set authentication state\n this.authStore.setAuthenticated(tokens);\n // Navigate to main page\n this.router.navigate(['/']);\n }));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RegisterUseCase, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RegisterUseCase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RegisterUseCase, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIudXNlLWNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vdXNlLWNhc2VzL3JlZ2lzdGVyLnVzZS1jYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFEQUFxRDtBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsV0FBd0M7SUFDMUQsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFekMsT0FBTyxDQUFDLE9BQXdCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMvQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDWCwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV4Qyx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO3VHQWZVLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvcmVnaXN0ZXIudXNlLWNhc2UudHNcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZVVzZUNhc2UgfSBmcm9tICdAYWNvbnRwbHVzL25nLWluZnJhc3RydWN0dXJlJztcbmltcG9ydCB7IEF1dGhSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLi4vZG9tYWluL3JlcG9zaXRvcmllcy9hdXRoLnJlcG9zaXRvcnknO1xuaW1wb3J0IHsgUmVnaXN0ZXJSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluL21vZGVscy9hdXRoJztcbmltcG9ydCB7IEF1dGhUb2tlbnMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFN0b3JlIH0gZnJvbSAnLi4vLi4vdWkvc3RvcmVzL2F1dGguc3RvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJVc2VDYXNlIGV4dGVuZHMgQmFzZVVzZUNhc2U8UmVnaXN0ZXJSZXF1ZXN0LCBBdXRoVG9rZW5zPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFJlcG9zaXRvcnkgPSBpbmplY3QoQXV0aFJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTdG9yZSA9IGluamVjdChBdXRoU3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIGV4ZWN1dGUocmVxdWVzdDogUmVnaXN0ZXJSZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFJlcG9zaXRvcnkucmVnaXN0ZXIocmVxdWVzdCkucGlwZShcbiAgICAgIHRhcCh0b2tlbnMgPT4ge1xuICAgICAgICAvLyBTZXQgYXV0aGVudGljYXRpb24gc3RhdGVcbiAgICAgICAgdGhpcy5hdXRoU3RvcmUuc2V0QXV0aGVudGljYXRlZCh0b2tlbnMpO1xuXG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIG1haW4gcGFnZVxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=","// src/lib/application/use-cases/refresh-token.use-case.ts\nimport { Injectable, inject } from '@angular/core';\nimport { throwError, catchError, tap } from 'rxjs';\nimport { BaseUseCase } from '@acontplus/ng-infrastructure';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { TokenRepository } from '../../repositories/token.repository';\nimport { AuthStore } from '../../ui/stores/auth.store';\nimport * as i0 from \"@angular/core\";\nexport class RefreshTokenUseCase extends BaseUseCase {\n authRepository = inject(AuthRepository);\n tokenRepository = inject(TokenRepository);\n authStore = inject(AuthStore);\n execute() {\n const userData = this.tokenRepository.getUserData();\n const refreshToken = this.tokenRepository.getRefreshToken();\n if (!userData?.email || !refreshToken || refreshToken.trim().length === 0) {\n const error = new Error('No refresh token or email available');\n return throwError(() => error);\n }\n return this.authRepository\n .refreshToken({\n email: userData.email,\n refreshToken,\n })\n .pipe(tap(tokens => {\n // Preserve the rememberMe preference from the current token storage\n const rememberMe = this.tokenRepository.isRememberMeEnabled();\n // Update authentication state\n this.authStore.setAuthenticated(tokens, rememberMe);\n }), catchError(error => {\n // Don't logout here, let the interceptor handle it\n return throwError(() => error);\n }));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RefreshTokenUseCase, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RefreshTokenUseCase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: RefreshTokenUseCase, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC10b2tlbi51c2UtY2FzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvcmVmcmVzaC10b2tlbi51c2UtY2FzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQTZCO0lBQ25ELGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRS9DLE9BQU87UUFDTCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFNUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjO2FBQ3ZCLFlBQVksQ0FBQztZQUNaLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztZQUNyQixZQUFZO1NBQ2IsQ0FBQzthQUNELElBQUksQ0FDSCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDWCxvRUFBb0U7WUFDcEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzlELDhCQUE4QjtZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsbURBQW1EO1lBQ25ELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO3VHQS9CVSxtQkFBbUI7MkdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvcmVmcmVzaC10b2tlbi51c2UtY2FzZS50c1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VVc2VDYXNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1pbmZyYXN0cnVjdHVyZSc7XG5pbXBvcnQgeyBBdXRoUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2RvbWFpbi9yZXBvc2l0b3JpZXMvYXV0aC5yZXBvc2l0b3J5JztcbmltcG9ydCB7IFRva2VuUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL3JlcG9zaXRvcmllcy90b2tlbi5yZXBvc2l0b3J5JztcbmltcG9ydCB7IEF1dGhUb2tlbnMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFN0b3JlIH0gZnJvbSAnLi4vLi4vdWkvc3RvcmVzL2F1dGguc3RvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVmcmVzaFRva2VuVXNlQ2FzZSBleHRlbmRzIEJhc2VVc2VDYXNlPHZvaWQsIEF1dGhUb2tlbnM+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoUmVwb3NpdG9yeSA9IGluamVjdChBdXRoUmVwb3NpdG9yeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9rZW5SZXBvc2l0b3J5ID0gaW5qZWN0KFRva2VuUmVwb3NpdG9yeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFN0b3JlID0gaW5qZWN0KEF1dGhTdG9yZSk7XG5cbiAgZXhlY3V0ZSgpOiBPYnNlcnZhYmxlPEF1dGhUb2tlbnM+IHtcbiAgICBjb25zdCB1c2VyRGF0YSA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFVzZXJEYXRhKCk7XG4gICAgY29uc3QgcmVmcmVzaFRva2VuID0gdGhpcy50b2tlblJlcG9zaXRvcnkuZ2V0UmVmcmVzaFRva2VuKCk7XG5cbiAgICBpZiAoIXVzZXJEYXRhPy5lbWFpbCB8fCAhcmVmcmVzaFRva2VuIHx8IHJlZnJlc2hUb2tlbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignTm8gcmVmcmVzaCB0b2tlbiBvciBlbWFpbCBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hdXRoUmVwb3NpdG9yeVxuICAgICAgLnJlZnJlc2hUb2tlbih7XG4gICAgICAgIGVtYWlsOiB1c2VyRGF0YS5lbWFpbCxcbiAgICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAodG9rZW5zID0+IHtcbiAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgcmVtZW1iZXJNZSBwcmVmZXJlbmNlIGZyb20gdGhlIGN1cnJlbnQgdG9rZW4gc3RvcmFnZVxuICAgICAgICAgIGNvbnN0IHJlbWVtYmVyTWUgPSB0aGlzLnRva2VuUmVwb3NpdG9yeS5pc1JlbWVtYmVyTWVFbmFibGVkKCk7XG4gICAgICAgICAgLy8gVXBkYXRlIGF1dGhlbnRpY2F0aW9uIHN0YXRlXG4gICAgICAgICAgdGhpcy5hdXRoU3RvcmUuc2V0QXV0aGVudGljYXRlZCh0b2tlbnMsIHJlbWVtYmVyTWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgLy8gRG9uJ3QgbG9nb3V0IGhlcmUsIGxldCB0aGUgaW50ZXJjZXB0b3IgaGFuZGxlIGl0XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==","// src/lib/application/use-cases/logout.use-case.ts\nimport { Injectable, inject } from '@angular/core';\nimport { of, tap } from 'rxjs';\nimport { BaseUseCase } from '@acontplus/ng-infrastructure';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { TokenRepository } from '../../repositories/token.repository';\nimport { AuthStore } from '../../ui/stores/auth.store';\nimport * as i0 from \"@angular/core\";\nexport class LogoutUseCase extends BaseUseCase {\n authRepository = inject(AuthRepository);\n tokenRepository = inject(TokenRepository);\n authStore = inject(AuthStore);\n execute() {\n const userData = this.tokenRepository.getUserData();\n const refreshToken = this.tokenRepository.getRefreshToken();\n if (userData?.email && refreshToken && refreshToken.length > 0) {\n return this.authRepository\n .logout(userData.email, refreshToken)\n .pipe(tap(() => this.cleanup()));\n }\n this.cleanup();\n return of(void 0);\n }\n cleanup() {\n // Use auth store for centralized logout\n this.authStore.logout();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LogoutUseCase, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LogoutUseCase, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LogoutUseCase, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nb3V0LnVzZS1jYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctYXV0aC9zcmMvbGliL2FwcGxpY2F0aW9uL3VzZS1jYXNlcy9sb2dvdXQudXNlLWNhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbURBQW1EO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLGFBQWMsU0FBUSxXQUF1QjtJQUN2QyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUvQyxPQUFPO1FBQ0wsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTVELElBQUksUUFBUSxFQUFFLEtBQUssSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxPQUFPLElBQUksQ0FBQyxjQUFjO2lCQUN2QixNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUM7aUJBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRU8sT0FBTztRQUNiLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzFCLENBQUM7dUdBdEJVLGFBQWE7MkdBQWIsYUFBYSxjQUZaLE1BQU07OzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvbG9nb3V0LnVzZS1jYXNlLnRzXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VVc2VDYXNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1pbmZyYXN0cnVjdHVyZSc7XG5pbXBvcnQgeyBBdXRoUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2RvbWFpbi9yZXBvc2l0b3JpZXMvYXV0aC5yZXBvc2l0b3J5JztcbmltcG9ydCB7IFRva2VuUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL3JlcG9zaXRvcmllcy90b2tlbi5yZXBvc2l0b3J5JztcbmltcG9ydCB7IEF1dGhTdG9yZSB9IGZyb20gJy4uLy4uL3VpL3N0b3Jlcy9hdXRoLnN0b3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExvZ291dFVzZUNhc2UgZXh0ZW5kcyBCYXNlVXNlQ2FzZTx2b2lkLCB2b2lkPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFJlcG9zaXRvcnkgPSBpbmplY3QoQXV0aFJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRva2VuUmVwb3NpdG9yeSA9IGluamVjdChUb2tlblJlcG9zaXRvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTdG9yZSA9IGluamVjdChBdXRoU3RvcmUpO1xuXG4gIGV4ZWN1dGUoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgdXNlckRhdGEgPSB0aGlzLnRva2VuUmVwb3NpdG9yeS5nZXRVc2VyRGF0YSgpO1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMudG9rZW5SZXBvc2l0b3J5LmdldFJlZnJlc2hUb2tlbigpO1xuXG4gICAgaWYgKHVzZXJEYXRhPy5lbWFpbCAmJiByZWZyZXNoVG9rZW4gJiYgcmVmcmVzaFRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmF1dGhSZXBvc2l0b3J5XG4gICAgICAgIC5sb2dvdXQodXNlckRhdGEuZW1haWwsIHJlZnJlc2hUb2tlbilcbiAgICAgICAgLnBpcGUodGFwKCgpID0+IHRoaXMuY2xlYW51cCgpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgcmV0dXJuIG9mKHZvaWQgMCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXAoKTogdm9pZCB7XG4gICAgLy8gVXNlIGF1dGggc3RvcmUgZm9yIGNlbnRyYWxpemVkIGxvZ291dFxuICAgIHRoaXMuYXV0aFN0b3JlLmxvZ291dCgpO1xuICB9XG59XG4iXX0=","// src/lib/application/use-cases/index.ts\nexport * from './login.use-case';\nexport * from './register.use-case';\nexport * from './refresh-token.use-case';\nexport * from './logout.use-case';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vdXNlLWNhc2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vbG9naW4udXNlLWNhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlci51c2UtY2FzZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlZnJlc2gtdG9rZW4udXNlLWNhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2dvdXQudXNlLWNhc2UnO1xuIl19","// src/lib/application/index.ts\nexport * from './use-cases';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9hcHBsaWNhdGlvbi9pbmRleC50c1xuZXhwb3J0ICogZnJvbSAnLi91c2UtY2FzZXMnO1xuIl19","// src/lib/data/repositories/auth-http.repository.ts\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { AuthRepository } from '../../domain/repositories/auth.repository';\nimport { AUTH_API } from '@acontplus/ng-config';\nimport * as i0 from \"@angular/core\";\nfunction getDeviceInfo() {\n return `${navigator.platform ?? 'Unknown'} - ${navigator.userAgent}`;\n}\nexport class AuthHttpRepository extends AuthRepository {\n http = inject(HttpClient);\n URL = `${AUTH_API.AUTH}`;\n login(request) {\n return this.http.post(`${this.URL}login`, request, {\n headers: {\n 'Device-Info': getDeviceInfo(),\n },\n withCredentials: true,\n });\n }\n register(request) {\n return this.http.post(`${this.URL}register`, request, {\n headers: {\n 'Device-Info': getDeviceInfo(),\n },\n withCredentials: true,\n });\n }\n refreshToken(request) {\n return this.http.post(`${this.URL}refresh`, request, {\n headers: {\n 'Device-Info': getDeviceInfo(),\n },\n withCredentials: true,\n });\n }\n logout(email, refreshToken) {\n return this.http.post(`${this.URL}logout`, { email, refreshToken: refreshToken || undefined }, {\n headers: {},\n withCredentials: true, // Ensure cookies are sent\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthHttpRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthHttpRepository, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: AuthHttpRepository, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1odHRwLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZGF0YS9yZXBvc2l0b3JpZXMvYXV0aC1odHRwLnJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9EO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFHM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUVoRCxTQUFTLGFBQWE7SUFDcEIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLElBQUksU0FBUyxNQUFNLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN2RSxDQUFDO0FBS0QsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFDbkMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFMUMsS0FBSyxDQUFDLE9BQXFCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLEVBQUUsT0FBTyxFQUFFO1lBQzdELE9BQU8sRUFBRTtnQkFDUCxhQUFhLEVBQUUsYUFBYSxFQUFFO2FBQy9CO1lBQ0QsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUF3QjtRQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLE9BQU8sRUFBRTtZQUNoRSxPQUFPLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFLGFBQWEsRUFBRTthQUMvQjtZQUNELGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBNEI7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBYSxHQUFHLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxPQUFPLEVBQUU7WUFDL0QsT0FBTyxFQUFFO2dCQUNQLGFBQWEsRUFBRSxhQUFhLEVBQUU7YUFDL0I7WUFDRCxlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWEsRUFBRSxZQUFvQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFDbkIsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksSUFBSSxTQUFTLEVBQUUsRUFDbEQ7WUFDRSxPQUFPLEVBQUUsRUFBRTtZQUNYLGVBQWUsRUFBRSxJQUFJLEVBQUUsMEJBQTBCO1NBQ2xELENBQ0YsQ0FBQztJQUNKLENBQUM7dUdBeENVLGtCQUFrQjsyR0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvbGliL2RhdGEvcmVwb3NpdG9yaWVzL2F1dGgtaHR0cC5yZXBvc2l0b3J5LnRzXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2RvbWFpbi9yZXBvc2l0b3JpZXMvYXV0aC5yZXBvc2l0b3J5JztcbmltcG9ydCB7IExvZ2luUmVxdWVzdCwgUmVnaXN0ZXJSZXF1ZXN0LCBSZWZyZXNoVG9rZW5SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluL21vZGVscy9hdXRoJztcbmltcG9ydCB7IEF1dGhUb2tlbnMgfSBmcm9tICdAYWNvbnRwbHVzL2NvcmUnO1xuaW1wb3J0IHsgQVVUSF9BUEkgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5cbmZ1bmN0aW9uIGdldERldmljZUluZm8oKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke25hdmlnYXRvci5wbGF0Zm9ybSA/PyAnVW5rbm93bid9IC0gJHtuYXZpZ2F0b3IudXNlckFnZW50fWA7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoSHR0cFJlcG9zaXRvcnkgZXh0ZW5kcyBBdXRoUmVwb3NpdG9yeSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBVUkwgPSBgJHtBVVRIX0FQSS5BVVRIfWA7XG5cbiAgbG9naW4ocmVxdWVzdDogTG9naW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEF1dGhUb2tlbnM+KGAke3RoaXMuVVJMfWxvZ2luYCwgcmVxdWVzdCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnRGV2aWNlLUluZm8nOiBnZXREZXZpY2VJbmZvKCksXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcmVnaXN0ZXIocmVxdWVzdDogUmVnaXN0ZXJSZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoVG9rZW5zPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEF1dGhUb2tlbnM+KGAke3RoaXMuVVJMfXJlZ2lzdGVyYCwgcmVxdWVzdCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnRGV2aWNlLUluZm8nOiBnZXREZXZpY2VJbmZvKCksXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaFRva2VuKHJlcXVlc3Q6IFJlZnJlc2hUb2tlblJlcXVlc3QpOiBPYnNlcnZhYmxlPEF1dGhUb2tlbnM+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXV0aFRva2Vucz4oYCR7dGhpcy5VUkx9cmVmcmVzaGAsIHJlcXVlc3QsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0RldmljZS1JbmZvJzogZ2V0RGV2aWNlSW5mbygpLFxuICAgICAgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGxvZ291dChlbWFpbDogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDx2b2lkPihcbiAgICAgIGAke3RoaXMuVVJMfWxvZ291dGAsXG4gICAgICB7IGVtYWlsLCByZWZyZXNoVG9rZW46IHJlZnJlc2hUb2tlbiB8fCB1bmRlZmluZWQgfSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSwgLy8gRW5zdXJlIGNvb2tpZXMgYXJlIHNlbnRcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIl19","// src/lib/data/repositories/index.ts\nexport * from './auth-http.repository';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZGF0YS9yZXBvc2l0b3JpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUNBQXFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvbGliL2RhdGEvcmVwb3NpdG9yaWVzL2luZGV4LnRzXG5leHBvcnQgKiBmcm9tICcuL2F1dGgtaHR0cC5yZXBvc2l0b3J5JztcbiJdfQ==","// src/lib/data/index.ts\nexport * from './repositories';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZGF0YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvZGF0YS9pbmRleC50c1xuZXhwb3J0ICogZnJvbSAnLi9yZXBvc2l0b3JpZXMnO1xuIl19","// src/lib/domain/models/auth.ts\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9kb21haW4vbW9kZWxzL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9kb21haW4vbW9kZWxzL2F1dGgudHNcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICByZW1lbWJlck1lPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlblJlcXVlc3Qge1xuICBlbWFpbDogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbn1cbiJdfQ==","// src/lib/domain/models/index.ts\nexport * from './auth';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZG9tYWluL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsY0FBYyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvbGliL2RvbWFpbi9tb2RlbHMvaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vYXV0aCc7XG4iXX0=","// src/lib/domain/repositories/index.ts\nexport * from './auth.repository';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZG9tYWluL3JlcG9zaXRvcmllcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvZG9tYWluL3JlcG9zaXRvcmllcy9pbmRleC50c1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoLnJlcG9zaXRvcnknO1xuIl19","// src/lib/domain/index.ts\nexport * from './models';\nexport * from './repositories';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvZG9tYWluL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9kb21haW4vaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVwb3NpdG9yaWVzJztcbiJdfQ==","import { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TokenRepository } from '../repositories/token.repository';\nimport { UrlRedirectService } from '../services/url-redirect.service';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nexport const authGuard = (_route, state) => {\n const tokenRepository = inject(TokenRepository);\n const router = inject(Router);\n const urlRedirectService = inject(UrlRedirectService);\n const environment = inject(ENVIRONMENT);\n if (tokenRepository.isAuthenticated()) {\n return true;\n }\n // Store the current URL for redirection after login\n urlRedirectService.storeIntendedUrl(state.url);\n // Redirect to login page (configurable via environment)\n router.navigate([`/${environment.loginRoute}`]);\n return false;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBaUIsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3hELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFeEMsSUFBSSxlQUFlLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRS9DLHdEQUF3RDtJQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVG9rZW5SZXBvc2l0b3J5IH0gZnJvbSAnLi4vcmVwb3NpdG9yaWVzL3Rva2VuLnJlcG9zaXRvcnknO1xuaW1wb3J0IHsgVXJsUmVkaXJlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXJsLXJlZGlyZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRU5WSVJPTk1FTlQgfSBmcm9tICdAYWNvbnRwbHVzL25nLWNvbmZpZyc7XG5cbmV4cG9ydCBjb25zdCBhdXRoR3VhcmQ6IENhbkFjdGl2YXRlRm4gPSAoX3JvdXRlLCBzdGF0ZSkgPT4ge1xuICBjb25zdCB0b2tlblJlcG9zaXRvcnkgPSBpbmplY3QoVG9rZW5SZXBvc2l0b3J5KTtcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIGNvbnN0IHVybFJlZGlyZWN0U2VydmljZSA9IGluamVjdChVcmxSZWRpcmVjdFNlcnZpY2UpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgaWYgKHRva2VuUmVwb3NpdG9yeS5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgVVJMIGZvciByZWRpcmVjdGlvbiBhZnRlciBsb2dpblxuICB1cmxSZWRpcmVjdFNlcnZpY2Uuc3RvcmVJbnRlbmRlZFVybChzdGF0ZS51cmwpO1xuXG4gIC8vIFJlZGlyZWN0IHRvIGxvZ2luIHBhZ2UgKGNvbmZpZ3VyYWJsZSB2aWEgZW52aXJvbm1lbnQpXG4gIHJvdXRlci5uYXZpZ2F0ZShbYC8ke2Vudmlyb25tZW50LmxvZ2luUm91dGV9YF0pO1xuICByZXR1cm4gZmFsc2U7XG59O1xuIl19","import { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { catchError } from 'rxjs/operators';\nimport { throwError } from 'rxjs';\nimport { UrlRedirectService } from '../services/url-redirect.service';\nimport { TokenRepository } from '../repositories/token.repository';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\n/**\n * Interceptor that handles authentication errors and manages URL redirection\n * Captures the current URL when a 401 error occurs and redirects to login\n */\nexport const authRedirectInterceptor = (req, next) => {\n const router = inject(Router);\n const urlRedirectService = inject(UrlRedirectService);\n const tokenRepository = inject(TokenRepository);\n const environment = inject(ENVIRONMENT);\n return next(req).pipe(catchError((error) => {\n // Handle 401 Unauthorized errors\n if (error.status === 401) {\n // Only store and redirect if user was previously authenticated\n // This prevents redirect loops and handles session expiry scenarios\n if (tokenRepository.isAuthenticated()) {\n // Store the current URL for redirection after re-authentication\n urlRedirectService.storeCurrentUrlIfAllowed();\n // Navigate to login page\n router.navigate([`/${environment.loginRoute}`]);\n }\n }\n // Re-throw the error so other error handlers can process it\n return throwError(() => error);\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1yZWRpcmVjdC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9pbnRlcmNlcHRvcnMvYXV0aC1yZWRpcmVjdC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUN0RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDbkIsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1FBQ3RDLGlDQUFpQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDekIsK0RBQStEO1lBQy9ELG9FQUFvRTtZQUNwRSxJQUFJLGVBQWUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxnRUFBZ0U7Z0JBQ2hFLGtCQUFrQixDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBRTlDLHlCQUF5QjtnQkFDekIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQztRQUVELDREQUE0RDtRQUM1RCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEludGVyY2VwdG9yRm4sIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVybFJlZGlyZWN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VybC1yZWRpcmVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFRva2VuUmVwb3NpdG9yeSB9IGZyb20gJy4uL3JlcG9zaXRvcmllcy90b2tlbi5yZXBvc2l0b3J5JztcbmltcG9ydCB7IEVOVklST05NRU5UIH0gZnJvbSAnQGFjb250cGx1cy9uZy1jb25maWcnO1xuXG4vKipcbiAqIEludGVyY2VwdG9yIHRoYXQgaGFuZGxlcyBhdXRoZW50aWNhdGlvbiBlcnJvcnMgYW5kIG1hbmFnZXMgVVJMIHJlZGlyZWN0aW9uXG4gKiBDYXB0dXJlcyB0aGUgY3VycmVudCBVUkwgd2hlbiBhIDQwMSBlcnJvciBvY2N1cnMgYW5kIHJlZGlyZWN0cyB0byBsb2dpblxuICovXG5leHBvcnQgY29uc3QgYXV0aFJlZGlyZWN0SW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xuICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgY29uc3QgdXJsUmVkaXJlY3RTZXJ2aWNlID0gaW5qZWN0KFVybFJlZGlyZWN0U2VydmljZSk7XG4gIGNvbnN0IHRva2VuUmVwb3NpdG9yeSA9IGluamVjdChUb2tlblJlcG9zaXRvcnkpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGluamVjdChFTlZJUk9OTUVOVCk7XG5cbiAgcmV0dXJuIG5leHQocmVxKS5waXBlKFxuICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgLy8gSGFuZGxlIDQwMSBVbmF1dGhvcml6ZWQgZXJyb3JzXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgLy8gT25seSBzdG9yZSBhbmQgcmVkaXJlY3QgaWYgdXNlciB3YXMgcHJldmlvdXNseSBhdXRoZW50aWNhdGVkXG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgcmVkaXJlY3QgbG9vcHMgYW5kIGhhbmRsZXMgc2Vzc2lvbiBleHBpcnkgc2NlbmFyaW9zXG4gICAgICAgIGlmICh0b2tlblJlcG9zaXRvcnkuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBVUkwgZm9yIHJlZGlyZWN0aW9uIGFmdGVyIHJlLWF1dGhlbnRpY2F0aW9uXG4gICAgICAgICAgdXJsUmVkaXJlY3RTZXJ2aWNlLnN0b3JlQ3VycmVudFVybElmQWxsb3dlZCgpO1xuXG4gICAgICAgICAgLy8gTmF2aWdhdGUgdG8gbG9naW4gcGFnZVxuICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbYC8ke2Vudmlyb25tZW50LmxvZ2luUm91dGV9YF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlLXRocm93IHRoZSBlcnJvciBzbyBvdGhlciBlcnJvciBoYW5kbGVycyBjYW4gcHJvY2VzcyBpdFxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgIH0pLFxuICApO1xufTtcbiJdfQ==","// src/lib/services/csrf.service.ts\nimport { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { firstValueFrom, map } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class CsrfService {\n http = inject(HttpClient);\n csrfToken = null;\n /**\n * Get CSRF token, fetching it if not available\n */\n async getCsrfToken() {\n if (this.csrfToken) {\n return this.csrfToken;\n }\n try {\n this.csrfToken = await firstValueFrom(this.http\n .get('csrf-token')\n .pipe(map(response => response.csrfToken)));\n return this.csrfToken || '';\n }\n catch {\n // If CSRF endpoint fails, return empty token\n // Server should handle missing CSRF tokens appropriately\n return '';\n }\n }\n /**\n * Clear stored CSRF token (useful on logout)\n */\n clearCsrfToken() {\n this.csrfToken = null;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CsrfService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CsrfService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: CsrfService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NyZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctYXV0aC9zcmMvbGliL3NlcnZpY2VzL2NzcmYuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUszQyxNQUFNLE9BQU8sV0FBVztJQUNkLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFrQixJQUFJLENBQUM7SUFFeEM7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxjQUFjLENBQ25DLElBQUksQ0FBQyxJQUFJO2lCQUNOLEdBQUcsQ0FBd0IsWUFBWSxDQUFDO2lCQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQzdDLENBQUM7WUFFRixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw2Q0FBNkM7WUFDN0MseURBQXlEO1lBQ3pELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO3VHQWhDVSxXQUFXOzJHQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvc2VydmljZXMvY3NyZi5zZXJ2aWNlLnRzXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDc3JmU2VydmljZSB7XG4gIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSBjc3JmVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBHZXQgQ1NSRiB0b2tlbiwgZmV0Y2hpbmcgaXQgaWYgbm90IGF2YWlsYWJsZVxuICAgKi9cbiAgYXN5bmMgZ2V0Q3NyZlRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuY3NyZlRva2VuKSB7XG4gICAgICByZXR1cm4gdGhpcy5jc3JmVG9rZW47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY3NyZlRva2VuID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgIC5nZXQ8eyBjc3JmVG9rZW46IHN0cmluZyB9PignY3NyZi10b2tlbicpXG4gICAgICAgICAgLnBpcGUobWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmNzcmZUb2tlbikpLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHRoaXMuY3NyZlRva2VuIHx8ICcnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWYgQ1NSRiBlbmRwb2ludCBmYWlscywgcmV0dXJuIGVtcHR5IHRva2VuXG4gICAgICAvLyBTZXJ2ZXIgc2hvdWxkIGhhbmRsZSBtaXNzaW5nIENTUkYgdG9rZW5zIGFwcHJvcHJpYXRlbHlcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgc3RvcmVkIENTUkYgdG9rZW4gKHVzZWZ1bCBvbiBsb2dvdXQpXG4gICAqL1xuICBjbGVhckNzcmZUb2tlbigpOiB2b2lkIHtcbiAgICB0aGlzLmNzcmZUb2tlbiA9IG51bGw7XG4gIH1cbn1cbiJdfQ==","import { HttpContextToken } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { from } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { CsrfService } from '../services/csrf.service';\n// A token to use with HttpContext for skipping CSRF token addition on specific requests.\nexport const SKIP_CSRF = new HttpContextToken(() => false);\n/**\n * HTTP interceptor that automatically adds CSRF tokens to state-changing requests\n * Only applies to requests to the same origin to avoid leaking tokens to external APIs\n */\nexport const csrfInterceptor = (req, next) => {\n const csrfService = inject(CsrfService);\n // Check if CSRF should be skipped for this request\n const skipCsrf = req.context.get(SKIP_CSRF);\n if (skipCsrf) {\n return next(req);\n }\n // Only add CSRF token to state-changing requests (POST, PUT, PATCH, DELETE)\n const isStateChangingMethod = ['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method.toUpperCase());\n // Only add CSRF token to same-origin requests\n const isSameOrigin = isRequestToSameOrigin(req);\n if (isStateChangingMethod && isSameOrigin) {\n return from(csrfService.getCsrfToken()).pipe(switchMap(csrfToken => {\n const modifiedReq = req.clone({\n setHeaders: {\n 'X-CSRF-Token': csrfToken,\n },\n });\n return next(modifiedReq);\n }));\n }\n // For non-state-changing requests or external requests, proceed without modification\n return next(req);\n};\n/**\n * Checks if the request is going to the same origin as the current application\n */\nfunction isRequestToSameOrigin(req) {\n try {\n const requestUrl = new URL(req.url, window.location.origin);\n return requestUrl.origin === window.location.origin;\n }\n catch {\n // If URL parsing fails, assume it's not same origin for security\n return false;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NyZi5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi9pbnRlcmNlcHRvcnMvY3NyZi5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixDQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXBFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDOUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXhDLG1EQUFtRDtJQUNuRCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUN2RSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUN6QixDQUFDO0lBRUYsOENBQThDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhELElBQUkscUJBQXFCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMxQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDcEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDNUIsVUFBVSxFQUFFO29CQUNWLGNBQWMsRUFBRSxTQUFTO2lCQUMxQjthQUNGLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxHQUF5QjtJQUN0RCxJQUFJLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsT0FBTyxVQUFVLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3RELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxpRUFBaUU7UUFDakUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBJbnRlcmNlcHRvckZuLCBIdHRwUmVxdWVzdCwgSHR0cENvbnRleHRUb2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3NyZlNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jc3JmLnNlcnZpY2UnO1xuXG4vLyBBIHRva2VuIHRvIHVzZSB3aXRoIEh0dHBDb250ZXh0IGZvciBza2lwcGluZyBDU1JGIHRva2VuIGFkZGl0aW9uIG9uIHNwZWNpZmljIHJlcXVlc3RzLlxuZXhwb3J0IGNvbnN0IFNLSVBfQ1NSRiA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4+KCgpID0+IGZhbHNlKTtcblxuLyoqXG4gKiBIVFRQIGludGVyY2VwdG9yIHRoYXQgYXV0b21hdGljYWxseSBhZGRzIENTUkYgdG9rZW5zIHRvIHN0YXRlLWNoYW5naW5nIHJlcXVlc3RzXG4gKiBPbmx5IGFwcGxpZXMgdG8gcmVxdWVzdHMgdG8gdGhlIHNhbWUgb3JpZ2luIHRvIGF2b2lkIGxlYWtpbmcgdG9rZW5zIHRvIGV4dGVybmFsIEFQSXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNzcmZJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxLCBuZXh0KSA9PiB7XG4gIGNvbnN0IGNzcmZTZXJ2aWNlID0gaW5qZWN0KENzcmZTZXJ2aWNlKTtcblxuICAvLyBDaGVjayBpZiBDU1JGIHNob3VsZCBiZSBza2lwcGVkIGZvciB0aGlzIHJlcXVlc3RcbiAgY29uc3Qgc2tpcENzcmYgPSByZXEuY29udGV4dC5nZXQoU0tJUF9DU1JGKTtcbiAgaWYgKHNraXBDc3JmKSB7XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfVxuXG4gIC8vIE9ubHkgYWRkIENTUkYgdG9rZW4gdG8gc3RhdGUtY2hhbmdpbmcgcmVxdWVzdHMgKFBPU1QsIFBVVCwgUEFUQ0gsIERFTEVURSlcbiAgY29uc3QgaXNTdGF0ZUNoYW5naW5nTWV0aG9kID0gWydQT1NUJywgJ1BVVCcsICdQQVRDSCcsICdERUxFVEUnXS5pbmNsdWRlcyhcbiAgICByZXEubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICk7XG5cbiAgLy8gT25seSBhZGQgQ1NSRiB0b2tlbiB0byBzYW1lLW9yaWdpbiByZXF1ZXN0c1xuICBjb25zdCBpc1NhbWVPcmlnaW4gPSBpc1JlcXVlc3RUb1NhbWVPcmlnaW4ocmVxKTtcblxuICBpZiAoaXNTdGF0ZUNoYW5naW5nTWV0aG9kICYmIGlzU2FtZU9yaWdpbikge1xuICAgIHJldHVybiBmcm9tKGNzcmZTZXJ2aWNlLmdldENzcmZUb2tlbigpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNzcmZUb2tlbiA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVkUmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICAgICAnWC1DU1JGLVRva2VuJzogY3NyZlRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV4dChtb2RpZmllZFJlcSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLy8gRm9yIG5vbi1zdGF0ZS1jaGFuZ2luZyByZXF1ZXN0cyBvciBleHRlcm5hbCByZXF1ZXN0cywgcHJvY2VlZCB3aXRob3V0IG1vZGlmaWNhdGlvblxuICByZXR1cm4gbmV4dChyZXEpO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHJlcXVlc3QgaXMgZ29pbmcgdG8gdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uXG4gKi9cbmZ1bmN0aW9uIGlzUmVxdWVzdFRvU2FtZU9yaWdpbihyZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+KTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVxdWVzdFVybCA9IG5ldyBVUkwocmVxLnVybCwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgcmV0dXJuIHJlcXVlc3RVcmwub3JpZ2luID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZiBVUkwgcGFyc2luZyBmYWlscywgYXNzdW1lIGl0J3Mgbm90IHNhbWUgb3JpZ2luIGZvciBzZWN1cml0eVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19","import { TOKEN_PROVIDER } from '@acontplus/ng-infrastructure';\nimport { TokenRepository } from '../repositories/token.repository';\nimport { AuthRepository } from '../domain/repositories/auth.repository';\nimport { AuthHttpRepository } from '../data/repositories/auth-http.repository';\nexport const authProviders = [\n {\n provide: AuthRepository,\n useClass: AuthHttpRepository,\n },\n {\n provide: TOKEN_PROVIDER,\n useClass: TokenRepository,\n },\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvcHJvdmlkZXJzL2F1dGgucHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRS9FLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBZTtJQUN2QztRQUNFLE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLFFBQVEsRUFBRSxrQkFBa0I7S0FDN0I7SUFDRDtRQUNFLE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLFFBQVEsRUFBRSxlQUFlO0tBQzFCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvcHJvdmlkZXJzL2F1dGgucHJvdmlkZXJzLnRzXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVE9LRU5fUFJPVklERVIgfSBmcm9tICdAYWNvbnRwbHVzL25nLWluZnJhc3RydWN0dXJlJztcbmltcG9ydCB7IFRva2VuUmVwb3NpdG9yeSB9IGZyb20gJy4uL3JlcG9zaXRvcmllcy90b2tlbi5yZXBvc2l0b3J5JztcbmltcG9ydCB7IEF1dGhSZXBvc2l0b3J5IH0gZnJvbSAnLi4vZG9tYWluL3JlcG9zaXRvcmllcy9hdXRoLnJlcG9zaXRvcnknO1xuaW1wb3J0IHsgQXV0aEh0dHBSZXBvc2l0b3J5IH0gZnJvbSAnLi4vZGF0YS9yZXBvc2l0b3JpZXMvYXV0aC1odHRwLnJlcG9zaXRvcnknO1xuXG5leHBvcnQgY29uc3QgYXV0aFByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAge1xuICAgIHByb3ZpZGU6IEF1dGhSZXBvc2l0b3J5LFxuICAgIHVzZUNsYXNzOiBBdXRoSHR0cFJlcG9zaXRvcnksXG4gIH0sXG4gIHtcbiAgICBwcm92aWRlOiBUT0tFTl9QUk9WSURFUixcbiAgICB1c2VDbGFzczogVG9rZW5SZXBvc2l0b3J5LFxuICB9LFxuXTtcbiJdfQ==","// src/lib/providers/index.ts\nexport * from './auth.providers';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3QixjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9wcm92aWRlcnMvaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vYXV0aC5wcm92aWRlcnMnO1xuIl19","// src/lib/presentation/stores/index.ts\nexport * from './auth.store';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvdWkvc3RvcmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QztBQUN2QyxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvcHJlc2VudGF0aW9uL3N0b3Jlcy9pbmRleC50c1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoLnN0b3JlJztcbiJdfQ==","// src/lib/presentation/components/login/login.component.ts\nimport { ChangeDetectionStrategy, Component, inject, input, signal, computed, ViewEncapsulation, } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, Validators, ReactiveFormsModule, } from '@angular/forms';\nimport { MatCard, MatCardContent, MatCardFooter, MatCardHeader, MatCardTitle, } from '@angular/material/card';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatAnchor, MatButton } from '@angular/material/button';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { AuthStore } from '../stores/auth.store';\nimport { LoginUseCase } from '../../application/use-cases/login.use-case';\nimport { RegisterUseCase } from '../../application/use-cases/register.use-case';\nimport { LoggingService } from '@acontplus/ng-infrastructure';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nexport class LoginComponent {\n title = input('Login', ...(ngDevMode ? [{ debugName: \"title\" }] : []));\n showRegisterButton = input(true, ...(ngDevMode ? [{ debugName: \"showRegisterButton\" }] : []));\n showRememberMe = input(true, ...(ngDevMode ? [{ debugName: \"showRememberMe\" }] : []));\n // Additional form controls that can be passed from parent components\n additionalSigninControls = input({}, ...(ngDevMode ? [{ debugName: \"additionalSigninControls\" }] : []));\n additionalSignupControls = input({}, ...(ngDevMode ? [{ debugName: \"additionalSignupControls\" }] : []));\n // Additional field templates\n additionalSigninFields = input(null, ...(ngDevMode ? [{ debugName: \"additionalSigninFields\" }] : []));\n additionalSignupFields = input(null, ...(ngDevMode ? [{ debugName: \"additionalSignupFields\" }] : []));\n // Footer content template\n footerContent = input(null, ...(ngDevMode ? [{ debugName: \"footerContent\" }] : []));\n // Computed signal to check if footer content exists\n hasFooterContent = computed(() => this.footerContent() !== null, ...(ngDevMode ? [{ debugName: \"hasFooterContent\" }] : []));\n fb = inject(FormBuilder);\n authStore = inject(AuthStore);\n loginUseCase = inject(LoginUseCase);\n registerUseCase = inject(RegisterUseCase);\n loggingService = inject(LoggingService);\n // Angular 20+ signals\n isLoginMode = signal(true, ...(ngDevMode ? [{ debugName: \"isLoginMode\" }] : []));\n isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n errorMessage = signal(null, ...(ngDevMode ? [{ debugName: \"errorMessage\" }] : []));\n signinForm;\n signupForm;\n constructor() {\n this.signinForm = this.fb.group({\n email: ['', [Validators.required, Validators.email]],\n password: ['', Validators.required],\n rememberMe: [false], // Default to false (unchecked)\n });\n this.signupForm = this.fb.group({\n displayName: ['', Validators.required],\n email: ['', [Validators.required, Validators.email]],\n password: ['', [Validators.required, Validators.minLength(6)]],\n });\n }\n ngOnInit() {\n // Handle rememberMe control based on showRememberMe input\n if (!this.showRememberMe()) {\n // Remove rememberMe control if not needed\n this.signinForm.removeControl('rememberMe');\n }\n // Add additional controls to signin form\n Object.entries(this.additionalSigninControls()).forEach(([key, control]) => {\n this.signinForm.addControl(key, control);\n });\n // Add additional controls to signup form\n Object.entries(this.additionalSignupControls()).forEach(([key, control]) => {\n this.signupForm.addControl(key, control);\n });\n }\n switchMode() {\n this.isLoginMode.set(!this.isLoginMode());\n this.errorMessage.set(null);\n }\n signIn() {\n if (this.signinForm.valid) {\n this.isLoading.set(true);\n this.errorMessage.set(null);\n // Prepare login request with rememberMe handling\n const loginRequest = {\n ...this.signinForm.value,\n // If showRememberMe is false, default rememberMe to false\n rememberMe: this.showRememberMe() ? (this.signinForm.value.rememberMe ?? false) : false,\n };\n this.loginUseCase.execute(loginRequest).subscribe({\n next: () => {\n this.isLoading.set(false);\n },\n error: error => {\n this.isLoading.set(false);\n this.errorMessage.set('Error al iniciar sesión. Verifique sus credenciales.');\n this.loggingService.error('Login failed', { error });\n },\n });\n }\n }\n registerUser() {\n if (this.signupForm.valid) {\n this.isLoading.set(true);\n this.errorMessage.set(null);\n this.registerUseCase.execute(this.signupForm.value).subscribe({\n next: () => {\n this.isLoading.set(false);\n this.signupForm.reset();\n this.isLoginMode.set(true);\n },\n error: error => {\n this.isLoading.set(false);\n this.errorMessage.set('Error al registrar usuario. Intente nuevamente.');\n this.loggingService.error('Register error', { error });\n },\n });\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.2\", type: LoginComponent, isStandalone: true, selector: \"acp-login\", inputs: { title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: false, transformFunction: null }, showRegisterButton: { classPropertyName: \"showRegisterButton\", publicName: \"showRegisterButton\", isSignal: true, isRequired: false, transformFunction: null }, showRememberMe: { classPropertyName: \"showRememberMe\", publicName: \"showRememberMe\", isSignal: true, isRequired: false, transformFunction: null }, additionalSigninControls: { classPropertyName: \"additionalSigninControls\", publicName: \"additionalSigninControls\", isSignal: true, isRequired: false, transformFunction: null }, additionalSignupControls: { classPropertyName: \"additionalSignupControls\", publicName: \"additionalSignupControls\", isSignal: true, isRequired: false, transformFunction: null }, additionalSigninFields: { classPropertyName: \"additionalSigninFields\", publicName: \"additionalSigninFields\", isSignal: true, isRequired: false, transformFunction: null }, additionalSignupFields: { classPropertyName: \"additionalSignupFields\", publicName: \"additionalSignupFields\", isSignal: true, isRequired: false, transformFunction: null }, footerContent: { classPropertyName: \"footerContent\", publicName: \"footerContent\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: \"<mat-card class=\\\"mat-elevation-z8 p-4 rounded\\\">\\n <mat-card-header>\\n <mat-card-title class=\\\"text-center\\\">{{ title() }}</mat-card-title>\\n </mat-card-header>\\n <mat-card-content>\\n @if (isLoginMode()) {\\n <form [formGroup]=\\\"signinForm\\\" (ngSubmit)=\\\"signIn()\\\" class=\\\"d-flex flex-column gap-3\\\">\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Usuario</mat-label>\\n <input matInput type=\\\"text\\\" placeholder=\\\"Ingrese su usuario\\\" formControlName=\\\"email\\\" />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Contrase\\u00F1a</mat-label>\\n <input\\n matInput\\n type=\\\"password\\\"\\n placeholder=\\\"Ingrese su contrase\\u00F1a\\\"\\n formControlName=\\\"password\\\"\\n autocomplete=\\\"current-password\\\"\\n />\\n </mat-form-field>\\n\\n <!-- Remember Me checkbox - conditional -->\\n @if (showRememberMe()) {\\n <div class=\\\"d-flex align-items-center mt-2\\\">\\n <mat-checkbox formControlName=\\\"rememberMe\\\"> Recordarme </mat-checkbox>\\n </div>\\n }\\n\\n <!-- Additional signin fields -->\\n <ng-container *ngTemplateOutlet=\\\"additionalSigninFields()\\\"></ng-container>\\n\\n <div class=\\\"d-flex justify-content-center mt-3\\\">\\n <button\\n mat-raised-button\\n color=\\\"primary\\\"\\n [disabled]=\\\"!signinForm.valid || isLoading()\\\"\\n type=\\\"submit\\\"\\n class=\\\"w-100\\\"\\n >\\n @if (isLoading()) {\\n Ingresando...\\n } @else {\\n <ng-container>Ingresar <mat-icon>login</mat-icon></ng-container>\\n }\\n </button>\\n </div>\\n\\n <div class=\\\"text-center mt-2\\\">\\n @if (showRegisterButton()) {\\n <button mat-button type=\\\"button\\\" (click)=\\\"switchMode()\\\">\\n \\u00BFNo tienes cuenta? Reg\\u00EDstrate\\n </button>\\n }\\n </div>\\n </form>\\n } @else {\\n <form [formGroup]=\\\"signupForm\\\" (ngSubmit)=\\\"registerUser()\\\" class=\\\"d-flex flex-column gap-3\\\">\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Nombre</mat-label>\\n <input\\n matInput\\n type=\\\"text\\\"\\n placeholder=\\\"Ingrese su nombre\\\"\\n formControlName=\\\"displayName\\\"\\n />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Email</mat-label>\\n <input matInput type=\\\"email\\\" placeholder=\\\"Ingrese su email\\\" formControlName=\\\"email\\\" />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Contrase\\u00F1a</mat-label>\\n <input\\n matInput\\n type=\\\"password\\\"\\n placeholder=\\\"Ingrese su contrase\\u00F1a\\\"\\n formControlName=\\\"password\\\"\\n autocomplete=\\\"new-password\\\"\\n />\\n </mat-form-field>\\n\\n <!-- Additional signup fields -->\\n <ng-container *ngTemplateOutlet=\\\"additionalSignupFields()\\\"></ng-container>\\n\\n <div class=\\\"d-flex justify-content-center mt-3\\\">\\n <button\\n mat-raised-button\\n color=\\\"primary\\\"\\n [disabled]=\\\"!signupForm.valid || isLoading()\\\"\\n type=\\\"submit\\\"\\n class=\\\"w-100\\\"\\n >\\n @if (isLoading()) {\\n Registrando...\\n } @else {\\n <ng-container>Registrarse <mat-icon>person_add</mat-icon></ng-container>\\n }\\n </button>\\n </div>\\n\\n <div class=\\\"text-center mt-2\\\">\\n <button mat-button type=\\\"button\\\" (click)=\\\"switchMode()\\\">\\n \\u00BFYa tienes cuenta? Inicia sesi\\u00F3n\\n </button>\\n </div>\\n </form>\\n }\\n @if (errorMessage()) {\\n <div class=\\\"alert alert-danger mt-3\\\" role=\\\"alert\\\">\\n {{ errorMessage() }}\\n </div>\\n }\\n </mat-card-content>\\n @if (hasFooterContent()) {\\n <mat-card-footer>\\n <ng-container *ngTemplateOutlet=\\\"footerContent()\\\"></ng-container>\\n </mat-card-footer>\\n }\\n</mat-card>\\n\", styles: [\":host{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100%;padding:16px;box-sizing:border-box}:host mat-card{width:100%;max-width:400px;border-radius:12px;box-shadow:0 8px 32px #0000001a}:host mat-card-header{text-align:center;margin-bottom:20px}:host mat-card-title{font-size:24px;font-weight:600;color:var(--mat-sys-primary, #6750a4)}:host mat-form-field{width:100%}:host mat-button{border-radius:8px}:host .w-100{width:100%}:host .d-flex{display:flex}:host .flex-column{flex-direction:column}:host .gap-3{gap:12px}:host .justify-content-center{justify-content:center}:host .align-items-center{align-items:center}:host .mt-3{margin-top:12px}:host .mt-2{margin-top:8px}:host .text-center{text-align:center}:host .p-4{padding:16px}:host .rounded{border-radius:12px}:host .m-t-10{margin-top:10px}:host .alert-danger{background-color:var(--mat-sys-error-container, #ffdad6);border-color:var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-on-error-container, #410002);padding:12px;border-radius:4px;border:1px solid transparent}:host .row{display:flex;flex-wrap:wrap;margin:0 -15px}:host .col-xs-12,:host .col-sm-12,:host .col-md-12{flex:0 0 100%;max-width:100%;padding:0 15px}:host .social{display:flex;justify-content:center}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i2.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i2.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"directive\", type: i2.FormControlName, selector: \"[formControlName]\", inputs: [\"formControlName\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"] }, { kind: \"component\", type: MatCard, selector: \"mat-card\", inputs: [\"appearance\"], exportAs: [\"matCard\"] }, { kind: \"component\", type: MatCardHeader, selector: \"mat-card-header\" }, { kind: \"directive\", type: MatLabel, selector: \"mat-label\" }, { kind: \"directive\", type: MatCardTitle, selector: \"mat-card-title, [mat-card-title], [matCardTitle]\" }, { kind: \"directive\", type: MatCardContent, selector: \"mat-card-content\" }, { kind: \"component\", type: MatFormField, selector: \"mat-form-field\", inputs: [\"hideRequiredMarker\", \"color\", \"floatLabel\", \"appearance\", \"subscriptSizing\", \"hintLabel\"], exportAs: [\"matFormField\"] }, { kind: \"directive\", type: MatInput, selector: \"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]\", inputs: [\"disabled\", \"id\", \"placeholder\", \"name\", \"required\", \"type\", \"errorStateMatcher\", \"aria-describedby\", \"value\", \"readonly\", \"disabledInteractive\"], exportAs: [\"matInput\"] }, { kind: \"component\", type: MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }, { kind: \"component\", type: MatButton, selector: \" button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] \", inputs: [\"matButton\"], exportAs: [\"matButton\", \"matAnchor\"] }, { kind: \"directive\", type: MatCardFooter, selector: \"mat-card-footer\" }, { kind: \"component\", type: MatCheckbox, selector: \"mat-checkbox\", inputs: [\"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"aria-expanded\", \"aria-controls\", \"aria-owns\", \"id\", \"required\", \"labelPosition\", \"name\", \"value\", \"disableRipple\", \"tabIndex\", \"color\", \"disabledInteractive\", \"checked\", \"disabled\", \"indeterminate\"], outputs: [\"change\", \"indeterminateChange\"], exportAs: [\"matCheckbox\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.2\", ngImport: i0, type: LoginComponent, decorators: [{\n type: Component,\n args: [{ selector: 'acp-login', imports: [\n CommonModule,\n ReactiveFormsModule,\n MatCard,\n MatCardHeader,\n MatLabel,\n MatCardTitle,\n MatCardContent,\n MatFormField,\n MatInput,\n MatIcon,\n MatButton,\n MatCardFooter,\n MatAnchor,\n MatCheckbox,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"<mat-card class=\\\"mat-elevation-z8 p-4 rounded\\\">\\n <mat-card-header>\\n <mat-card-title class=\\\"text-center\\\">{{ title() }}</mat-card-title>\\n </mat-card-header>\\n <mat-card-content>\\n @if (isLoginMode()) {\\n <form [formGroup]=\\\"signinForm\\\" (ngSubmit)=\\\"signIn()\\\" class=\\\"d-flex flex-column gap-3\\\">\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Usuario</mat-label>\\n <input matInput type=\\\"text\\\" placeholder=\\\"Ingrese su usuario\\\" formControlName=\\\"email\\\" />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Contrase\\u00F1a</mat-label>\\n <input\\n matInput\\n type=\\\"password\\\"\\n placeholder=\\\"Ingrese su contrase\\u00F1a\\\"\\n formControlName=\\\"password\\\"\\n autocomplete=\\\"current-password\\\"\\n />\\n </mat-form-field>\\n\\n <!-- Remember Me checkbox - conditional -->\\n @if (showRememberMe()) {\\n <div class=\\\"d-flex align-items-center mt-2\\\">\\n <mat-checkbox formControlName=\\\"rememberMe\\\"> Recordarme </mat-checkbox>\\n </div>\\n }\\n\\n <!-- Additional signin fields -->\\n <ng-container *ngTemplateOutlet=\\\"additionalSigninFields()\\\"></ng-container>\\n\\n <div class=\\\"d-flex justify-content-center mt-3\\\">\\n <button\\n mat-raised-button\\n color=\\\"primary\\\"\\n [disabled]=\\\"!signinForm.valid || isLoading()\\\"\\n type=\\\"submit\\\"\\n class=\\\"w-100\\\"\\n >\\n @if (isLoading()) {\\n Ingresando...\\n } @else {\\n <ng-container>Ingresar <mat-icon>login</mat-icon></ng-container>\\n }\\n </button>\\n </div>\\n\\n <div class=\\\"text-center mt-2\\\">\\n @if (showRegisterButton()) {\\n <button mat-button type=\\\"button\\\" (click)=\\\"switchMode()\\\">\\n \\u00BFNo tienes cuenta? Reg\\u00EDstrate\\n </button>\\n }\\n </div>\\n </form>\\n } @else {\\n <form [formGroup]=\\\"signupForm\\\" (ngSubmit)=\\\"registerUser()\\\" class=\\\"d-flex flex-column gap-3\\\">\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Nombre</mat-label>\\n <input\\n matInput\\n type=\\\"text\\\"\\n placeholder=\\\"Ingrese su nombre\\\"\\n formControlName=\\\"displayName\\\"\\n />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Email</mat-label>\\n <input matInput type=\\\"email\\\" placeholder=\\\"Ingrese su email\\\" formControlName=\\\"email\\\" />\\n </mat-form-field>\\n\\n <mat-form-field class=\\\"w-100\\\">\\n <mat-label>Contrase\\u00F1a</mat-label>\\n <input\\n matInput\\n type=\\\"password\\\"\\n placeholder=\\\"Ingrese su contrase\\u00F1a\\\"\\n formControlName=\\\"password\\\"\\n autocomplete=\\\"new-password\\\"\\n />\\n </mat-form-field>\\n\\n <!-- Additional signup fields -->\\n <ng-container *ngTemplateOutlet=\\\"additionalSignupFields()\\\"></ng-container>\\n\\n <div class=\\\"d-flex justify-content-center mt-3\\\">\\n <button\\n mat-raised-button\\n color=\\\"primary\\\"\\n [disabled]=\\\"!signupForm.valid || isLoading()\\\"\\n type=\\\"submit\\\"\\n class=\\\"w-100\\\"\\n >\\n @if (isLoading()) {\\n Registrando...\\n } @else {\\n <ng-container>Registrarse <mat-icon>person_add</mat-icon></ng-container>\\n }\\n </button>\\n </div>\\n\\n <div class=\\\"text-center mt-2\\\">\\n <button mat-button type=\\\"button\\\" (click)=\\\"switchMode()\\\">\\n \\u00BFYa tienes cuenta? Inicia sesi\\u00F3n\\n </button>\\n </div>\\n </form>\\n }\\n @if (errorMessage()) {\\n <div class=\\\"alert alert-danger mt-3\\\" role=\\\"alert\\\">\\n {{ errorMessage() }}\\n </div>\\n }\\n </mat-card-content>\\n @if (hasFooterContent()) {\\n <mat-card-footer>\\n <ng-container *ngTemplateOutlet=\\\"footerContent()\\\"></ng-container>\\n </mat-card-footer>\\n }\\n</mat-card>\\n\", styles: [\":host{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100%;padding:16px;box-sizing:border-box}:host mat-card{width:100%;max-width:400px;border-radius:12px;box-shadow:0 8px 32px #0000001a}:host mat-card-header{text-align:center;margin-bottom:20px}:host mat-card-title{font-size:24px;font-weight:600;color:var(--mat-sys-primary, #6750a4)}:host mat-form-field{width:100%}:host mat-button{border-radius:8px}:host .w-100{width:100%}:host .d-flex{display:flex}:host .flex-column{flex-direction:column}:host .gap-3{gap:12px}:host .justify-content-center{justify-content:center}:host .align-items-center{align-items:center}:host .mt-3{margin-top:12px}:host .mt-2{margin-top:8px}:host .text-center{text-align:center}:host .p-4{padding:16px}:host .rounded{border-radius:12px}:host .m-t-10{margin-top:10px}:host .alert-danger{background-color:var(--mat-sys-error-container, #ffdad6);border-color:var(--mat-sys-error, #ba1a1a);color:var(--mat-sys-on-error-container, #410002);padding:12px;border-radius:4px;border:1px solid transparent}:host .row{display:flex;flex-wrap:wrap;margin:0 -15px}:host .col-xs-12,:host .col-sm-12,:host .col-md-12{flex:0 0 100%;max-width:100%;padding:0 15px}:host .social{display:flex;justify-content:center}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctYXV0aC9zcmMvbGliL3VpL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWF1dGgvc3JjL2xpYi91aS9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyREFBMkQ7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUdSLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLFdBQVcsRUFDWCxVQUFVLEVBQ1YsbUJBQW1CLEdBRXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLE9BQU8sRUFDUCxjQUFjLEVBQ2QsYUFBYSxFQUNiLGFBQWEsRUFDYixZQUFZLEdBQ2IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBeUI5RCxNQUFNLE9BQU8sY0FBYztJQUN6QixLQUFLLEdBQUcsS0FBSyxDQUFTLE9BQU8saURBQUMsQ0FBQztJQUMvQixrQkFBa0IsR0FBRyxLQUFLLENBQVUsSUFBSSw4REFBQyxDQUFDO0lBQzFDLGNBQWMsR0FBRyxLQUFLLENBQVUsSUFBSSwwREFBQyxDQUFDO0lBRXRDLHFFQUFxRTtJQUNyRSx3QkFBd0IsR0FBRyxLQUFLLENBQWtDLEVBQUUsb0VBQUMsQ0FBQztJQUN0RSx3QkFBd0IsR0FBRyxLQUFLLENBQWtDLEVBQUUsb0VBQUMsQ0FBQztJQUV0RSw2QkFBNkI7SUFDN0Isc0JBQXNCLEdBQUcsS0FBSyxDQUE4QixJQUFJLGtFQUFDLENBQUM7SUFDbEUsc0JBQXNCLEdBQUcsS0FBSyxDQUE4QixJQUFJLGtFQUFDLENBQUM7SUFFbEUsMEJBQTBCO0lBQzFCLGFBQWEsR0FBRyxLQUFLLENBQThCLElBQUkseURBQUMsQ0FBQztJQUV6RCxvREFBb0Q7SUFDcEQsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLDREQUFDLENBQUM7SUFFaEQsRUFBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QixTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXpELHNCQUFzQjtJQUN0QixXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksdURBQUMsQ0FBQztJQUMzQixTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUsscURBQUMsQ0FBQztJQUMxQixZQUFZLEdBQUcsTUFBTSxDQUFnQixJQUFJLHdEQUFDLENBQUM7SUFFM0MsVUFBVSxDQUFZO0lBQ3RCLFVBQVUsQ0FBWTtJQUV0QjtRQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDOUIsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsK0JBQStCO1NBQ3JELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDOUIsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDdEMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTiwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzNCLDBDQUEwQztZQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ3pFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILHlDQUF5QztRQUN6QyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFNUIsaURBQWlEO1lBQ2pELE1BQU0sWUFBWSxHQUFHO2dCQUNuQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSztnQkFDeEIsMERBQTBEO2dCQUMxRCxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzthQUN4RixDQUFDO1lBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNoRCxJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUNULElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixDQUFDO2dCQUNELEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDYixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztvQkFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDdkQsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDNUQsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO29CQUN6RSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3pELENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzt1R0FqSFUsY0FBYzsyRkFBZCxjQUFjLG0wQ0M1RDNCLHNuSUEySEEsZ3lDRG5GSSxZQUFZLHFNQUNaLG1CQUFtQiw2OEJBQ25CLE9BQU8sb0dBQ1AsYUFBYSw0REFDYixRQUFRLHNEQUNSLFlBQVksNkZBQ1osY0FBYyw2REFDZCxZQUFZLDRMQUNaLFFBQVEsd1ZBQ1IsT0FBTywySUFDUCxTQUFTLHlVQUNULGFBQWEsNERBRWIsV0FBVzs7MkZBT0YsY0FBYztrQkF2QjFCLFNBQVM7K0JBQ0UsV0FBVyxXQUNaO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsUUFBUTt3QkFDUixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixRQUFRO3dCQUNSLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxhQUFhO3dCQUNiLFNBQVM7d0JBQ1QsV0FBVztxQkFDWixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvcHJlc2VudGF0aW9uL2NvbXBvbmVudHMvbG9naW4vbG9naW4uY29tcG9uZW50LnRzXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRm9ybUdyb3VwLFxuICBGb3JtQnVpbGRlcixcbiAgVmFsaWRhdG9ycyxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgQWJzdHJhY3RDb250cm9sLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBNYXRDYXJkLFxuICBNYXRDYXJkQ29udGVudCxcbiAgTWF0Q2FyZEZvb3RlcixcbiAgTWF0Q2FyZEhlYWRlcixcbiAgTWF0Q2FyZFRpdGxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QW5jaG9yLCBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3ggfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBBdXRoU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXV0aC5zdG9yZSc7XG5pbXBvcnQgeyBMb2dpblVzZUNhc2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi91c2UtY2FzZXMvbG9naW4udXNlLWNhc2UnO1xuaW1wb3J0IHsgUmVnaXN0ZXJVc2VDYXNlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24vdXNlLWNhc2VzL3JlZ2lzdGVyLnVzZS1jYXNlJztcbmltcG9ydCB7IExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnQGFjb250cGx1cy9uZy1pbmZyYXN0cnVjdHVyZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjcC1sb2dpbicsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRDYXJkLFxuICAgIE1hdENhcmRIZWFkZXIsXG4gICAgTWF0TGFiZWwsXG4gICAgTWF0Q2FyZFRpdGxlLFxuICAgIE1hdENhcmRDb250ZW50LFxuICAgIE1hdEZvcm1GaWVsZCxcbiAgICBNYXRJbnB1dCxcbiAgICBNYXRJY29uLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRDYXJkRm9vdGVyLFxuICAgIE1hdEFuY2hvcixcbiAgICBNYXRDaGVja2JveCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgdGl0bGUgPSBpbnB1dDxzdHJpbmc+KCdMb2dpbicpO1xuICBzaG93UmVnaXN0ZXJCdXR0b24gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgc2hvd1JlbWVtYmVyTWUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAvLyBBZGRpdGlvbmFsIGZvcm0gY29udHJvbHMgdGhhdCBjYW4gYmUgcGFzc2VkIGZyb20gcGFyZW50IGNvbXBvbmVudHNcbiAgYWRkaXRpb25hbFNpZ25pbkNvbnRyb2xzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPj4oe30pO1xuICBhZGRpdGlvbmFsU2lnbnVwQ29udHJvbHMgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCBBYnN0cmFjdENvbnRyb2w+Pih7fSk7XG5cbiAgLy8gQWRkaXRpb25hbCBmaWVsZCB0ZW1wbGF0ZXNcbiAgYWRkaXRpb25hbFNpZ25pbkZpZWxkcyA9IGlucHV0PFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbD4obnVsbCk7XG4gIGFkZGl0aW9uYWxTaWdudXBGaWVsZHMgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuXG4gIC8vIEZvb3RlciBjb250ZW50IHRlbXBsYXRlXG4gIGZvb3RlckNvbnRlbnQgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuXG4gIC8vIENvbXB1dGVkIHNpZ25hbCB0byBjaGVjayBpZiBmb290ZXIgY29udGVudCBleGlzdHNcbiAgaGFzRm9vdGVyQ29udGVudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZm9vdGVyQ29udGVudCgpICE9PSBudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoU3RvcmUgPSBpbmplY3QoQXV0aFN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dpblVzZUNhc2UgPSBpbmplY3QoTG9naW5Vc2VDYXNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RlclVzZUNhc2UgPSBpbmplY3QoUmVnaXN0ZXJVc2VDYXNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnaW5nU2VydmljZSA9IGluamVjdChMb2dnaW5nU2VydmljZSk7XG5cbiAgLy8gQW5ndWxhciAyMCsgc2lnbmFsc1xuICBpc0xvZ2luTW9kZSA9IHNpZ25hbCh0cnVlKTtcbiAgaXNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgZXJyb3JNZXNzYWdlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHNpZ25pbkZvcm06IEZvcm1Hcm91cDtcbiAgc2lnbnVwRm9ybTogRm9ybUdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2lnbmluRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXSxcbiAgICAgIHBhc3N3b3JkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcmVtZW1iZXJNZTogW2ZhbHNlXSwgLy8gRGVmYXVsdCB0byBmYWxzZSAodW5jaGVja2VkKVxuICAgIH0pO1xuXG4gICAgdGhpcy5zaWdudXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkaXNwbGF5TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGVtYWlsOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXV0sXG4gICAgICBwYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildXSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSByZW1lbWJlck1lIGNvbnRyb2wgYmFzZWQgb24gc2hvd1JlbWVtYmVyTWUgaW5wdXRcbiAgICBpZiAoIXRoaXMuc2hvd1JlbWVtYmVyTWUoKSkge1xuICAgICAgLy8gUmVtb3ZlIHJlbWVtYmVyTWUgY29udHJvbCBpZiBub3QgbmVlZGVkXG4gICAgICB0aGlzLnNpZ25pbkZvcm0ucmVtb3ZlQ29udHJvbCgncmVtZW1iZXJNZScpO1xuICAgIH1cblxuICAgIC8vIEFkZCBhZGRpdGlvbmFsIGNvbnRyb2xzIHRvIHNpZ25pbiBmb3JtXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5hZGRpdGlvbmFsU2lnbmluQ29udHJvbHMoKSkuZm9yRWFjaCgoW2tleSwgY29udHJvbF0pID0+IHtcbiAgICAgIHRoaXMuc2lnbmluRm9ybS5hZGRDb250cm9sKGtleSwgY29udHJvbCk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYWRkaXRpb25hbCBjb250cm9scyB0byBzaWdudXAgZm9ybVxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuYWRkaXRpb25hbFNpZ251cENvbnRyb2xzKCkpLmZvckVhY2goKFtrZXksIGNvbnRyb2xdKSA9PiB7XG4gICAgICB0aGlzLnNpZ251cEZvcm0uYWRkQ29udHJvbChrZXksIGNvbnRyb2wpO1xuICAgIH0pO1xuICB9XG5cbiAgc3dpdGNoTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9naW5Nb2RlLnNldCghdGhpcy5pc0xvZ2luTW9kZSgpKTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZS5zZXQobnVsbCk7XG4gIH1cblxuICBzaWduSW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2lnbmluRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2Uuc2V0KG51bGwpO1xuXG4gICAgICAvLyBQcmVwYXJlIGxvZ2luIHJlcXVlc3Qgd2l0aCByZW1lbWJlck1lIGhhbmRsaW5nXG4gICAgICBjb25zdCBsb2dpblJlcXVlc3QgPSB7XG4gICAgICAgIC4uLnRoaXMuc2lnbmluRm9ybS52YWx1ZSxcbiAgICAgICAgLy8gSWYgc2hvd1JlbWVtYmVyTWUgaXMgZmFsc2UsIGRlZmF1bHQgcmVtZW1iZXJNZSB0byBmYWxzZVxuICAgICAgICByZW1lbWJlck1lOiB0aGlzLnNob3dSZW1lbWJlck1lKCkgPyAodGhpcy5zaWduaW5Gb3JtLnZhbHVlLnJlbWVtYmVyTWUgPz8gZmFsc2UpIDogZmFsc2UsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmxvZ2luVXNlQ2FzZS5leGVjdXRlKGxvZ2luUmVxdWVzdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZS5zZXQoJ0Vycm9yIGFsIGluaWNpYXIgc2VzacOzbi4gVmVyaWZpcXVlIHN1cyBjcmVkZW5jaWFsZXMuJyk7XG4gICAgICAgICAgdGhpcy5sb2dnaW5nU2VydmljZS5lcnJvcignTG9naW4gZmFpbGVkJywgeyBlcnJvciB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyVXNlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaWdudXBGb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZS5zZXQobnVsbCk7XG5cbiAgICAgIHRoaXMucmVnaXN0ZXJVc2VDYXNlLmV4ZWN1dGUodGhpcy5zaWdudXBGb3JtLnZhbHVlKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnNpZ251cEZvcm0ucmVzZXQoKTtcbiAgICAgICAgICB0aGlzLmlzTG9naW5Nb2RlLnNldCh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlLnNldCgnRXJyb3IgYWwgcmVnaXN0cmFyIHVzdWFyaW8uIEludGVudGUgbnVldmFtZW50ZS4nKTtcbiAgICAgICAgICB0aGlzLmxvZ2dpbmdTZXJ2aWNlLmVycm9yKCdSZWdpc3RlciBlcnJvcicsIHsgZXJyb3IgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxtYXQtY2FyZCBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejggcC00IHJvdW5kZWRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICA8bWF0LWNhcmQtdGl0bGUgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPnt7IHRpdGxlKCkgfX08L21hdC1jYXJkLXRpdGxlPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgQGlmIChpc0xvZ2luTW9kZSgpKSB7XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNpZ25pbkZvcm1cIiAobmdTdWJtaXQpPVwic2lnbkluKClcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+VXN1YXJpbzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSBzdSB1c3VhcmlvXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiAvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5Db250cmFzZcOxYTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkluZ3Jlc2Ugc3UgY29udHJhc2XDsWFcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8IS0tIFJlbWVtYmVyIE1lIGNoZWNrYm94IC0gY29uZGl0aW9uYWwgLS0+XG4gICAgICAgIEBpZiAoc2hvd1JlbWVtYmVyTWUoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwicmVtZW1iZXJNZVwiPiBSZWNvcmRhcm1lIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBBZGRpdGlvbmFsIHNpZ25pbiBmaWVsZHMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRpdGlvbmFsU2lnbmluRmllbGRzKClcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtM1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzaWduaW5Gb3JtLnZhbGlkIHx8IGlzTG9hZGluZygpXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChpc0xvYWRpbmcoKSkge1xuICAgICAgICAgICAgICBJbmdyZXNhbmRvLi4uXG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5JbmdyZXNhciA8bWF0LWljb24+bG9naW48L21hdC1pY29uPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXQtMlwiPlxuICAgICAgICAgIEBpZiAoc2hvd1JlZ2lzdGVyQnV0dG9uKCkpIHtcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInN3aXRjaE1vZGUoKVwiPlxuICAgICAgICAgICAgICDCv05vIHRpZW5lcyBjdWVudGE/IFJlZ8Otc3RyYXRlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzaWdudXBGb3JtXCIgKG5nU3VibWl0KT1cInJlZ2lzdGVyVXNlcigpXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTNcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPk5vbWJyZTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSBzdSBub21icmVcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPkVtYWlsPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSBzdSBlbWFpbFwiIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+Q29udHJhc2XDsWE8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHN1IGNvbnRyYXNlw7FhXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8IS0tIEFkZGl0aW9uYWwgc2lnbnVwIGZpZWxkcyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkZGl0aW9uYWxTaWdudXBGaWVsZHMoKVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNpZ251cEZvcm0udmFsaWQgfHwgaXNMb2FkaW5nKClcIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBjbGFzcz1cInctMTAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIFJlZ2lzdHJhbmRvLi4uXG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5SZWdpc3RyYXJzZSA8bWF0LWljb24+cGVyc29uX2FkZDwvbWF0LWljb24+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0yXCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic3dpdGNoTW9kZSgpXCI+XG4gICAgICAgICAgICDCv1lhIHRpZW5lcyBjdWVudGE/IEluaWNpYSBzZXNpw7NuXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIH1cbiAgICBAaWYgKGVycm9yTWVzc2FnZSgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIG10LTNcIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlKCkgfX1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuICBAaWYgKGhhc0Zvb3RlckNvbnRlbnQoKSkge1xuICAgIDxtYXQtY2FyZC1mb290ZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyQ29udGVudCgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XG4gIH1cbjwvbWF0LWNhcmQ+XG4iXX0=","// src/lib/presentation/components/index.ts\nexport { LoginComponent } from './login.component';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvdWkvbG9naW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy9saWIvcHJlc2VudGF0aW9uL2NvbXBvbmVudHMvaW5kZXgudHNcbmV4cG9ydCB7IExvZ2luQ29tcG9uZW50IH0gZnJvbSAnLi9sb2dpbi5jb21wb25lbnQnO1xuIl19","// src/lib/presentation/index.ts\nexport * from './stores';\nexport * from './login';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9saWIvdWkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDO0FBQ2hDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2xpYi9wcmVzZW50YXRpb24vaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9naW4nO1xuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvbnRwbHVzLW5nLWF1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1hdXRoL3NyYy9hY29udHBsdXMtbmctYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["catchError"],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acontplus/ng-auth",
3
- "version": "1.1.5",
3
+ "version": "1.1.6",
4
4
  "description": "Acontplus Angular Authentication Module",
5
5
  "dependencies": {
6
- "@acontplus/ng-infrastructure": "^1.0.6",
6
+ "@acontplus/ng-infrastructure": "^1.0.7",
7
7
  "@acontplus/ng-config": "^1.0.5",
8
8
  "jwt-decode": "^4.0.0",
9
9
  "rxjs": "^7.8.1",