barsa-auth 2.3.167 → 3.0.2

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.
@@ -645,11 +645,11 @@ class UserPassComponent extends ViewBase {
645
645
  this.canLogin() && !this.loading() && this.controller.login(this.form.value);
646
646
  }
647
647
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: UserPassComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
648
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: UserPassComponent, isStandalone: false, selector: "ba-user-pass", inputs: { errorTemplate: "errorTemplate", otpProvider: "otpProvider" }, outputs: { loggedIn: "loggedIn" }, usesInheritance: true, ngImport: i0, template: "<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">\u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-flex tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0639\u0628\u0627\u0631\u062A \u0627\u0645\u0646\u06CC\u062A\u06CC </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\" />\r\n <button\r\n class=\"auth-captcha-refresh tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"auth-error tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [":host{color:var(--sapTextColor, #32363a);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSize, .875rem);--button-loading: var(--sapButton_Emphasized_Background, #0a6ed1);--button-loading-active: var(--sapButton_Emphasized_Active_Background, #0854a0);--button-loading-text-color: var(--sapButton_Emphasized_TextColor, #fff);--button-loading-border-top-color: var(--sapButton_Emphasized_TextColor, #fff);--button-loading-transparent-active: var(--sapButton_Hover_Background, #ebf5fe);--button-loading-transparent-border-top-color: var(--sapButton_Emphasized_Background, #0a6ed1)}.auth-label{color:var(--sapContent_LabelColor, #556b82);font-family:var(--sapFontSemiboldFamily, var(--sapFontFamily, sans-serif));font-size:var(--sapFontSize, .875rem);font-weight:600}.auth-field{box-sizing:border-box;min-height:var(--sapElement_Height, 2.75rem);padding-block:.5rem;padding-inline:.75rem;border:var(--sapField_BorderWidth, .0625rem) var(--sapField_BorderStyle, solid) var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .5rem);color:var(--sapField_TextColor, #32363a);background:var(--sapField_Background, #fff);caret-color:var(--sapField_TextColor, #32363a);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSize, .875rem);line-height:normal;transition:border-color .12s ease,background-color .12s ease,outline-color .12s ease}.auth-field::placeholder{color:var(--sapField_PlaceholderTextColor, #74777a)}.auth-field:hover:not(:disabled){border-color:var(--sapField_Hover_BorderColor, #0854a0);background:var(--sapField_Hover_Background, #fff)}.auth-field:focus{border-color:var(--sapField_Focus_BorderColor, #0854a0);outline:var(--sapContent_FocusWidth, .125rem) var(--sapContent_FocusStyle, solid) var(--sapContent_FocusColor, #0854a0);outline-offset:.125rem;background:var(--sapField_Focus_Background, #fff);color:var(--sapField_Focus_TextColor, var(--sapField_TextColor, #32363a))}.auth-field:disabled{border-color:var(--sapField_ReadOnly_BorderColor, var(--sapField_BorderColor, #89919a));background:var(--sapField_ReadOnly_Background, #f2f2f2);color:var(--sapContent_DisabledTextColor, #6a6d70);cursor:not-allowed;opacity:var(--sapContent_DisabledOpacity, .5)}.auth-error{border:.0625rem solid var(--sapErrorBorderColor, #bb0000);border-radius:var(--sapElement_BorderCornerRadius, .5rem);color:var(--sapNegativeTextColor, var(--sapNegativeColor, #bb0000));background:var(--sapErrorBackground, #ffebeb);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSmallSize, .75rem)}.auth-captcha-refresh{padding:0;border:var(--sapButton_BorderWidth, .0625rem) var(--sapButton_BorderStyle, solid) var(--sapButton_BorderColor, #0854a0);border-radius:var(--sapButton_BorderCornerRadius, .25rem);color:var(--sapButton_TextColor, #0854a0);background:var(--sapButton_Background, #fff);cursor:pointer}.auth-captcha-refresh:hover:not(:disabled){border-color:var(--sapButton_Hover_BorderColor, #0854a0);color:var(--sapButton_Hover_TextColor, #0854a0);background:var(--sapButton_Hover_Background, #ebf5fe)}.auth-captcha-refresh:active:not(:disabled){border-color:var(--sapButton_Active_BorderColor, #0854a0);color:var(--sapButton_Active_TextColor, #fff);background:var(--sapButton_Active_Background, #0854a0)}.auth-captcha-refresh:focus-visible{outline:var(--sapContent_FocusWidth, .125rem) var(--sapContent_FocusStyle, solid) var(--sapContent_FocusColor, #0854a0);outline-offset:.125rem}.auth-captcha-refresh:disabled{cursor:not-allowed;opacity:var(--sapContent_DisabledOpacity, .5)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],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: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
648
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: UserPassComponent, isStandalone: false, selector: "ba-user-pass", inputs: { errorTemplate: "errorTemplate", otpProvider: "otpProvider" }, outputs: { loggedIn: "loggedIn" }, usesInheritance: true, ngImport: i0, template: "<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\" (ngSubmit)=\"onSendCode()\">\r\n <button type=\"submit\" hidden tabindex=\"-1\" aria-hidden=\"true\"></button>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">\u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-flex tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0639\u0628\u0627\u0631\u062A \u0627\u0645\u0646\u06CC\u062A\u06CC </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\" />\r\n <button\r\n class=\"auth-captcha-refresh tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"auth-error tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [":host{color:var(--sapTextColor, #32363a);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSize, .875rem);--button-loading: var(--sapButton_Emphasized_Background, #0a6ed1);--button-loading-active: var(--sapButton_Emphasized_Active_Background, #0854a0);--button-loading-text-color: var(--sapButton_Emphasized_TextColor, #fff);--button-loading-border-top-color: var(--sapButton_Emphasized_TextColor, #fff);--button-loading-transparent-active: var(--sapButton_Hover_Background, #ebf5fe);--button-loading-transparent-border-top-color: var(--sapButton_Emphasized_Background, #0a6ed1)}.auth-label{color:var(--sapContent_LabelColor, #556b82);font-family:var(--sapFontSemiboldFamily, var(--sapFontFamily, sans-serif));font-size:var(--sapFontSize, .875rem);font-weight:600}.auth-field{box-sizing:border-box;min-height:var(--sapElement_Height, 2.75rem);padding-block:.5rem;padding-inline:.75rem;border:var(--sapField_BorderWidth, .0625rem) var(--sapField_BorderStyle, solid) var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .5rem);color:var(--sapField_TextColor, #32363a);background:var(--sapField_Background, #fff);caret-color:var(--sapField_TextColor, #32363a);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSize, .875rem);line-height:normal;transition:border-color .12s ease,background-color .12s ease,outline-color .12s ease}.auth-field::placeholder{color:var(--sapField_PlaceholderTextColor, #74777a)}.auth-field:hover:not(:disabled){border-color:var(--sapField_Hover_BorderColor, #0854a0);background:var(--sapField_Hover_Background, #fff)}.auth-field:focus{border-color:var(--sapField_Focus_BorderColor, #0854a0);outline:var(--sapContent_FocusWidth, .125rem) var(--sapContent_FocusStyle, solid) var(--sapContent_FocusColor, #0854a0);outline-offset:.125rem;background:var(--sapField_Focus_Background, #fff);color:var(--sapField_Focus_TextColor, var(--sapField_TextColor, #32363a))}.auth-field:disabled{border-color:var(--sapField_ReadOnly_BorderColor, var(--sapField_BorderColor, #89919a));background:var(--sapField_ReadOnly_Background, #f2f2f2);color:var(--sapContent_DisabledTextColor, #6a6d70);cursor:not-allowed;opacity:var(--sapContent_DisabledOpacity, .5)}.auth-error{border:.0625rem solid var(--sapErrorBorderColor, #bb0000);border-radius:var(--sapElement_BorderCornerRadius, .5rem);color:var(--sapNegativeTextColor, var(--sapNegativeColor, #bb0000));background:var(--sapErrorBackground, #ffebeb);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSmallSize, .75rem)}.auth-captcha-refresh{padding:0;border:var(--sapButton_BorderWidth, .0625rem) var(--sapButton_BorderStyle, solid) var(--sapButton_BorderColor, #0854a0);border-radius:var(--sapButton_BorderCornerRadius, .25rem);color:var(--sapButton_TextColor, #0854a0);background:var(--sapButton_Background, #fff);cursor:pointer}.auth-captcha-refresh:hover:not(:disabled){border-color:var(--sapButton_Hover_BorderColor, #0854a0);color:var(--sapButton_Hover_TextColor, #0854a0);background:var(--sapButton_Hover_Background, #ebf5fe)}.auth-captcha-refresh:active:not(:disabled){border-color:var(--sapButton_Active_BorderColor, #0854a0);color:var(--sapButton_Active_TextColor, #fff);background:var(--sapButton_Active_Background, #0854a0)}.auth-captcha-refresh:focus-visible{outline:var(--sapContent_FocusWidth, .125rem) var(--sapContent_FocusStyle, solid) var(--sapContent_FocusColor, #0854a0);outline-offset:.125rem}.auth-captcha-refresh:disabled{cursor:not-allowed;opacity:var(--sapContent_DisabledOpacity, .5)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],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: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
649
649
  }
650
650
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: UserPassComponent, decorators: [{
651
651
  type: Component,
652
- args: [{ selector: 'ba-user-pass', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">\u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-flex tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0639\u0628\u0627\u0631\u062A \u0627\u0645\u0646\u06CC\u062A\u06CC </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\" />\r\n <button\r\n class=\"auth-captcha-refresh tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"auth-error tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [":host{color:var(--sapTextColor, #32363a);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSize, .875rem);--button-loading: var(--sapButton_Emphasized_Background, #0a6ed1);--button-loading-active: var(--sapButton_Emphasized_Active_Background, #0854a0);--button-loading-text-color: var(--sapButton_Emphasized_TextColor, #fff);--button-loading-border-top-color: var(--sapButton_Emphasized_TextColor, #fff);--button-loading-transparent-active: var(--sapButton_Hover_Background, #ebf5fe);--button-loading-transparent-border-top-color: var(--sapButton_Emphasized_Background, #0a6ed1)}.auth-label{color:var(--sapContent_LabelColor, #556b82);font-family:var(--sapFontSemiboldFamily, var(--sapFontFamily, sans-serif));font-size:var(--sapFontSize, .875rem);font-weight:600}.auth-field{box-sizing:border-box;min-height:var(--sapElement_Height, 2.75rem);padding-block:.5rem;padding-inline:.75rem;border:var(--sapField_BorderWidth, .0625rem) var(--sapField_BorderStyle, solid) var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .5rem);color:var(--sapField_TextColor, #32363a);background:var(--sapField_Background, #fff);caret-color:var(--sapField_TextColor, #32363a);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSize, .875rem);line-height:normal;transition:border-color .12s ease,background-color .12s ease,outline-color .12s ease}.auth-field::placeholder{color:var(--sapField_PlaceholderTextColor, #74777a)}.auth-field:hover:not(:disabled){border-color:var(--sapField_Hover_BorderColor, #0854a0);background:var(--sapField_Hover_Background, #fff)}.auth-field:focus{border-color:var(--sapField_Focus_BorderColor, #0854a0);outline:var(--sapContent_FocusWidth, .125rem) var(--sapContent_FocusStyle, solid) var(--sapContent_FocusColor, #0854a0);outline-offset:.125rem;background:var(--sapField_Focus_Background, #fff);color:var(--sapField_Focus_TextColor, var(--sapField_TextColor, #32363a))}.auth-field:disabled{border-color:var(--sapField_ReadOnly_BorderColor, var(--sapField_BorderColor, #89919a));background:var(--sapField_ReadOnly_Background, #f2f2f2);color:var(--sapContent_DisabledTextColor, #6a6d70);cursor:not-allowed;opacity:var(--sapContent_DisabledOpacity, .5)}.auth-error{border:.0625rem solid var(--sapErrorBorderColor, #bb0000);border-radius:var(--sapElement_BorderCornerRadius, .5rem);color:var(--sapNegativeTextColor, var(--sapNegativeColor, #bb0000));background:var(--sapErrorBackground, #ffebeb);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSmallSize, .75rem)}.auth-captcha-refresh{padding:0;border:var(--sapButton_BorderWidth, .0625rem) var(--sapButton_BorderStyle, solid) var(--sapButton_BorderColor, #0854a0);border-radius:var(--sapButton_BorderCornerRadius, .25rem);color:var(--sapButton_TextColor, #0854a0);background:var(--sapButton_Background, #fff);cursor:pointer}.auth-captcha-refresh:hover:not(:disabled){border-color:var(--sapButton_Hover_BorderColor, #0854a0);color:var(--sapButton_Hover_TextColor, #0854a0);background:var(--sapButton_Hover_Background, #ebf5fe)}.auth-captcha-refresh:active:not(:disabled){border-color:var(--sapButton_Active_BorderColor, #0854a0);color:var(--sapButton_Active_TextColor, #fff);background:var(--sapButton_Active_Background, #0854a0)}.auth-captcha-refresh:focus-visible{outline:var(--sapContent_FocusWidth, .125rem) var(--sapContent_FocusStyle, solid) var(--sapContent_FocusColor, #0854a0);outline-offset:.125rem}.auth-captcha-refresh:disabled{cursor:not-allowed;opacity:var(--sapContent_DisabledOpacity, .5)}\n"] }]
652
+ args: [{ selector: 'ba-user-pass', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\" (ngSubmit)=\"onSendCode()\">\r\n <button type=\"submit\" hidden tabindex=\"-1\" aria-hidden=\"true\"></button>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">\u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-flex tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0639\u0628\u0627\u0631\u062A \u0627\u0645\u0646\u06CC\u062A\u06CC </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\" />\r\n <button\r\n class=\"auth-captcha-refresh tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"auth-error tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [":host{color:var(--sapTextColor, #32363a);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSize, .875rem);--button-loading: var(--sapButton_Emphasized_Background, #0a6ed1);--button-loading-active: var(--sapButton_Emphasized_Active_Background, #0854a0);--button-loading-text-color: var(--sapButton_Emphasized_TextColor, #fff);--button-loading-border-top-color: var(--sapButton_Emphasized_TextColor, #fff);--button-loading-transparent-active: var(--sapButton_Hover_Background, #ebf5fe);--button-loading-transparent-border-top-color: var(--sapButton_Emphasized_Background, #0a6ed1)}.auth-label{color:var(--sapContent_LabelColor, #556b82);font-family:var(--sapFontSemiboldFamily, var(--sapFontFamily, sans-serif));font-size:var(--sapFontSize, .875rem);font-weight:600}.auth-field{box-sizing:border-box;min-height:var(--sapElement_Height, 2.75rem);padding-block:.5rem;padding-inline:.75rem;border:var(--sapField_BorderWidth, .0625rem) var(--sapField_BorderStyle, solid) var(--sapField_BorderColor, #89919a);border-radius:var(--sapField_BorderCornerRadius, .5rem);color:var(--sapField_TextColor, #32363a);background:var(--sapField_Background, #fff);caret-color:var(--sapField_TextColor, #32363a);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSize, .875rem);line-height:normal;transition:border-color .12s ease,background-color .12s ease,outline-color .12s ease}.auth-field::placeholder{color:var(--sapField_PlaceholderTextColor, #74777a)}.auth-field:hover:not(:disabled){border-color:var(--sapField_Hover_BorderColor, #0854a0);background:var(--sapField_Hover_Background, #fff)}.auth-field:focus{border-color:var(--sapField_Focus_BorderColor, #0854a0);outline:var(--sapContent_FocusWidth, .125rem) var(--sapContent_FocusStyle, solid) var(--sapContent_FocusColor, #0854a0);outline-offset:.125rem;background:var(--sapField_Focus_Background, #fff);color:var(--sapField_Focus_TextColor, var(--sapField_TextColor, #32363a))}.auth-field:disabled{border-color:var(--sapField_ReadOnly_BorderColor, var(--sapField_BorderColor, #89919a));background:var(--sapField_ReadOnly_Background, #f2f2f2);color:var(--sapContent_DisabledTextColor, #6a6d70);cursor:not-allowed;opacity:var(--sapContent_DisabledOpacity, .5)}.auth-error{border:.0625rem solid var(--sapErrorBorderColor, #bb0000);border-radius:var(--sapElement_BorderCornerRadius, .5rem);color:var(--sapNegativeTextColor, var(--sapNegativeColor, #bb0000));background:var(--sapErrorBackground, #ffebeb);font-family:var(--sapFontFamily, sans-serif);font-size:var(--sapFontSmallSize, .75rem)}.auth-captcha-refresh{padding:0;border:var(--sapButton_BorderWidth, .0625rem) var(--sapButton_BorderStyle, solid) var(--sapButton_BorderColor, #0854a0);border-radius:var(--sapButton_BorderCornerRadius, .25rem);color:var(--sapButton_TextColor, #0854a0);background:var(--sapButton_Background, #fff);cursor:pointer}.auth-captcha-refresh:hover:not(:disabled){border-color:var(--sapButton_Hover_BorderColor, #0854a0);color:var(--sapButton_Hover_TextColor, #0854a0);background:var(--sapButton_Hover_Background, #ebf5fe)}.auth-captcha-refresh:active:not(:disabled){border-color:var(--sapButton_Active_BorderColor, #0854a0);color:var(--sapButton_Active_TextColor, #fff);background:var(--sapButton_Active_Background, #0854a0)}.auth-captcha-refresh:focus-visible{outline:var(--sapContent_FocusWidth, .125rem) var(--sapContent_FocusStyle, solid) var(--sapContent_FocusColor, #0854a0);outline-offset:.125rem}.auth-captcha-refresh:disabled{cursor:not-allowed;opacity:var(--sapContent_DisabledOpacity, .5)}\n"] }]
653
653
  }], ctorParameters: () => [], propDecorators: { loggedIn: [{
654
654
  type: Output
655
655
  }], errorTemplate: [{
@@ -1 +1 @@
1
- {"version":3,"file":"barsa-auth.mjs","sources":["../../../projects/barsa-auth/src/lib/services/passkey-codec.ts","../../../projects/barsa-auth/src/lib/services/passkey.service.ts","../../../projects/barsa-auth/src/lib/controllers/login-mobile-controller.ts","../../../projects/barsa-auth/src/lib/controllers/login-userpass-controller.ts","../../../projects/barsa-auth/src/lib/controllers/login-verification-controller.ts","../../../projects/barsa-auth/src/lib/enter-mobile/enter-mobile.component.ts","../../../projects/barsa-auth/src/lib/enter-mobile/enter-mobile.component.html","../../../projects/barsa-auth/src/lib/timer-countdown/timer-countdown.component.ts","../../../projects/barsa-auth/src/lib/timer-countdown/timer-countdown.component.html","../../../projects/barsa-auth/src/lib/verification/verification.component.ts","../../../projects/barsa-auth/src/lib/verification/verification.component.html","../../../projects/barsa-auth/src/lib/user-pass/user-pass.component.ts","../../../projects/barsa-auth/src/lib/user-pass/user-pass.component.html","../../../projects/barsa-auth/src/lib/passkey/passkey.component.ts","../../../projects/barsa-auth/src/lib/passkey/passkey.component.html","../../../projects/barsa-auth/src/lib/barsa-auth/barsa-auth.component.ts","../../../projects/barsa-auth/src/lib/barsa-auth/barsa-auth.component.html","../../../projects/barsa-auth/src/lib/login/login.component.ts","../../../projects/barsa-auth/src/lib/login/login.component.html","../../../projects/barsa-auth/src/lib/barsa-auth.module.ts","../../../projects/barsa-auth/src/public-api.ts","../../../projects/barsa-auth/src/barsa-auth.ts"],"sourcesContent":["export function decodeBase64Url(value: string): ArrayBuffer {\r\n const padding = '='.repeat((4 - (value.length % 4)) % 4);\r\n const binary = globalThis.atob(value.replace(/-/g, '+').replace(/_/g, '/') + padding);\r\n const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\r\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\r\n}\r\n\r\nexport function encodeBase64Url(value: ArrayBuffer): string {\r\n const bytes = new Uint8Array(value);\r\n let binary = '';\r\n for (const byte of bytes) {\r\n binary += String.fromCharCode(byte);\r\n }\r\n return globalThis.btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport {\r\n PasskeyAuthenticationCredentialJson,\r\n PasskeyAuthenticationOptionsJson,\r\n PasskeyAuthenticationVerifyResponse,\r\n PasskeyCeremonyOptions,\r\n PasskeyCredentialDescriptorJson,\r\n PasskeyEnrollmentStatus,\r\n PasskeyRegistrationCredentialJson,\r\n PasskeyRegistrationOptionsJson,\r\n PasskeyRegistrationVerifyResponse\r\n} from '../controllers/models';\r\nimport { decodeBase64Url, encodeBase64Url } from './passkey-codec';\r\nimport { getUniqueId } from 'barsa-novin-ray-core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PasskeyService {\r\n private readonly httpClient = inject(HttpClient);\r\n private platformAvailability?: Promise<boolean>;\r\n\r\n isPlatformAuthenticatorAvailable(): Promise<boolean> {\r\n if (!this.platformAvailability) {\r\n this.platformAvailability = this.detectPlatformAuthenticator();\r\n }\r\n return this.platformAvailability;\r\n }\r\n\r\n getEnrollmentStatus(): Promise<PasskeyEnrollmentStatus> {\n return firstValueFrom(\n this.httpClient.get<PasskeyEnrollmentStatus | string>('/api2/PassKey/0.1/status?v=' + getUniqueId(4))\n ).then((response) => this.parseJsonResponse<PasskeyEnrollmentStatus>(response));\n }\n\n canOfferEnrollment(status: PasskeyEnrollmentStatus): boolean {\n return status.canCreatePasskey ?? status.shouldOfferEnrollment;\n }\n\n isCredentialAlreadyRegistered(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'InvalidStateError'\n );\n }\n\r\n async register(): Promise<PasskeyRegistrationVerifyResponse> {\r\n const ceremonyResponse = await firstValueFrom(\r\n this.httpClient.post<PasskeyCeremonyOptions<PasskeyRegistrationOptionsJson> | string>(\r\n '/api2/PassKey/0.1/registrationoptions',\r\n {}\r\n )\r\n );\r\n const ceremony =\r\n this.parseJsonResponse<PasskeyCeremonyOptions<PasskeyRegistrationOptionsJson>>(ceremonyResponse);\r\n const publicKey = this.toCreationOptions(ceremony.publicKey);\r\n const credential = (await navigator.credentials.create({ publicKey })) as PublicKeyCredential | null;\r\n\r\n if (!credential || !('attestationObject' in credential.response)) {\r\n throw new Error('PASSKEY_REGISTRATION_EMPTY');\r\n }\r\n\r\n const verifyResponse = await firstValueFrom(\r\n this.httpClient.post<PasskeyRegistrationVerifyResponse | string>('/api2/PassKey/0.1/registrationverify', {\r\n ceremonyId: ceremony.ceremonyId,\r\n credential: this.serializeRegistrationCredential(credential)\r\n })\r\n );\r\n const response = this.parseJsonResponse<PasskeyRegistrationVerifyResponse>(verifyResponse);\r\n\r\n if (!response.verified) {\r\n throw new Error('PASSKEY_REGISTRATION_REJECTED');\r\n }\r\n return response;\r\n }\r\n\r\n async authenticate(): Promise<string> {\r\n const ceremonyResponse = await firstValueFrom(\r\n this.httpClient.post<PasskeyCeremonyOptions<PasskeyAuthenticationOptionsJson> | string>(\r\n '/api2/PassKey/0.1/authenticationoptions',\r\n {}\r\n )\r\n );\r\n const ceremony =\r\n this.parseJsonResponse<PasskeyCeremonyOptions<PasskeyAuthenticationOptionsJson>>(ceremonyResponse);\r\n const publicKey = this.toRequestOptions(ceremony.publicKey);\r\n const credential = (await navigator.credentials.get({ publicKey })) as PublicKeyCredential | null;\r\n\r\n if (!credential || !('signature' in credential.response)) {\r\n throw new Error('PASSKEY_AUTHENTICATION_EMPTY');\r\n }\r\n\r\n const verifyResponse = await firstValueFrom(\r\n this.httpClient.post<PasskeyAuthenticationVerifyResponse | string>(\r\n '/api2/PassKey/0.1/authenticationverify',\r\n {\r\n ceremonyId: ceremony.ceremonyId,\r\n credential: this.serializeAuthenticationCredential(credential)\r\n }\r\n )\r\n );\r\n const response = this.parseJsonResponse<PasskeyAuthenticationVerifyResponse>(verifyResponse);\r\n\r\n if (!response.verified || !response.token2?.trim()) {\r\n throw new Error('PASSKEY_AUTHENTICATION_REJECTED');\r\n }\r\n return response.token2;\r\n }\r\n\r\n getErrorMessage(error: unknown): string {\n if (error instanceof DOMException) {\r\n if (error.name === 'NotAllowedError') {\r\n return 'عملیات لغو شد یا Passkey معتبری روی این دستگاه پیدا نشد.';\r\n }\r\n if (error.name === 'InvalidStateError') {\r\n return 'Passkey این دستگاه قبلاً برای حساب شما ثبت شده است.';\r\n }\r\n if (error.name === 'SecurityError') {\r\n return 'تنظیمات دامنه یا ارتباط امن برای ورود با دستگاه معتبر نیست.';\r\n }\r\n }\r\n if (error instanceof HttpErrorResponse) {\r\n const serverMessage = error.error?.Message || error.error?.message || error.error?.error?.userMessage;\r\n if (typeof serverMessage === 'string' && serverMessage) {\r\n return serverMessage;\r\n }\r\n }\r\n return 'انجام احراز هویت دستگاه ممکن نشد. می‌توانید از روش دیگری وارد شوید.';\r\n }\r\n\r\n private async detectPlatformAuthenticator(): Promise<boolean> {\r\n if (\r\n typeof window === 'undefined' ||\r\n !window.isSecureContext ||\r\n typeof PublicKeyCredential === 'undefined' ||\r\n typeof PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable !== 'function'\r\n ) {\r\n return false;\r\n }\r\n try {\r\n return await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n private parseJsonResponse<T>(response: T | string): T {\r\n let value: unknown = response;\r\n\r\n for (let depth = 0; depth < 2 && typeof value === 'string'; depth++) {\r\n value = JSON.parse(value);\r\n }\r\n\r\n return value as T;\r\n }\r\n\r\n private toCreationOptions(options: PasskeyRegistrationOptionsJson): PublicKeyCredentialCreationOptions {\r\n return {\r\n ...options,\r\n challenge: decodeBase64Url(options.challenge),\r\n user: {\r\n ...options.user,\r\n id: decodeBase64Url(options.user.id)\r\n },\r\n excludeCredentials: this.toCredentialDescriptors(options.excludeCredentials),\r\n authenticatorSelection: {\r\n ...options.authenticatorSelection,\r\n authenticatorAttachment: 'platform',\r\n residentKey: 'required',\r\n requireResidentKey: true,\r\n userVerification: 'required'\r\n },\r\n attestation: 'none',\r\n hints: ['client-device']\r\n } as PublicKeyCredentialCreationOptions;\r\n }\r\n\r\n private toRequestOptions(options: PasskeyAuthenticationOptionsJson): PublicKeyCredentialRequestOptions {\r\n return {\r\n ...options,\r\n challenge: decodeBase64Url(options.challenge),\r\n allowCredentials: this.toCredentialDescriptors(options.allowCredentials),\r\n userVerification: 'required',\r\n hints: ['client-device']\r\n } as PublicKeyCredentialRequestOptions;\r\n }\r\n\r\n private toCredentialDescriptors(\r\n descriptors: PasskeyCredentialDescriptorJson[] | undefined\r\n ): PublicKeyCredentialDescriptor[] | undefined {\r\n return descriptors?.map((descriptor) => ({\r\n ...descriptor,\r\n id: decodeBase64Url(descriptor.id),\r\n transports: descriptor.transports as AuthenticatorTransport[] | undefined\r\n }));\r\n }\r\n\r\n private serializeRegistrationCredential(credential: PublicKeyCredential): PasskeyRegistrationCredentialJson {\r\n const response = credential.response as AuthenticatorAttestationResponse & {\r\n getTransports?: () => string[];\r\n };\r\n return {\r\n id: credential.id,\r\n rawId: encodeBase64Url(credential.rawId),\r\n type: 'public-key',\r\n authenticatorAttachment: this.getAuthenticatorAttachment(credential),\r\n clientExtensionResults: credential.getClientExtensionResults(),\r\n response: {\r\n clientDataJSON: encodeBase64Url(response.clientDataJSON),\r\n attestationObject: encodeBase64Url(response.attestationObject),\r\n transports: response.getTransports?.() || []\r\n }\r\n };\r\n }\r\n\r\n private serializeAuthenticationCredential(credential: PublicKeyCredential): PasskeyAuthenticationCredentialJson {\r\n const response = credential.response as AuthenticatorAssertionResponse;\r\n return {\r\n id: credential.id,\r\n rawId: encodeBase64Url(credential.rawId),\r\n type: 'public-key',\r\n authenticatorAttachment: this.getAuthenticatorAttachment(credential),\r\n clientExtensionResults: credential.getClientExtensionResults(),\r\n response: {\r\n clientDataJSON: encodeBase64Url(response.clientDataJSON),\r\n authenticatorData: encodeBase64Url(response.authenticatorData),\r\n signature: encodeBase64Url(response.signature),\r\n userHandle: response.userHandle ? encodeBase64Url(response.userHandle) : null\r\n }\r\n };\r\n }\r\n\r\n private getAuthenticatorAttachment(credential: PublicKeyCredential): string | null {\r\n return (\r\n (credential as PublicKeyCredential & { authenticatorAttachment?: string | null }).authenticatorAttachment ??\r\n null\r\n );\r\n }\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { catchError, finalize, throwError } from 'rxjs';\r\n\r\nimport { BaseController, IViewBase } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginMobileController extends BaseController<ILoginMobileView> {\r\n private _httpClient: HttpClient;\r\n /**\r\n *\r\n */\r\n\r\n constructor(view: ILoginMobileView) {\r\n super(view);\r\n this._httpClient = view.injector.get(HttpClient);\r\n }\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n sendCode(otpProvider: string, e): void {\r\n const { mobile, username } = e;\r\n this.form.valid && this.view.setLoading(true);\r\n this.view.showError('', -1);\r\n // const x = (): void => {\r\n // this.loading.set(false);\r\n // };\r\n const usernamequery = username ? `&username=${username}` : '';\r\n this._httpClient\r\n .get<{ otpId: string }>(`/api/openid/signin?provider=${otpProvider}&mobile=${mobile}${usernamequery}`)\r\n .pipe(\r\n finalize(() => {\r\n this.view.setLoading(false);\r\n }),\r\n catchError((err) => {\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((c) => {\r\n if (c?.otpId) {\r\n localStorage.setItem('otpId', c.otpId);\r\n this.view.codeSent();\r\n } else {\r\n const res = c as any;\r\n if (!res.succeed) {\r\n this.view.showError(res.error.userMessage, res.type);\r\n }\r\n // debugger;\r\n }\r\n });\r\n }\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) =>\r\n this.form.valid ? this.view.canSend(true) : this.view.canSend(false)\r\n );\r\n }\r\n}\r\n\r\nexport interface ILoginMobileView extends IViewBase {\r\n showError(message: any, code: any): void;\r\n form: FormGroup;\r\n codeSent: () => void;\r\n setLoading: (loading: boolean) => void;\r\n canSend: (loading: boolean) => void;\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\nimport { BarsaApi, BaseController, IViewBase } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginUserPassController extends BaseController<ILoginUserPassView> {\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n login(e: any): void {\r\n const { username, password, cap, capId } = e;\r\n this.view.setLoading(true);\r\n this.view.showError('', -1);\r\n const data = {\r\n un: username,\r\n pwd: password,\r\n cap,\r\n capId\r\n };\r\n BarsaApi.Bw.Login(data, {\r\n onSuccess: () => {\r\n this.view.userLoggedIn();\r\n },\r\n onError: (response2) => {\r\n this.view.setLoading(false);\r\n const response = response2.Data.ResponseData;\r\n let error = response.error;\r\n if (!error) {\r\n error = response;\r\n }\r\n const data = response.data;\r\n this.view.showError(error.userMessage, -1);\r\n if (data.showCaptcha) {\r\n this.view.visibleCaptcha(true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) => this.view.setValid(this.form.valid));\r\n if (BarsaApi.LoginFormData.ShowCaptcha === 'Show') {\r\n this.view.visibleCaptcha(true);\r\n }\r\n }\r\n}\r\n\r\nexport interface ILoginUserPassView extends IViewBase {\r\n form: FormGroup;\r\n showError(message: any, code: any): void;\r\n visibleCaptcha: (visible: boolean) => void;\r\n setLoading: (loading: boolean) => void;\r\n setValid: (isValid: boolean) => void;\r\n userLoggedIn: () => void;\r\n}\r\n","import { signal } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { catchError, finalize, throwError } from 'rxjs';\r\n\r\nimport { BaseController, IViewBase, BarsaApi } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginVerificationController extends BaseController<ILoginVerificationView> {\r\n canVerify = signal(false);\r\n _httpClient: HttpClient;\r\n\r\n constructor(view: ILoginVerificationView) {\r\n super(view);\r\n this._httpClient = view.injector.get(HttpClient);\r\n }\r\n\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n resendCode(otpProvider: string): void {\r\n this.view.setResetLoading(true);\r\n this._httpClient\r\n .get<{ otpId: string }>(`/api/openid/signin?provider=${otpProvider}&otpId=${localStorage.getItem('otpId')}`)\r\n .pipe(\r\n finalize(() => {}),\r\n catchError((err) => {\r\n this.view.setResetLoading(false);\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((_c) => {\r\n this.view.setResetLoading(false);\r\n this.view.startCountDown();\r\n });\r\n }\r\n verifyCode(otpProvider: string, e): void {\r\n this.view.setLoading(true);\r\n const { code, cap, capId } = e;\r\n\r\n this._httpClient\r\n .post<{ Sth: string }>(`/api/openid/callback?provider=${otpProvider}`, {\r\n otpId: localStorage.getItem('otpId'),\r\n otpCode: code,\r\n captchaCode: cap,\r\n capId\r\n })\r\n .pipe(\r\n finalize(() => {\r\n this.view.setLoading(false);\r\n }),\r\n catchError((err) => {\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((c) => {\r\n if (c?.Sth) {\r\n localStorage.removeItem('otpId');\r\n window.localStorage.setItem(BarsaApi.LoginAction.token2StorageKey, c.Sth);\r\n this.view.codeVerified();\r\n } else {\r\n const res = c as any;\r\n if (!res.succeed) {\r\n this.view.showError(res.error.userMessage, res.type);\r\n }\r\n }\r\n });\r\n }\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) =>\r\n this.form.valid ? this.canVerify.set(true) : this.canVerify.set(false)\r\n );\r\n }\r\n}\r\nexport interface ILoginVerificationView extends IViewBase {\r\n form: FormGroup;\r\n codeVerified: () => void;\r\n startCountDown: () => void;\r\n setResetLoading: (loading: boolean) => void;\r\n setLoading: (loading: boolean) => void;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n signal,\r\n inject\r\n} from '@angular/core';\r\nimport { ILoginMobileView, LoginMobileController } from '../controllers';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { forbiddenValidator, mobile_regex, ViewBase } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-enter-mobile',\r\n templateUrl: './enter-mobile.component.html',\r\n styleUrl: './enter-mobile.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EnterMobileComponent extends ViewBase<LoginMobileController> implements ILoginMobileView {\r\n @Output() otpSent = new EventEmitter<string>();\r\n @Input() errorTemplate: TemplateRef<any>;\r\n @Input() otpProvider: string;\r\n @Input() mobileDescription: string;\r\n @Input() usernameDescription: string;\r\n @Input() usernameLabel: string;\r\n controller = new LoginMobileController(this);\r\n form: FormGroup;\r\n loading = signal(false);\r\n isValid = signal(false);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n private fb = inject(FormBuilder);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.fb.group({\r\n mobile: [\r\n '',\r\n Validators.compose([Validators.required, Validators.maxLength(11), forbiddenValidator(mobile_regex)])\r\n ],\r\n username: ['', Validators.compose([])],\r\n updateOn: 'blur'\r\n });\r\n }\r\n get mobile(): any {\r\n return this.form.get('mobile');\r\n }\r\n get username(): any {\r\n return this.form.get('username');\r\n }\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n if (this.usernameLabel) {\r\n this.form.get('username')?.addValidators([Validators.required, Validators.minLength(2)]);\r\n }\r\n }\r\n codeSent(): void {\r\n this.otpSent.emit(this.form.value.mobile);\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n\r\n canSend(isValid: boolean): void {\r\n this.isValid.set(isValid);\r\n }\r\n onSendCode(): void {\r\n this.controller.sendCode(this.otpProvider, this.form.value);\r\n }\r\n}\r\n","<form class=\"tw-mt-2\" [formGroup]=\"form\">\r\n @if(usernameLabel){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n {{ usernameLabel }}\r\n </label>\r\n @if(usernameDescription){\r\n <div [innerHtml]=\"usernameDescription | sanitizeText\" class=\"auth-description tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched) && username?.errors.length\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">{{ usernameLabel }} ضروری است</div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-mb-4\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> شماره همراه </label>\r\n @if(mobileDescription){\r\n <div [innerHtml]=\"mobileDescription | sanitizeText\" class=\"auth-description tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"mobile\"\r\n formControlName=\"mobile\"\r\n placeholder=\"09121234567\"\r\n maxlength=\"11\"\r\n type=\"tel\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"mobile.invalid && (mobile.dirty || mobile.touched) && mobile?.errors.length\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">شماره همراه ضروری است</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'ارسال کد تایید'\"\r\n [valid]=\"isValid()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"auth-error tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, Input, signal, EventEmitter, Output } from '@angular/core';\r\nimport { BaseComponent } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-timer-countdown',\r\n templateUrl: './timer-countdown.component.html',\r\n styleUrl: './timer-countdown.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class TimerCountDownComponent extends BaseComponent {\r\n @Output() resend = new EventEmitter();\r\n @Input() minutes: number;\r\n @Input() loading: boolean;\r\n showResend = signal(false);\r\n minutesText = signal('');\r\n secondText = signal('');\r\n _interval: any;\r\n private _countDownDate: number;\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.startCountDown();\r\n }\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n }\r\n }\r\n startCountDown(): void {\r\n const tcountDownDate: Date = new Date();\r\n const nmin = tcountDownDate.getMinutes();\r\n tcountDownDate.setMinutes(nmin + this.minutes);\r\n this._countDownDate = tcountDownDate.getTime();\r\n this.showResend.set(false);\r\n this._calc();\r\n this._interval = setInterval(() => {\r\n this._calc();\r\n }, 1000);\r\n }\r\n _calc(): void {\r\n const now = new Date().getTime();\r\n const distance: any = this._countDownDate - now;\r\n\r\n // Time calculations for days, hours, minutes and seconds\r\n // const _days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n // const _hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n // Display the result in the respective elements\r\n this.minutesText.set(\r\n minutes.toLocaleString('en-US', {\r\n minimumIntegerDigits: 2,\r\n useGrouping: false\r\n })\r\n );\r\n this.secondText.set(\r\n seconds.toLocaleString('en-US', {\r\n minimumIntegerDigits: 2,\r\n useGrouping: false\r\n })\r\n );\r\n\r\n // If the count down is over, write some text\r\n if (distance < 0) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n this.showResend.set(true);\r\n }\r\n }\r\n}\r\n","@if(showResend()){\r\n<bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'ارسال مجدد'\"\r\n [valid]=\"true\"\r\n [loading]=\"loading\"\r\n [transparent]=\"true\"\r\n (click)=\"resend.emit()\"\r\n></bnrc-button-loading>\r\n}@else{\r\n<div class=\"tw-text-center\">\r\n <div\r\n id=\"timer\"\r\n class=\"auth-timer tw-px-2 tw-flex tw-flex-row-reverse gap-2 tw-justify-center tw-uppercase\"\r\n [style.visibility]=\"minutesText() ? 'visible' : 'hidden'\"\r\n >\r\n <div>\r\n <span class=\"tw-text-xl\">{{ minutesText() }}</span>\r\n </div>\r\n <div class=\"tw-text-2xl\">:</div>\r\n <div>\r\n <span class=\"tw-text-xl\">{{ secondText() }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n NgZone,\r\n Output,\r\n QueryList,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { getUniqueId, BarsaApi, ViewBase } from 'barsa-novin-ray-core';\r\n\r\nimport { ILoginVerificationView, LoginVerificationController } from '../controllers';\r\nimport { TimerCountDownComponent } from '../timer-countdown/timer-countdown.component';\r\n\r\n@Component({\r\n selector: 'ba-verification',\r\n templateUrl: './verification.component.html',\r\n styleUrl: './verification.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class VerificationComponent extends ViewBase<LoginVerificationController> implements ILoginVerificationView {\r\n @ViewChild(TimerCountDownComponent) _timerCountDown: TimerCountDownComponent;\r\n @ViewChildren('inputv') _inputsEl: QueryList<ElementRef>;\r\n @ViewChild('loadingBtn') _loadingBtn: TemplateRef<any>;\r\n @Output() otpVerified = new EventEmitter();\r\n @Output() changeMobile = new EventEmitter();\r\n @Input() mobile: string;\r\n @Input() otpProvider: string;\r\n @Input() errorTemplate: TemplateRef<any>;\r\n\r\n controller = new LoginVerificationController(this);\r\n form: FormGroup;\r\n capId = signal('-');\r\n resendLoading = signal(false);\r\n loading = signal(false);\r\n showCaptcha = signal(false);\r\n _ngZone = inject(NgZone);\r\n now = signal(getUniqueId(3));\r\n private fb = inject(FormBuilder);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n\r\n constructor() {\r\n super();\r\n this.form = this.fb.group({\r\n in1: ['', Validators.compose([Validators.required, Validators.maxLength(6)])],\r\n cap: [''],\r\n capId: [this.capId(), Validators.required]\r\n });\r\n }\r\n get in1(): any {\r\n return this.form.get('in1');\r\n }\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n this.showCaptcha.set(true);\r\n }\r\n showError(message: string, code: number): void {\r\n super.showError(message, code);\r\n this.capId.set(BarsaApi.LoginFormData.CaptchaId);\r\n }\r\n codeVerified(): void {\r\n this.otpVerified.emit();\r\n }\r\n onRefreshCaptcha(): void {\r\n this.now.set(getUniqueId(3));\r\n }\r\n onVerifyCode(): void {\r\n this._verifyCode();\r\n }\r\n onResendOtp(): void {\r\n this.controller.resendCode(this.otpProvider);\r\n }\r\n _verifyCode(): void {\r\n const { in1, capId, cap } = this.form.value;\r\n this.controller.verifyCode(this.otpProvider, { code: `${in1}`, capId, cap });\r\n }\r\n setResetLoading(loading: boolean): void {\r\n this.resendLoading.set(loading);\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n startCountDown(): void {\r\n this._timerCountDown.startCountDown();\r\n }\r\n get invArr(): ElementRef[] {\r\n return this._inputsEl.toArray();\r\n }\r\n\r\n get canVerify(): boolean {\r\n return this.controller.canVerify();\r\n }\r\n}\r\n","<form class=\"tw-pb-8 tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <label class=\"auth-label tw-block tw-w-full tw-text-md tw-font-bold tw-mb-4 tw-text-sm\">\r\n کد ارسال شده به شماره <strong>{{ mobile }}</strong> را وارد نمایید.\r\n </label>\r\n <a\r\n class=\"auth-link tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-sm tw-font-medium tw-mb-4\"\r\n (click)=\"changeMobile.emit()\"\r\n >ویرایش شماره همراه\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"tw-w-6\">\r\n <path\r\n d=\"M5,18H9.24a1,1,0,0,0,.71-.29l6.92-6.93h0L19.71,8a1,1,0,0,0,0-1.42L15.47,2.29a1,1,0,0,0-1.42,0L11.23,5.12h0L4.29,12.05a1,1,0,0,0-.29.71V17A1,1,0,0,0,5,18ZM14.76,4.41l2.83,2.83L16.17,8.66,13.34,5.83ZM6,13.17l5.93-5.93,2.83,2.83L8.83,16H6ZM21,20H3a1,1,0,0,0,0,2H21a1,1,0,0,0,0-2Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n </a>\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-3 tw-mb-4\">\r\n <input\r\n #inputv\r\n class=\"auth-field tw-w-full\"\r\n maxlength=\"6\"\r\n tabindex=\"0\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n name=\"in1\"\r\n [autoUpdate]=\"true\"\r\n appWebotp\r\n formControlName=\"in1\"\r\n />\r\n <ba-timer-countdown [minutes]=\"2\" (resend)=\"onResendOtp()\" [loading]=\"resendLoading()\"></ba-timer-countdown>\r\n </div>\r\n <div *ngIf=\"in1.invalid && (in1.dirty || in1.touched)\" class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\">\r\n <div *ngIf=\"in1.errors?.['required']\">کد تایید ضروری است</div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-2\">\r\n <bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'تایید کد'\"\r\n [valid]=\"canVerify\"\r\n [loading]=\"loading()\"\r\n (click)=\"onVerifyCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <div\r\n class=\"auth-error tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n signal,\r\n TemplateRef,\r\n inject\r\n} from '@angular/core';\r\nimport { ILoginUserPassView, LoginUserPassController } from '../controllers';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { getUniqueId, ViewBase, validateAllFormFields } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-user-pass',\r\n templateUrl: './user-pass.component.html',\r\n styleUrl: './user-pass.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class UserPassComponent extends ViewBase<LoginUserPassController> implements ILoginUserPassView {\r\n @Output() loggedIn = new EventEmitter<void>();\r\n @Input() errorTemplate: TemplateRef<any>;\r\n @Input() otpProvider: string;\r\n\r\n controller = new LoginUserPassController(this);\r\n form: FormGroup;\r\n canLogin = signal(false);\r\n loading = signal(false);\r\n capId = signal(getUniqueId(4));\r\n now = signal(getUniqueId(3));\r\n showCaptcha = signal(false);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n private fb = inject(FormBuilder);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.fb.group({\r\n username: ['', Validators.compose([Validators.required, Validators.minLength(1)])],\r\n password: ['', Validators.compose([Validators.required, Validators.minLength(1)])],\r\n cap: [''],\r\n capId: [this.capId(), Validators.required]\r\n });\r\n }\r\n get username(): any {\r\n return this.form.get('username');\r\n }\r\n get password(): any {\r\n return this.form.get('password');\r\n }\r\n get cap(): any {\r\n return this.form.get('cap');\r\n }\r\n userLoggedIn(): void {\r\n this.loggedIn.emit();\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n setValid(isValid: boolean): void {\r\n this.canLogin.set(isValid);\r\n }\r\n showError(message: string, code: number): void {\r\n super.showError(message, code);\r\n setTimeout(() => {\r\n this.errorMessage.set('');\r\n this.errorCode.set(-1);\r\n }, 3000);\r\n }\r\n visibleCaptcha(visible: boolean): void {\r\n this.now.set(getUniqueId(3));\r\n this.showCaptcha.set(visible);\r\n this.cap.reset();\r\n }\r\n onRefreshCaptcha(): void {\r\n this.now.set(getUniqueId(3));\r\n }\r\n onSendCode(): void {\r\n validateAllFormFields(this.form);\r\n this.canLogin() && !this.loading() && this.controller.login(this.form.value);\r\n }\r\n}\r\n","<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> نام کاربری </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">نام کاربری ضروری است.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> رمز عبور </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">رمز عبور ضروری است.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-flex tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> عبارت امنیتی </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\" />\r\n <button\r\n class=\"auth-captcha-refresh tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"auth-error tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnInit, Output, signal } from '@angular/core';\r\nimport { PasskeyMode } from '../controllers';\r\nimport { PasskeyService } from '../services/passkey.service';\r\n\r\n@Component({\r\n selector: 'ba-passkey',\r\n templateUrl: './passkey.component.html',\r\n styleUrl: './passkey.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class PasskeyComponent implements OnInit {\n @Input() mode: PasskeyMode = 'login';\n @Input() autoStart = false;\n @Output() loggedIn = new EventEmitter<string>();\n @Output() registered = new EventEmitter<void>();\r\n @Output() skipped = new EventEmitter<void>();\r\n @Output() cancelled = new EventEmitter<void>();\r\n\r\n checkingSupport = signal(true);\r\n supported = signal(false);\r\n loading = signal(false);\r\n errorMessage = signal('');\r\n private readonly passkeyService = inject(PasskeyService);\r\n\r\n ngOnInit(): void {\r\n void this.checkSupport();\r\n }\r\n\r\n async onPrimaryAction(): Promise<void> {\r\n if (!this.supported() || this.loading()) {\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n this.errorMessage.set('');\r\n try {\r\n if (this.mode === 'enrollment') {\n await this.passkeyService.register();\n this.registered.emit();\n } else {\n const token2 = await this.passkeyService.authenticate();\n this.loggedIn.emit(token2);\n }\n } catch (error) {\n if (this.mode === 'enrollment' && this.passkeyService.isCredentialAlreadyRegistered(error)) {\n // excludeCredentials نشان می‌دهد Passkey روی authenticator جاری از قبل موجود است.\n this.registered.emit();\n return;\n }\n\n console.error('Passkey error:', error);\n\r\n if (error instanceof DOMException) {\r\n console.error('name:', error.name);\r\n console.error('message:', error.message);\r\n }\r\n\r\n this.errorMessage.set(this.passkeyService.getErrorMessage(error));\r\n } finally {\r\n this.loading.set(false);\r\n }\r\n }\r\n\r\n onSkip(): void {\n if (this.loading()) {\n return;\n }\n\n this.skipped.emit();\n }\n\r\n private async checkSupport(): Promise<void> {\n const supported = await this.passkeyService.isPlatformAuthenticatorAvailable();\n this.supported.set(supported);\n this.checkingSupport.set(false);\n\n if (supported && this.mode === 'login' && this.autoStart) {\n await this.onPrimaryAction();\n }\n }\n}\n","<section class=\"passkey-panel tw-mt-2\" [attr.aria-busy]=\"loading()\">\r\n @if (mode === 'enrollment') {\r\n <h3 class=\"passkey-title tw-text-lg tw-font-semibold tw-mb-2\">ورود سریع با همین دستگاه</h3>\r\n <p class=\"passkey-description tw-text-sm tw-mb-5\">\r\n با ثبت Passkey، دفعه‌ی بعد می‌توانید با اثر انگشت، تشخیص چهره یا PIN دستگاه وارد شوید. اطلاعات بیومتریک و PIN از\r\n دستگاه خارج نمی‌شوند.\r\n </p>\r\n } @else {\r\n <h3 class=\"passkey-title tw-text-lg tw-font-semibold tw-mb-2\">ورود با دستگاه</h3>\r\n <p class=\"passkey-description tw-text-sm tw-mb-5\">\r\n از اثر انگشت، تشخیص چهره یا PIN همین دستگاه برای ورود استفاده کنید.\r\n </p>\r\n } @if (checkingSupport()) {\r\n <p class=\"passkey-description tw-text-sm tw-mb-4\">در حال بررسی قابلیت دستگاه...</p>\r\n } @else if (supported()) {\r\n <div class=\"tw-flex tw-items-center tw-mb-4\">\r\n <bnrc-button-loading\r\n [text]=\"mode === 'enrollment' ? 'فعال‌سازی ورود با دستگاه' : 'ورود با دستگاه'\"\r\n [valid]=\"true\"\r\n [loading]=\"loading()\"\r\n (click)=\"onPrimaryAction()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n } @else {\r\n <p class=\"auth-error tw-p-3 tw-mb-4 tw-text-xs\" role=\"status\">\r\n احراز هویت داخلی روی این مرورگر یا دستگاه در دسترس نیست.\r\n </p>\r\n }\r\n\r\n <div class=\"tw-flex tw-gap-4 tw-items-center\">\r\n @if (mode === 'enrollment') {\r\n <button type=\"button\" class=\"auth-link passkey-link\" [disabled]=\"loading()\" (click)=\"onSkip()\">فعلاً نه</button>\r\n } @else {\r\n <button type=\"button\" class=\"auth-link passkey-link\" [disabled]=\"loading()\" (click)=\"cancelled.emit()\">\r\n بازگشت به روش‌های دیگر\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (errorMessage()) {\r\n <div class=\"auth-error tw-p-3 tw-mb-4 tw-mt-4 tw-text-xs\" role=\"alert\">\r\n <span class=\"tw-font-medium\">خطا!</span> {{ errorMessage() }}\r\n </div>\r\n }\r\n</section>\r\n","import {\r\n Component,\r\n input,\r\n WritableSignal,\r\n signal,\r\n inject,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy\r\n} from '@angular/core';\r\nimport { AuthViewState, LoginSettings } from '../controllers';\r\nimport { ApplicationCtrlrService, PortalService } from 'barsa-novin-ray-core';\r\nimport { PasskeyService } from '../services/passkey.service';\r\n\r\n@Component({\r\n selector: 'ba-auth',\r\n templateUrl: './barsa-auth.component.html',\r\n styleUrl: './barsa-auth.component.scss',\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n standalone: false\r\n})\r\nexport class BarsaAuthComponent {\n @Output() verified = new EventEmitter<string | undefined>();\n appSettings = input.required<LoginSettings>();\r\n state: WritableSignal<AuthViewState> = signal('enter-mobile');\r\n mobile = signal('');\r\n loading = signal(false);\r\n passkeyAvailable = signal(false);\r\n _portalService = inject(PortalService);\r\n _applicationCtrlrService = inject(ApplicationCtrlrService);\r\n private readonly passkeyService = inject(PasskeyService);\r\n\r\n ngOnInit(): void {\r\n this.state.set(this.appSettings().DefaultState || 'enter-mobile');\r\n if (this.appSettings().PasskeyEnable) {\r\n void this.updatePasskeyAvailability();\r\n }\r\n }\r\n\r\n onChangeState(state: AuthViewState): void {\r\n this.state.set(state);\r\n }\r\n onChangeMobile(): void {\r\n this.state.set('enter-mobile');\r\n }\r\n onOtpSent(mobile: string): void {\r\n this.mobile.set(mobile);\r\n this.state.set('verification');\r\n }\r\n onLoggedIn(): void {\r\n void this.completeExistingLogin();\r\n }\r\n\r\n onPasskeyLoggedIn(token2: string): void {\n this.finishLogin(token2);\n }\r\n\r\n onEnrollmentFinished(): void {\r\n this.finishLogin();\r\n }\r\n\r\n private async updatePasskeyAvailability(): Promise<void> {\r\n this.passkeyAvailable.set(await this.passkeyService.isPlatformAuthenticatorAvailable());\r\n }\r\n\r\n private async completeExistingLogin(): Promise<void> {\r\n this.loading.set(true);\r\n if (\r\n this.appSettings().PasskeyEnable &&\r\n this.appSettings().PasskeyPromptOnFirstLogin &&\r\n (await this.passkeyService.isPlatformAuthenticatorAvailable())\r\n ) {\r\n try {\r\n const status = await this.passkeyService.getEnrollmentStatus();\n if (this.passkeyService.canOfferEnrollment(status)) {\n this.loading.set(false);\n this.state.set('passkey-enrollment');\n return;\n }\r\n } catch (e) {\n console.error('Error checking passkey enrollment status:', e);\r\n // Passkey اختیاری است؛ خطای status نباید ورود موفق را متوقف کند.\r\n }\r\n }\r\n this.finishLogin();\r\n }\r\n\r\n private finishLogin(token2?: string): void {\n this.loading.set(false);\n this.verified.emit(token2);\n }\n}\n","<ng-container\r\n *ngTemplateOutlet=\"appSettings() ? renderUi : missAppSettings; context: { $implicit: appSettings() }\"\r\n></ng-container>\r\n<ng-template #missAppSettings> Oops! </ng-template>\r\n<ng-template #renderUi let-appSettings>\r\n <div>\r\n @switch (state()) { @case ('enter-mobile') {\r\n <ba-enter-mobile\r\n (otpSent)=\"onOtpSent($event)\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n [mobileDescription]=\"appSettings.MobileDescription\"\r\n [usernameDescription]=\"appSettings.UsernameDescription\"\r\n [usernameLabel]=\"appSettings.UsernameLabel\"\r\n >\r\n <div class=\"form-footer\">\n @if(appSettings.UserPassEnable){\n <a\n class=\"auth-link tw-inline-flex tw-gap-3 tw-items-center tw-text-sm tw-font-medium\"\n (click)=\"onChangeState('user-pass')\"\n >ورود با نام کاربری\n </a>\n } @if(appSettings.PasskeyEnable && passkeyAvailable()){\n <div class=\"passkey-entry tw-mt-5\">\n <button\n type=\"button\"\n class=\"passkey-entry-button tw-w-full tw-px-4 tw-py-3 tw-text-sm tw-font-medium\"\n (click)=\"onChangeState('passkey')\"\n >\n ورود با اثر انگشت، چهره یا PIN دستگاه\n </button>\n </div>\n }\n </div>\n </ba-enter-mobile>\r\n } @case ('verification') {\r\n <ba-verification\r\n [mobile]=\"mobile()\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n (changeMobile)=\"onChangeMobile()\"\r\n (otpVerified)=\"onLoggedIn()\"\r\n ></ba-verification>\r\n } @case ('user-pass') {\r\n <ba-user-pass (loggedIn)=\"onLoggedIn()\">\r\n <div class=\"form-footer\">\n @if(appSettings.UserPassEnable){\n <a\n class=\"auth-link tw-inline-flex tw-gap-3 tw-items-center tw-text-sm tw-font-medium\"\n (click)=\"onChangeState('enter-mobile')\"\n >ورود با شماره همراه\n </a>\n } @if(appSettings.PasskeyEnable && passkeyAvailable()){\n <div class=\"passkey-entry tw-mt-5\">\n <button\n type=\"button\"\n class=\"passkey-entry-button tw-w-full tw-px-4 tw-py-3 tw-text-sm tw-font-medium\"\n (click)=\"onChangeState('passkey')\"\n >\n ورود با اثر انگشت، چهره یا PIN دستگاه\n </button>\n </div>\n }\n </div>\n </ba-user-pass>\n } @case ('passkey') {\n <ba-passkey\n mode=\"login\"\n [autoStart]=\"true\"\n (loggedIn)=\"onPasskeyLoggedIn($event)\"\n (cancelled)=\"onChangeState('enter-mobile')\"\n >\n </ba-passkey>\n } @case ('passkey-enrollment') {\r\n <ba-passkey\r\n mode=\"enrollment\"\r\n (registered)=\"onEnrollmentFinished()\"\r\n (skipped)=\"onEnrollmentFinished()\"\r\n ></ba-passkey>\r\n } }\r\n </div>\r\n <div class=\"tw-absolute tw-left-0 tw-right-0 tw-bottom-0 tw-pb-safe\">\r\n @if(appSettings.LoginFooter){\r\n <div [innerHTML]=\"appSettings.LoginFooter | sanitizeText\"></div>\r\n } @if(state()!=='verification' && state()!=='passkey-enrollment' && !appSettings.HideGovSso){\r\n <div class=\"tw-relative tw-flex tw-py-3 tw-items-center tw-px-2\">\r\n <div class=\"auth-divider tw-flex-grow\"></div>\r\n <span class=\"auth-divider-label tw-flex-shrink tw-mx-4\">ورود از طریق درگاه</span>\r\n <div class=\"auth-divider tw-flex-grow\"></div>\r\n </div>\r\n <div class=\"auth-gov-entry tw-rounded-lg back-box-color tw-w-full tw-py-3\">\r\n <div class=\"tw-flex tw-items-center tw-text-center\">\r\n <a class=\"auth-link tw-w-full tw-text-sm tw-font-medium\" [attr.href]=\"appSettings.GovSSOHref\"\r\n >ورود از طریق درگاه دولت من\r\n </a>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n signal,\r\n WritableSignal,\r\n OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n inject\r\n} from '@angular/core';\r\nimport { LoginSettings } from '../controllers';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { PortalService } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-login',\r\n templateUrl: './login.component.html',\r\n styleUrl: './login.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class LoginComponent implements OnInit {\r\n @ViewChild('template', { static: true, read: TemplateRef }) _errorTemplate: TemplateRef<any>;\r\n settings: Settings;\r\n appSettings: WritableSignal<LoginSettings> = signal({\r\n Logo: null,\r\n HideGovSso: true,\r\n Section1Title: '',\r\n Section1Description: '',\r\n Subtitle: '',\r\n Title: '',\r\n UserPassEnable: false,\r\n UsernameLabel: '',\r\n LogoOnTop: false,\r\n DefaultState: 'enter-mobile',\r\n GovSSOHref: '',\r\n OtpProvider: '',\r\n LoginType: 1,\r\n MobileDescription: '',\r\n UsernameDescription: '',\r\n LoginFooter: '' \r\n });\r\n logoUrl = '';\r\n backgroundUrl = '';\r\n title = '';\r\n hideGovSso = false;\r\n private _activatedRoute = inject(ActivatedRoute);\r\n private _portalService = inject(PortalService);\r\n ngOnInit(): void {\r\n const resolverData = this._activatedRoute.snapshot.data;\r\n if (this.settings?.LoginSettingsValue) {\r\n this.appSettings.set(this.settings?.LoginSettingsValue);\r\n } else if (resolverData) {\r\n this.appSettings.set(resolverData.loginSettings);\r\n }\r\n }\r\n onVerified(token2?: string): void {\r\n if (token2) {\r\n const currentUrl = new URL(window.location.origin);\r\n currentUrl.searchParams.set('token2', token2);\r\n window.location.href = currentUrl.toString();\r\n return;\r\n }\r\n window.location.href = window.location.origin;\r\n }\r\n}\r\ninterface Settings {\r\n LoginSettingsValue: LoginSettings;\r\n}\r\n","@switch (appSettings().Theme$Caption) { @case ('Side') {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} @case ('Center') {\r\n<ng-container *ngTemplateOutlet=\"center\"></ng-container>\r\n} @default {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} }\r\n<ng-template #center>\r\n <div class=\"login-page tw-h-screen tw-flex tw-justify-center tw-items-center\">\r\n <section class=\"login-section tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-container tw-mx-auto\">\r\n <div class=\"tw-bg-transparent tw-border-0\">\r\n <div class=\"tw-flex tw-flex-col md:tw-flex-row rtl:tw-flex-row-reverse\">\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n\r\n <div class=\"tw-hidden md:tw-block md:tw-w-6/12 tw-shadow-sm\">\r\n <img\r\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-s\"\r\n loading=\"lazy\"\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/right-pic.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-panel tw-w-full md:tw-w-4/12 tw-relative tw-shadow-sm\">\r\n <div class=\"tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-mb-3 tw-text-center\">\r\n <a href=\"/\">\r\n <img\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/logo.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n width=\"175\"\r\n height=\"175\"\r\n loading=\"lazy\"\r\n />\r\n </a>\r\n <div class=\"tw-mt-5\">\r\n <h3 class=\"tw-text-lg tw-font-semibold\">\r\n {{ appSettings().Section1Description }}\r\n </h3>\r\n </div>\r\n </div>\r\n\r\n <!-- فرم ورود -->\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified($event)\"></ba-auth>\n\r\n <hr class=\"login-divider tw-my-4\" />\r\n\r\n <div\r\n class=\"tw-flex tw-flex-col md:tw-flex-row tw-gap-2 md:tw-gap-4 tw-justify-start tw-text-sm\"\r\n >\r\n <a\r\n id=\"forgetPassword\"\r\n class=\"auth-link tw-pt-2\"\r\n tabindex=\"6\"\r\n onclick=\"LoginFormUi.ForgetPassword()\"\r\n >\r\n رمز عبور را فراموش کرده ام\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n</ng-template>\r\n<ng-template #side>\r\n <div class=\"login-page tw-w-full tw-h-full\">\r\n <div class=\"tw-flex tw-justify-center tw-h-screen tw-flex-row-reverse\">\r\n <div\r\n class=\"tw-hidden tw-bg-cover lg:tw-block lg:tw-w-2/3\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().BackgroundPicture\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfBackground:appSettings().HeightOfBackground) +\r\n ')'\r\n \"\r\n >\r\n <div class=\"login-hero-overlay tw-flex tw-items-center tw-h-full tw-px-20\">\r\n <div>\r\n <h2 class=\"login-hero-title tw-text-4xl tw-font-bold\">\r\n {{ appSettings().Section1Title }}\r\n </h2>\r\n <p class=\"login-hero-description tw-max-w-xl tw-mt-3\">\r\n {{ appSettings().Section1Description }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n @if(appSettings().LoginSectionBackground){\r\n <div\r\n class=\"tw-flex tw-items-center tw-w-full tw-px-6 lg:tw-w-2/6 tw-absolute tw-right-0 tw-top-0 tw-bottom-0\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().LoginSectionBackground\r\n | picFieldSrc\r\n : 'ID'\r\n : null\r\n : ''\r\n : appSettings().WidthOfLoginSectionBackground\r\n : appSettings().HeightOfLoginSectionBackground) +\r\n ')'\r\n \"\r\n ></div>\r\n }\r\n <div class=\"tw-flex tw-items-center tw-w-full tw-max-w-md tw-px-6 tw-mx-auto lg:tw-w-2/6 tw-relative\">\r\n <div class=\"tw-flex-1 tw-h-[40rem]\">\r\n <div class=\"tw-text-center tw-flex tw-flex-col tw-items-center tw-mb-8 tw-gap-4\">\r\n <div\r\n class=\"tw-flex tw-items-center\"\r\n [class.tw-flex-col]=\"appSettings().LogoOnTop\"\r\n [class.tw-gap-2]=\"!appSettings().LogoOnTop\"\r\n [class.tw-gap-4]=\"appSettings().LogoOnTop\"\r\n >\r\n <img\r\n loading=\"lazy\"\r\n [src]=\"\r\n appSettings().Logo\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfLogo:appSettings().HeightOfLogo\r\n \"\r\n />\r\n @if(appSettings().Title){\r\n <h2 class=\"login-title tw-text-2xl tw-font-bold tw-text-center\">\r\n {{ appSettings().Title }}\r\n </h2>\r\n }\r\n </div>\r\n @if(appSettings().Subtitle ){\r\n <div class=\"tw-flex tw-gap-2 tw-items-center\">\r\n <p class=\"login-subtitle tw-text-xl tw-mt-1\">\r\n {{ appSettings().Subtitle }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified($event)\"></ba-auth>\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","import { NgModule, inject } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { BarsaNovinRayCoreModule, BaseModule, DynamicComponentService } from 'barsa-novin-ray-core';\r\nimport {\r\n BarsaAuthComponent,\r\n EnterMobileComponent,\r\n LoginComponent,\r\n TimerCountDownComponent,\r\n UserPassComponent,\r\n VerificationComponent,\r\n PasskeyComponent\r\n} from '../public-api';\r\n\r\nconst components = [\r\n BarsaAuthComponent,\r\n EnterMobileComponent,\r\n VerificationComponent,\r\n TimerCountDownComponent,\r\n UserPassComponent,\r\n LoginComponent,\r\n PasskeyComponent\r\n];\r\n\r\n@NgModule({\r\n declarations: [...components],\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, BarsaNovinRayCoreModule],\r\n exports: [...components]\r\n})\r\nexport class BarsaAuthModule extends BaseModule {\r\n protected dynamicComponents = [...components];\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n constructor() {\r\n const dcm = inject(DynamicComponentService);\r\n super(dcm, 'BarsaAuthModule');\r\n this.dcm = dcm;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of barsa-auth\r\n */\r\n\r\nexport * from './lib/barsa-auth/barsa-auth.component';\r\nexport * from './lib/enter-mobile/enter-mobile.component';\r\nexport * from './lib/user-pass/user-pass.component';\r\nexport * from './lib/verification/verification.component';\r\nexport * from './lib/timer-countdown/timer-countdown.component';\r\nexport * from './lib/login/login.component';\r\nexport * from './lib/passkey/passkey.component';\r\nexport * from './lib/services/passkey.service';\r\nexport * from './lib/controllers';\r\n\r\nexport * from './lib/barsa-auth.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i4.TimerCountDownComponent","i2","i3.EnterMobileComponent","i4.VerificationComponent","i5.UserPassComponent","i6.PasskeyComponent","i2.BarsaAuthComponent"],"mappings":";;;;;;;;;;;;AAAM,SAAU,eAAe,CAAC,KAAa,EAAA;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;IACrF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7E,IAAA,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAgB;AACnG;AAEM,SAAU,eAAe,CAAC,KAAkB,EAAA;AAC9C,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC;IACnC,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,QAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;IACvC;IACA,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AAC9F;;MCIa,cAAc,CAAA;AAD3B,IAAA,WAAA,GAAA;AAEqB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AA6NnD,IAAA;IA1NG,gCAAgC,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC5B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,2BAA2B,EAAE;QAClE;QACA,OAAO,IAAI,CAAC,oBAAoB;IACpC;IAEA,mBAAmB,GAAA;AACf,QAAA,OAAO,cAAc,CACjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAmC,6BAA6B,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CACxG,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,iBAAiB,CAA0B,QAAQ,CAAC,CAAC;IACnF;AAEA,IAAA,kBAAkB,CAAC,MAA+B,EAAA;AAC9C,QAAA,OAAO,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,qBAAqB;IAClE;AAEA,IAAA,6BAA6B,CAAC,KAAc,EAAA;AACxC,QAAA,QACI,OAAO,KAAK,KAAK,QAAQ;AACzB,YAAA,KAAK,KAAK,IAAI;AACd,YAAA,MAAM,IAAI,KAAK;AACf,YAAA,KAAK,CAAC,IAAI,KAAK,mBAAmB;IAE1C;AAEA,IAAA,MAAM,QAAQ,GAAA;AACV,QAAA,MAAM,gBAAgB,GAAG,MAAM,cAAc,CACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAChB,uCAAuC,EACvC,EAAE,CACL,CACJ;QACD,MAAM,QAAQ,GACV,IAAI,CAAC,iBAAiB,CAAyD,gBAAgB,CAAC;QACpG,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC5D,QAAA,MAAM,UAAU,IAAI,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAA+B;AAEpG,QAAA,IAAI,CAAC,UAAU,IAAI,EAAE,mBAAmB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC9D,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;QACjD;AAEA,QAAA,MAAM,cAAc,GAAG,MAAM,cAAc,CACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAA6C,sCAAsC,EAAE;YACrG,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC/B,YAAA,UAAU,EAAE,IAAI,CAAC,+BAA+B,CAAC,UAAU;AAC9D,SAAA,CAAC,CACL;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAoC,cAAc,CAAC;AAE1F,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;QACpD;AACA,QAAA,OAAO,QAAQ;IACnB;AAEA,IAAA,MAAM,YAAY,GAAA;AACd,QAAA,MAAM,gBAAgB,GAAG,MAAM,cAAc,CACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAChB,yCAAyC,EACzC,EAAE,CACL,CACJ;QACD,MAAM,QAAQ,GACV,IAAI,CAAC,iBAAiB,CAA2D,gBAAgB,CAAC;QACtG,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC3D,QAAA,MAAM,UAAU,IAAI,MAAM,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAA+B;AAEjG,QAAA,IAAI,CAAC,UAAU,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;AACtD,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACnD;AAEA,QAAA,MAAM,cAAc,GAAG,MAAM,cAAc,CACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAChB,wCAAwC,EACxC;YACI,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC/B,YAAA,UAAU,EAAE,IAAI,CAAC,iCAAiC,CAAC,UAAU;AAChE,SAAA,CACJ,CACJ;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAsC,cAAc,CAAC;AAE5F,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;AAChD,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;QACtD;QACA,OAAO,QAAQ,CAAC,MAAM;IAC1B;AAEA,IAAA,eAAe,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,KAAK,YAAY,YAAY,EAAE;AAC/B,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE;AAClC,gBAAA,OAAO,0DAA0D;YACrE;AACA,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE;AACpC,gBAAA,OAAO,qDAAqD;YAChE;AACA,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE;AAChC,gBAAA,OAAO,6DAA6D;YACxE;QACJ;AACA,QAAA,IAAI,KAAK,YAAY,iBAAiB,EAAE;YACpC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW;AACrG,YAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,EAAE;AACpD,gBAAA,OAAO,aAAa;YACxB;QACJ;AACA,QAAA,OAAO,qEAAqE;IAChF;AAEQ,IAAA,MAAM,2BAA2B,GAAA;QACrC,IACI,OAAO,MAAM,KAAK,WAAW;YAC7B,CAAC,MAAM,CAAC,eAAe;YACvB,OAAO,mBAAmB,KAAK,WAAW;AAC1C,YAAA,OAAO,mBAAmB,CAAC,6CAA6C,KAAK,UAAU,EACzF;AACE,YAAA,OAAO,KAAK;QAChB;AACA,QAAA,IAAI;AACA,YAAA,OAAO,MAAM,mBAAmB,CAAC,6CAA6C,EAAE;QACpF;AAAE,QAAA,MAAM;AACJ,YAAA,OAAO,KAAK;QAChB;IACJ;AAEQ,IAAA,iBAAiB,CAAI,QAAoB,EAAA;QAC7C,IAAI,KAAK,GAAY,QAAQ;AAE7B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,KAAK,EAAE,EAAE;AACjE,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B;AAEA,QAAA,OAAO,KAAU;IACrB;AAEQ,IAAA,iBAAiB,CAAC,OAAuC,EAAA;QAC7D,OAAO;AACH,YAAA,GAAG,OAAO;AACV,YAAA,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC;AAC7C,YAAA,IAAI,EAAE;gBACF,GAAG,OAAO,CAAC,IAAI;gBACf,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACtC,aAAA;YACD,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,kBAAkB,CAAC;AAC5E,YAAA,sBAAsB,EAAE;gBACpB,GAAG,OAAO,CAAC,sBAAsB;AACjC,gBAAA,uBAAuB,EAAE,UAAU;AACnC,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,kBAAkB,EAAE,IAAI;AACxB,gBAAA,gBAAgB,EAAE;AACrB,aAAA;AACD,YAAA,WAAW,EAAE,MAAM;YACnB,KAAK,EAAE,CAAC,eAAe;SACY;IAC3C;AAEQ,IAAA,gBAAgB,CAAC,OAAyC,EAAA;QAC9D,OAAO;AACH,YAAA,GAAG,OAAO;AACV,YAAA,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC;YAC7C,gBAAgB,EAAE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,gBAAgB,CAAC;AACxE,YAAA,gBAAgB,EAAE,UAAU;YAC5B,KAAK,EAAE,CAAC,eAAe;SACW;IAC1C;AAEQ,IAAA,uBAAuB,CAC3B,WAA0D,EAAA;QAE1D,OAAO,WAAW,EAAE,GAAG,CAAC,CAAC,UAAU,MAAM;AACrC,YAAA,GAAG,UAAU;AACb,YAAA,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,UAAU,EAAE,UAAU,CAAC;AAC1B,SAAA,CAAC,CAAC;IACP;AAEQ,IAAA,+BAA+B,CAAC,UAA+B,EAAA;AACnE,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAE3B;QACD,OAAO;YACH,EAAE,EAAE,UAAU,CAAC,EAAE;AACjB,YAAA,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,uBAAuB,EAAE,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;AACpE,YAAA,sBAAsB,EAAE,UAAU,CAAC,yBAAyB,EAAE;AAC9D,YAAA,QAAQ,EAAE;AACN,gBAAA,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC;AACxD,gBAAA,iBAAiB,EAAE,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAC9D,gBAAA,UAAU,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI;AAC7C;SACJ;IACL;AAEQ,IAAA,iCAAiC,CAAC,UAA+B,EAAA;AACrE,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAA0C;QACtE,OAAO;YACH,EAAE,EAAE,UAAU,CAAC,EAAE;AACjB,YAAA,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,uBAAuB,EAAE,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;AACpE,YAAA,sBAAsB,EAAE,UAAU,CAAC,yBAAyB,EAAE;AAC9D,YAAA,QAAQ,EAAE;AACN,gBAAA,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC;AACxD,gBAAA,iBAAiB,EAAE,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAC9D,gBAAA,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC9C,gBAAA,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG;AAC5E;SACJ;IACL;AAEQ,IAAA,0BAA0B,CAAC,UAA+B,EAAA;QAC9D,QACK,UAAgF,CAAC,uBAAuB;AACzG,YAAA,IAAI;IAEZ;8GA7NS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA,CAAA;;2FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACX5B,MAAO,qBAAsB,SAAQ,cAAgC,CAAA;AAEvE;;AAEG;AAEH,IAAA,WAAA,CAAY,IAAsB,EAAA;QAC9B,KAAK,CAAC,IAAI,CAAC;QACX,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACpD;AACA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IACzB;IACA,QAAQ,CAAC,WAAmB,EAAE,CAAC,EAAA;AAC3B,QAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;;;AAI3B,QAAA,MAAM,aAAa,GAAG,QAAQ,GAAG,CAAA,UAAA,EAAa,QAAQ,CAAA,CAAE,GAAG,EAAE;AAC7D,QAAA,IAAI,CAAC;aACA,GAAG,CAAoB,+BAA+B,WAAW,CAAA,QAAA,EAAW,MAAM,CAAA,EAAG,aAAa,EAAE;AACpG,aAAA,IAAI,CACD,QAAQ,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC/B,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAG,KAAI;YACf,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC/C,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1D;YACA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC;AAEL,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,CAAC,EAAE,KAAK,EAAE;gBACV,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC;AACtC,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxB;iBAAO;gBACH,MAAM,GAAG,GAAG,CAAQ;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC;gBACxD;;YAEJ;AACJ,QAAA,CAAC,CAAC;IACV;IACA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,KAChC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CACvE;IACL;AACH;;ACvDK,MAAO,uBAAwB,SAAQ,cAAkC,CAAA;AAC3E,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IACzB;AACA,IAAA,KAAK,CAAC,CAAM,EAAA;QACR,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3B,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,GAAG,EAAE,QAAQ;YACb,GAAG;YACH;SACH;AACD,QAAA,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;YACpB,SAAS,EAAE,MAAK;AACZ,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC5B,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,SAAS,KAAI;AACnB,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC3B,gBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY;AAC5C,gBAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK;gBAC1B,IAAI,CAAC,KAAK,EAAE;oBACR,KAAK,GAAG,QAAQ;gBACpB;AACA,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC1B,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC1C,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,oBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBAClC;YACJ;AACH,SAAA,CAAC;IACN;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7E,IAAI,QAAQ,CAAC,aAAa,CAAC,WAAW,KAAK,MAAM,EAAE;AAC/C,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAClC;IACJ;AACH;;ACpCK,MAAO,2BAA4B,SAAQ,cAAsC,CAAA;AAInF,IAAA,WAAA,CAAY,IAA4B,EAAA;QACpC,KAAK,CAAC,IAAI,CAAC;QAJf,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK;sFAAC;QAKrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACpD;AAEA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IACzB;AACA,IAAA,UAAU,CAAC,WAAmB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC;aACA,GAAG,CAAoB,CAAA,4BAAA,EAA+B,WAAW,CAAA,OAAA,EAAU,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA,CAAE;AAC1G,aAAA,IAAI,CACD,QAAQ,CAAC,MAAK,EAAE,CAAC,CAAC,EAClB,UAAU,CAAC,CAAC,GAAG,KAAI;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC/C,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1D;YACA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC;AAEL,aAAA,SAAS,CAAC,CAAC,EAAE,KAAI;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9B,QAAA,CAAC,CAAC;IACV;IACA,UAAU,CAAC,WAAmB,EAAE,CAAC,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC;AAE9B,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CAAkB,CAAA,8BAAA,EAAiC,WAAW,CAAA,CAAE,EAAE;AACnE,YAAA,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;AACpC,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,GAAG;YAChB;SACH;AACA,aAAA,IAAI,CACD,QAAQ,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC/B,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAG,KAAI;YACf,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC/C,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1D;YACA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC;AAEL,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACR,gBAAA,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AAChC,gBAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC;AACzE,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC5B;iBAAO;gBACH,MAAM,GAAG,GAAG,CAAQ;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC;gBACxD;YACJ;AACJ,QAAA,CAAC,CAAC;IACV;IACA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,KAChC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CACzE;IACL;AACH;;ACzDK,MAAO,oBAAqB,SAAQ,QAA+B,CAAA;AAerE,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAfD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAU;AAM9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC;QAE5C,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK;oFAAC;QACvB,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK;oFAAC;;AAGf,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;QAK5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACtB,YAAA,MAAM,EAAE;gBACJ,EAAE;gBACF,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACvG,aAAA;YACD,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACtC,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;IACN;AACA,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AACA,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACpC;IACA,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F;IACJ;IACA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC7C;AACA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B;AAEA,IAAA,OAAO,CAAC,OAAgB,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B;IACA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/D;8GAnDS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,gUCrBjC,i/FAkEA,EAAA,MAAA,EAAA,CAAA,2pFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FD7Ca,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,i/FAAA,EAAA,MAAA,EAAA,CAAA,2pFAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AEjBC,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAP1D,IAAA,WAAA,GAAA;;AAQc,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAE;QAGrC,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK;uFAAC;QAC1B,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,EAAE;wFAAC;QACxB,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,EAAE;uFAAC;AAwD1B,IAAA;IArDG,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,cAAc,EAAE;IACzB;IACA,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC;IACJ;IACA,cAAc,GAAA;AACV,QAAA,MAAM,cAAc,GAAS,IAAI,IAAI,EAAE;AACvC,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,EAAE;QACxC,cAAc,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,OAAO,EAAE;AAC9C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,MAAK;YAC9B,IAAI,CAAC,KAAK,EAAE;QAChB,CAAC,EAAE,IAAI,CAAC;IACZ;IACA,KAAK,GAAA;QACD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAQ,IAAI,CAAC,cAAc,GAAG,GAAG;;;;QAK/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AACvE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;;QAG3D,IAAI,CAAC,WAAW,CAAC,GAAG,CAChB,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE;AAC5B,YAAA,oBAAoB,EAAE,CAAC;AACvB,YAAA,WAAW,EAAE;AAChB,SAAA,CAAC,CACL;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CACf,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE;AAC5B,YAAA,oBAAoB,EAAE,CAAC;AACvB,YAAA,WAAW,EAAE;AAChB,SAAA,CAAC,CACL;;AAGD,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;AACd,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;IACJ;8GA7DS,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,yLCVpC,s0BA2BA,EAAA,MAAA,EAAA,CAAA,83BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDjBa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,s0BAAA,EAAA,MAAA,EAAA,CAAA,83BAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;;AEeC,MAAO,qBAAsB,SAAQ,QAAqC,CAAA;;AAsB5E,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAnBD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAK3C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,2BAA2B,CAAC,IAAI,CAAC;QAElD,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,GAAG;kFAAC;QACnB,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK;0FAAC;QAC7B,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK;oFAAC;QACvB,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;AAC3B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;gFAAC;AACpB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;QAM5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACtB,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,GAAG,EAAE,CAAC,EAAE,CAAC;YACT,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,QAAQ;AAC5C,SAAA,CAAC;IACN;AACA,IAAA,IAAI,GAAG,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;IACA,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B;IACA,SAAS,CAAC,OAAe,EAAE,IAAY,EAAA;AACnC,QAAA,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;IACpD;IACA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3B;IACA,gBAAgB,GAAA;QACZ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC;IACA,YAAY,GAAA;QACR,IAAI,CAAC,WAAW,EAAE;IACtB;IACA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;IAChD;IACA,WAAW,GAAA;AACP,QAAA,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;QAC3C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAA,EAAG,GAAG,CAAA,CAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAChF;AACA,IAAA,eAAe,CAAC,OAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;IACnC;AACA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B;IACA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;IACzC;AACA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;IACnC;AAEA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;IACtC;8GAxES,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnB,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BtC,8qFAiDA,EAAA,MAAA,EAAA,CAAA,wnGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDrBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,8qFAAA,EAAA,MAAA,EAAA,CAAA,wnGAAA,CAAA,EAAA;;sBAGhB,SAAS;uBAAC,uBAAuB;;sBACjC,YAAY;uBAAC,QAAQ;;sBACrB,SAAS;uBAAC,YAAY;;sBACtB;;sBACA;;sBACA;;sBACA;;sBACA;;;AEfC,MAAO,iBAAkB,SAAQ,QAAiC,CAAA;AAgBpE,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAhBD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;AAI7C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC;QAE9C,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK;qFAAC;QACxB,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK;oFAAC;AACvB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;kFAAC;AAC9B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;gFAAC;QAC5B,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;;AAGnB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;QAK5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACtB,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,GAAG,EAAE,CAAC,EAAE,CAAC;YACT,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,QAAQ;AAC5C,SAAA,CAAC;IACN;AACA,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACpC;AACA,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACpC;AACA,IAAA,IAAI,GAAG,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;IACA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACxB;AACA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B;AACA,IAAA,QAAQ,CAAC,OAAgB,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IAC9B;IACA,SAAS,CAAC,OAAe,EAAE,IAAY,EAAA;AACnC,QAAA,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC;QAC9B,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,EAAE,IAAI,CAAC;IACZ;AACA,IAAA,cAAc,CAAC,OAAgB,EAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IACpB;IACA,gBAAgB,GAAA;QACZ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC;IACA,UAAU,GAAA;AACN,QAAA,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAChF;8GA9DS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,2MCrB9B,4lIAwFA,EAAA,MAAA,EAAA,CAAA,s+GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDnEa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,4lIAAA,EAAA,MAAA,EAAA,CAAA,s+GAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;;MEbQ,gBAAgB,CAAA;AAP7B,IAAA,WAAA,GAAA;QAQa,IAAA,CAAA,IAAI,GAAgB,OAAO;QAC3B,IAAA,CAAA,SAAS,GAAG,KAAK;AAChB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU;AACrC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;AACrC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;QAE9C,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,IAAI;4FAAC;QAC9B,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK;sFAAC;QACzB,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK;oFAAC;QACvB,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,EAAE;yFAAC;AACR,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AA0D3D,IAAA;IAxDG,QAAQ,GAAA;AACJ,QAAA,KAAK,IAAI,CAAC,YAAY,EAAE;IAC5B;AAEA,IAAA,MAAM,eAAe,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACrC;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI;AACA,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;AAC5B,gBAAA,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AACpC,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YAC1B;iBAAO;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AACvD,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B;QACJ;QAAE,OAAO,KAAK,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,6BAA6B,CAAC,KAAK,CAAC,EAAE;;AAExF,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBACtB;YACJ;AAEA,YAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAEtC,YAAA,IAAI,KAAK,YAAY,YAAY,EAAE;gBAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC;YAC5C;AAEA,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACrE;gBAAU;AACN,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACJ;IAEA,MAAM,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAChB;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IACvB;AAEQ,IAAA,MAAM,YAAY,GAAA;QACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gCAAgC,EAAE;AAC9E,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAE/B,QAAA,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;AACtD,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE;QAChC;IACJ;8GArES,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,kOCX7B,0iHA6CA,EAAA,MAAA,EAAA,CAAA,khEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDlCa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,0iHAAA,EAAA,MAAA,EAAA,CAAA,khEAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEIQ,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;AAQc,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAsB;QAC3D,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ;wFAAiB;QAC7C,IAAA,CAAA,KAAK,GAAkC,MAAM,CAAC,cAAc;kFAAC;QAC7D,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,EAAE;mFAAC;QACnB,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK;oFAAC;QACvB,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK;6FAAC;AAChC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACzC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AA6D3D,IAAA;IA3DG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,IAAI,cAAc,CAAC;AACjE,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE;AAClC,YAAA,KAAK,IAAI,CAAC,yBAAyB,EAAE;QACzC;IACJ;AAEA,IAAA,aAAa,CAAC,KAAoB,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;IACA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;IAClC;AACA,IAAA,SAAS,CAAC,MAAc,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;IAClC;IACA,UAAU,GAAA;AACN,QAAA,KAAK,IAAI,CAAC,qBAAqB,EAAE;IACrC;AAEA,IAAA,iBAAiB,CAAC,MAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAC5B;IAEA,oBAAoB,GAAA;QAChB,IAAI,CAAC,WAAW,EAAE;IACtB;AAEQ,IAAA,MAAM,yBAAyB,GAAA;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,gCAAgC,EAAE,CAAC;IAC3F;AAEQ,IAAA,MAAM,qBAAqB,GAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IACI,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa;AAChC,YAAA,IAAI,CAAC,WAAW,EAAE,CAAC,yBAAyB;aAC3C,MAAM,IAAI,CAAC,cAAc,CAAC,gCAAgC,EAAE,CAAC,EAChE;AACE,YAAA,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE;gBAC9D,IAAI,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;AAChD,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC;oBACpC;gBACJ;YACJ;YAAE,OAAO,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,CAAC,CAAC;;YAEjE;QACJ;QACA,IAAI,CAAC,WAAW,EAAE;IACtB;AAEQ,IAAA,WAAW,CAAC,MAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B;8GArES,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,4PCrB/B,88JAkGA,EAAA,MAAA,EAAA,CAAA,+iFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;2FD7Ea,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,eAAA,EAGF,uBAAuB,CAAC,KAAK,cAClC,KAAK,EAAA,QAAA,EAAA,88JAAA,EAAA,MAAA,EAAA,CAAA,+iFAAA,CAAA,EAAA;;sBAGhB;;;MEDQ,cAAc,CAAA;AAP3B,IAAA,WAAA,GAAA;QAUI,IAAA,CAAA,WAAW,GAAkC,MAAM,CAAC;AAChD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,mBAAmB,EAAE,EAAE;AACvB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,cAAc;AAC5B,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,mBAAmB,EAAE,EAAE;AACvB,YAAA,WAAW,EAAE;AAChB,SAAA;wFAAC;QACF,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,UAAU,GAAG,KAAK;AACV,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AAkBjD,IAAA;IAjBG,QAAQ,GAAA;QACJ,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI;AACvD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QAC3D;aAAO,IAAI,YAAY,EAAE;YACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC;QACpD;IACJ;AACA,IAAA,UAAU,CAAC,MAAe,EAAA;QACtB,IAAI,MAAM,EAAE;YACR,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAClD,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE;YAC5C;QACJ;QACA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;IACjD;8GA3CS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACsB,WAAW,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB5D,knPAiJA,EAAA,MAAA,EAAA,CAAA,4xEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,kBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FD5Ha,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EAGH,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,knPAAA,EAAA,MAAA,EAAA,CAAA,4xEAAA,CAAA,EAAA;;sBAGhB,SAAS;uBAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;;;AEP9D,MAAM,UAAU,GAAG;IACf,kBAAkB;IAClB,oBAAoB;IACpB,qBAAqB;IACrB,uBAAuB;IACvB,iBAAiB;IACjB,cAAc;IACd;CACH;AAOK,MAAO,eAAgB,SAAQ,UAAU,CAAA;;AAG3C,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC3C,QAAA,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC;AAJvB,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,GAAG,UAAU,CAAC;AAKzC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAClB;8GAPS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBAdxB,kBAAkB;YAClB,oBAAoB;YACpB,qBAAqB;YACrB,uBAAuB;YACvB,iBAAiB;YACjB,cAAc;YACd,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAKN,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAXjF,kBAAkB;YAClB,oBAAoB;YACpB,qBAAqB;YACrB,uBAAuB;YACvB,iBAAiB;YACjB,cAAc;YACd,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAQP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAHd,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,CAAA,EAAA,CAAA,CAAA;;2FAGxE,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC;oBAC7B,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,CAAC;AAClF,oBAAA,OAAO,EAAE,CAAC,GAAG,UAAU;AAC1B,iBAAA;;;AC7BD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"barsa-auth.mjs","sources":["../../../projects/barsa-auth/src/lib/services/passkey-codec.ts","../../../projects/barsa-auth/src/lib/services/passkey.service.ts","../../../projects/barsa-auth/src/lib/controllers/login-mobile-controller.ts","../../../projects/barsa-auth/src/lib/controllers/login-userpass-controller.ts","../../../projects/barsa-auth/src/lib/controllers/login-verification-controller.ts","../../../projects/barsa-auth/src/lib/enter-mobile/enter-mobile.component.ts","../../../projects/barsa-auth/src/lib/enter-mobile/enter-mobile.component.html","../../../projects/barsa-auth/src/lib/timer-countdown/timer-countdown.component.ts","../../../projects/barsa-auth/src/lib/timer-countdown/timer-countdown.component.html","../../../projects/barsa-auth/src/lib/verification/verification.component.ts","../../../projects/barsa-auth/src/lib/verification/verification.component.html","../../../projects/barsa-auth/src/lib/user-pass/user-pass.component.ts","../../../projects/barsa-auth/src/lib/user-pass/user-pass.component.html","../../../projects/barsa-auth/src/lib/passkey/passkey.component.ts","../../../projects/barsa-auth/src/lib/passkey/passkey.component.html","../../../projects/barsa-auth/src/lib/barsa-auth/barsa-auth.component.ts","../../../projects/barsa-auth/src/lib/barsa-auth/barsa-auth.component.html","../../../projects/barsa-auth/src/lib/login/login.component.ts","../../../projects/barsa-auth/src/lib/login/login.component.html","../../../projects/barsa-auth/src/lib/barsa-auth.module.ts","../../../projects/barsa-auth/src/public-api.ts","../../../projects/barsa-auth/src/barsa-auth.ts"],"sourcesContent":["export function decodeBase64Url(value: string): ArrayBuffer {\r\n const padding = '='.repeat((4 - (value.length % 4)) % 4);\r\n const binary = globalThis.atob(value.replace(/-/g, '+').replace(/_/g, '/') + padding);\r\n const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\r\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\r\n}\r\n\r\nexport function encodeBase64Url(value: ArrayBuffer): string {\r\n const bytes = new Uint8Array(value);\r\n let binary = '';\r\n for (const byte of bytes) {\r\n binary += String.fromCharCode(byte);\r\n }\r\n return globalThis.btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport {\r\n PasskeyAuthenticationCredentialJson,\r\n PasskeyAuthenticationOptionsJson,\r\n PasskeyAuthenticationVerifyResponse,\r\n PasskeyCeremonyOptions,\r\n PasskeyCredentialDescriptorJson,\r\n PasskeyEnrollmentStatus,\r\n PasskeyRegistrationCredentialJson,\r\n PasskeyRegistrationOptionsJson,\r\n PasskeyRegistrationVerifyResponse\r\n} from '../controllers/models';\r\nimport { decodeBase64Url, encodeBase64Url } from './passkey-codec';\r\nimport { getUniqueId } from 'barsa-novin-ray-core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PasskeyService {\r\n private readonly httpClient = inject(HttpClient);\r\n private platformAvailability?: Promise<boolean>;\r\n\r\n isPlatformAuthenticatorAvailable(): Promise<boolean> {\r\n if (!this.platformAvailability) {\r\n this.platformAvailability = this.detectPlatformAuthenticator();\r\n }\r\n return this.platformAvailability;\r\n }\r\n\r\n getEnrollmentStatus(): Promise<PasskeyEnrollmentStatus> {\n return firstValueFrom(\n this.httpClient.get<PasskeyEnrollmentStatus | string>('/api2/PassKey/0.1/status?v=' + getUniqueId(4))\n ).then((response) => this.parseJsonResponse<PasskeyEnrollmentStatus>(response));\n }\n\n canOfferEnrollment(status: PasskeyEnrollmentStatus): boolean {\n return status.canCreatePasskey ?? status.shouldOfferEnrollment;\n }\n\n isCredentialAlreadyRegistered(error: unknown): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'InvalidStateError'\n );\n }\n\r\n async register(): Promise<PasskeyRegistrationVerifyResponse> {\r\n const ceremonyResponse = await firstValueFrom(\r\n this.httpClient.post<PasskeyCeremonyOptions<PasskeyRegistrationOptionsJson> | string>(\r\n '/api2/PassKey/0.1/registrationoptions',\r\n {}\r\n )\r\n );\r\n const ceremony =\r\n this.parseJsonResponse<PasskeyCeremonyOptions<PasskeyRegistrationOptionsJson>>(ceremonyResponse);\r\n const publicKey = this.toCreationOptions(ceremony.publicKey);\r\n const credential = (await navigator.credentials.create({ publicKey })) as PublicKeyCredential | null;\r\n\r\n if (!credential || !('attestationObject' in credential.response)) {\r\n throw new Error('PASSKEY_REGISTRATION_EMPTY');\r\n }\r\n\r\n const verifyResponse = await firstValueFrom(\r\n this.httpClient.post<PasskeyRegistrationVerifyResponse | string>('/api2/PassKey/0.1/registrationverify', {\r\n ceremonyId: ceremony.ceremonyId,\r\n credential: this.serializeRegistrationCredential(credential)\r\n })\r\n );\r\n const response = this.parseJsonResponse<PasskeyRegistrationVerifyResponse>(verifyResponse);\r\n\r\n if (!response.verified) {\r\n throw new Error('PASSKEY_REGISTRATION_REJECTED');\r\n }\r\n return response;\r\n }\r\n\r\n async authenticate(): Promise<string> {\r\n const ceremonyResponse = await firstValueFrom(\r\n this.httpClient.post<PasskeyCeremonyOptions<PasskeyAuthenticationOptionsJson> | string>(\r\n '/api2/PassKey/0.1/authenticationoptions',\r\n {}\r\n )\r\n );\r\n const ceremony =\r\n this.parseJsonResponse<PasskeyCeremonyOptions<PasskeyAuthenticationOptionsJson>>(ceremonyResponse);\r\n const publicKey = this.toRequestOptions(ceremony.publicKey);\r\n const credential = (await navigator.credentials.get({ publicKey })) as PublicKeyCredential | null;\r\n\r\n if (!credential || !('signature' in credential.response)) {\r\n throw new Error('PASSKEY_AUTHENTICATION_EMPTY');\r\n }\r\n\r\n const verifyResponse = await firstValueFrom(\r\n this.httpClient.post<PasskeyAuthenticationVerifyResponse | string>(\r\n '/api2/PassKey/0.1/authenticationverify',\r\n {\r\n ceremonyId: ceremony.ceremonyId,\r\n credential: this.serializeAuthenticationCredential(credential)\r\n }\r\n )\r\n );\r\n const response = this.parseJsonResponse<PasskeyAuthenticationVerifyResponse>(verifyResponse);\r\n\r\n if (!response.verified || !response.token2?.trim()) {\r\n throw new Error('PASSKEY_AUTHENTICATION_REJECTED');\r\n }\r\n return response.token2;\r\n }\r\n\r\n getErrorMessage(error: unknown): string {\n if (error instanceof DOMException) {\r\n if (error.name === 'NotAllowedError') {\r\n return 'عملیات لغو شد یا Passkey معتبری روی این دستگاه پیدا نشد.';\r\n }\r\n if (error.name === 'InvalidStateError') {\r\n return 'Passkey این دستگاه قبلاً برای حساب شما ثبت شده است.';\r\n }\r\n if (error.name === 'SecurityError') {\r\n return 'تنظیمات دامنه یا ارتباط امن برای ورود با دستگاه معتبر نیست.';\r\n }\r\n }\r\n if (error instanceof HttpErrorResponse) {\r\n const serverMessage = error.error?.Message || error.error?.message || error.error?.error?.userMessage;\r\n if (typeof serverMessage === 'string' && serverMessage) {\r\n return serverMessage;\r\n }\r\n }\r\n return 'انجام احراز هویت دستگاه ممکن نشد. می‌توانید از روش دیگری وارد شوید.';\r\n }\r\n\r\n private async detectPlatformAuthenticator(): Promise<boolean> {\r\n if (\r\n typeof window === 'undefined' ||\r\n !window.isSecureContext ||\r\n typeof PublicKeyCredential === 'undefined' ||\r\n typeof PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable !== 'function'\r\n ) {\r\n return false;\r\n }\r\n try {\r\n return await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n private parseJsonResponse<T>(response: T | string): T {\r\n let value: unknown = response;\r\n\r\n for (let depth = 0; depth < 2 && typeof value === 'string'; depth++) {\r\n value = JSON.parse(value);\r\n }\r\n\r\n return value as T;\r\n }\r\n\r\n private toCreationOptions(options: PasskeyRegistrationOptionsJson): PublicKeyCredentialCreationOptions {\r\n return {\r\n ...options,\r\n challenge: decodeBase64Url(options.challenge),\r\n user: {\r\n ...options.user,\r\n id: decodeBase64Url(options.user.id)\r\n },\r\n excludeCredentials: this.toCredentialDescriptors(options.excludeCredentials),\r\n authenticatorSelection: {\r\n ...options.authenticatorSelection,\r\n authenticatorAttachment: 'platform',\r\n residentKey: 'required',\r\n requireResidentKey: true,\r\n userVerification: 'required'\r\n },\r\n attestation: 'none',\r\n hints: ['client-device']\r\n } as PublicKeyCredentialCreationOptions;\r\n }\r\n\r\n private toRequestOptions(options: PasskeyAuthenticationOptionsJson): PublicKeyCredentialRequestOptions {\r\n return {\r\n ...options,\r\n challenge: decodeBase64Url(options.challenge),\r\n allowCredentials: this.toCredentialDescriptors(options.allowCredentials),\r\n userVerification: 'required',\r\n hints: ['client-device']\r\n } as PublicKeyCredentialRequestOptions;\r\n }\r\n\r\n private toCredentialDescriptors(\r\n descriptors: PasskeyCredentialDescriptorJson[] | undefined\r\n ): PublicKeyCredentialDescriptor[] | undefined {\r\n return descriptors?.map((descriptor) => ({\r\n ...descriptor,\r\n id: decodeBase64Url(descriptor.id),\r\n transports: descriptor.transports as AuthenticatorTransport[] | undefined\r\n }));\r\n }\r\n\r\n private serializeRegistrationCredential(credential: PublicKeyCredential): PasskeyRegistrationCredentialJson {\r\n const response = credential.response as AuthenticatorAttestationResponse & {\r\n getTransports?: () => string[];\r\n };\r\n return {\r\n id: credential.id,\r\n rawId: encodeBase64Url(credential.rawId),\r\n type: 'public-key',\r\n authenticatorAttachment: this.getAuthenticatorAttachment(credential),\r\n clientExtensionResults: credential.getClientExtensionResults(),\r\n response: {\r\n clientDataJSON: encodeBase64Url(response.clientDataJSON),\r\n attestationObject: encodeBase64Url(response.attestationObject),\r\n transports: response.getTransports?.() || []\r\n }\r\n };\r\n }\r\n\r\n private serializeAuthenticationCredential(credential: PublicKeyCredential): PasskeyAuthenticationCredentialJson {\r\n const response = credential.response as AuthenticatorAssertionResponse;\r\n return {\r\n id: credential.id,\r\n rawId: encodeBase64Url(credential.rawId),\r\n type: 'public-key',\r\n authenticatorAttachment: this.getAuthenticatorAttachment(credential),\r\n clientExtensionResults: credential.getClientExtensionResults(),\r\n response: {\r\n clientDataJSON: encodeBase64Url(response.clientDataJSON),\r\n authenticatorData: encodeBase64Url(response.authenticatorData),\r\n signature: encodeBase64Url(response.signature),\r\n userHandle: response.userHandle ? encodeBase64Url(response.userHandle) : null\r\n }\r\n };\r\n }\r\n\r\n private getAuthenticatorAttachment(credential: PublicKeyCredential): string | null {\r\n return (\r\n (credential as PublicKeyCredential & { authenticatorAttachment?: string | null }).authenticatorAttachment ??\r\n null\r\n );\r\n }\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { catchError, finalize, throwError } from 'rxjs';\r\n\r\nimport { BaseController, IViewBase } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginMobileController extends BaseController<ILoginMobileView> {\r\n private _httpClient: HttpClient;\r\n /**\r\n *\r\n */\r\n\r\n constructor(view: ILoginMobileView) {\r\n super(view);\r\n this._httpClient = view.injector.get(HttpClient);\r\n }\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n sendCode(otpProvider: string, e): void {\r\n const { mobile, username } = e;\r\n this.form.valid && this.view.setLoading(true);\r\n this.view.showError('', -1);\r\n // const x = (): void => {\r\n // this.loading.set(false);\r\n // };\r\n const usernamequery = username ? `&username=${username}` : '';\r\n this._httpClient\r\n .get<{ otpId: string }>(`/api/openid/signin?provider=${otpProvider}&mobile=${mobile}${usernamequery}`)\r\n .pipe(\r\n finalize(() => {\r\n this.view.setLoading(false);\r\n }),\r\n catchError((err) => {\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((c) => {\r\n if (c?.otpId) {\r\n localStorage.setItem('otpId', c.otpId);\r\n this.view.codeSent();\r\n } else {\r\n const res = c as any;\r\n if (!res.succeed) {\r\n this.view.showError(res.error.userMessage, res.type);\r\n }\r\n // debugger;\r\n }\r\n });\r\n }\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) =>\r\n this.form.valid ? this.view.canSend(true) : this.view.canSend(false)\r\n );\r\n }\r\n}\r\n\r\nexport interface ILoginMobileView extends IViewBase {\r\n showError(message: any, code: any): void;\r\n form: FormGroup;\r\n codeSent: () => void;\r\n setLoading: (loading: boolean) => void;\r\n canSend: (loading: boolean) => void;\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\nimport { BarsaApi, BaseController, IViewBase } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginUserPassController extends BaseController<ILoginUserPassView> {\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n login(e: any): void {\r\n const { username, password, cap, capId } = e;\r\n this.view.setLoading(true);\r\n this.view.showError('', -1);\r\n const data = {\r\n un: username,\r\n pwd: password,\r\n cap,\r\n capId\r\n };\r\n BarsaApi.Bw.Login(data, {\r\n onSuccess: () => {\r\n this.view.userLoggedIn();\r\n },\r\n onError: (response2) => {\r\n this.view.setLoading(false);\r\n const response = response2.Data.ResponseData;\r\n let error = response.error;\r\n if (!error) {\r\n error = response;\r\n }\r\n const data = response.data;\r\n this.view.showError(error.userMessage, -1);\r\n if (data.showCaptcha) {\r\n this.view.visibleCaptcha(true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) => this.view.setValid(this.form.valid));\r\n if (BarsaApi.LoginFormData.ShowCaptcha === 'Show') {\r\n this.view.visibleCaptcha(true);\r\n }\r\n }\r\n}\r\n\r\nexport interface ILoginUserPassView extends IViewBase {\r\n form: FormGroup;\r\n showError(message: any, code: any): void;\r\n visibleCaptcha: (visible: boolean) => void;\r\n setLoading: (loading: boolean) => void;\r\n setValid: (isValid: boolean) => void;\r\n userLoggedIn: () => void;\r\n}\r\n","import { signal } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { catchError, finalize, throwError } from 'rxjs';\r\n\r\nimport { BaseController, IViewBase, BarsaApi } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginVerificationController extends BaseController<ILoginVerificationView> {\r\n canVerify = signal(false);\r\n _httpClient: HttpClient;\r\n\r\n constructor(view: ILoginVerificationView) {\r\n super(view);\r\n this._httpClient = view.injector.get(HttpClient);\r\n }\r\n\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n resendCode(otpProvider: string): void {\r\n this.view.setResetLoading(true);\r\n this._httpClient\r\n .get<{ otpId: string }>(`/api/openid/signin?provider=${otpProvider}&otpId=${localStorage.getItem('otpId')}`)\r\n .pipe(\r\n finalize(() => {}),\r\n catchError((err) => {\r\n this.view.setResetLoading(false);\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((_c) => {\r\n this.view.setResetLoading(false);\r\n this.view.startCountDown();\r\n });\r\n }\r\n verifyCode(otpProvider: string, e): void {\r\n this.view.setLoading(true);\r\n const { code, cap, capId } = e;\r\n\r\n this._httpClient\r\n .post<{ Sth: string }>(`/api/openid/callback?provider=${otpProvider}`, {\r\n otpId: localStorage.getItem('otpId'),\r\n otpCode: code,\r\n captchaCode: cap,\r\n capId\r\n })\r\n .pipe(\r\n finalize(() => {\r\n this.view.setLoading(false);\r\n }),\r\n catchError((err) => {\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((c) => {\r\n if (c?.Sth) {\r\n localStorage.removeItem('otpId');\r\n window.localStorage.setItem(BarsaApi.LoginAction.token2StorageKey, c.Sth);\r\n this.view.codeVerified();\r\n } else {\r\n const res = c as any;\r\n if (!res.succeed) {\r\n this.view.showError(res.error.userMessage, res.type);\r\n }\r\n }\r\n });\r\n }\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) =>\r\n this.form.valid ? this.canVerify.set(true) : this.canVerify.set(false)\r\n );\r\n }\r\n}\r\nexport interface ILoginVerificationView extends IViewBase {\r\n form: FormGroup;\r\n codeVerified: () => void;\r\n startCountDown: () => void;\r\n setResetLoading: (loading: boolean) => void;\r\n setLoading: (loading: boolean) => void;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n signal,\r\n inject\r\n} from '@angular/core';\r\nimport { ILoginMobileView, LoginMobileController } from '../controllers';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { forbiddenValidator, mobile_regex, ViewBase } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-enter-mobile',\r\n templateUrl: './enter-mobile.component.html',\r\n styleUrl: './enter-mobile.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EnterMobileComponent extends ViewBase<LoginMobileController> implements ILoginMobileView {\r\n @Output() otpSent = new EventEmitter<string>();\r\n @Input() errorTemplate: TemplateRef<any>;\r\n @Input() otpProvider: string;\r\n @Input() mobileDescription: string;\r\n @Input() usernameDescription: string;\r\n @Input() usernameLabel: string;\r\n controller = new LoginMobileController(this);\r\n form: FormGroup;\r\n loading = signal(false);\r\n isValid = signal(false);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n private fb = inject(FormBuilder);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.fb.group({\r\n mobile: [\r\n '',\r\n Validators.compose([Validators.required, Validators.maxLength(11), forbiddenValidator(mobile_regex)])\r\n ],\r\n username: ['', Validators.compose([])],\r\n updateOn: 'blur'\r\n });\r\n }\r\n get mobile(): any {\r\n return this.form.get('mobile');\r\n }\r\n get username(): any {\r\n return this.form.get('username');\r\n }\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n if (this.usernameLabel) {\r\n this.form.get('username')?.addValidators([Validators.required, Validators.minLength(2)]);\r\n }\r\n }\r\n codeSent(): void {\r\n this.otpSent.emit(this.form.value.mobile);\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n\r\n canSend(isValid: boolean): void {\r\n this.isValid.set(isValid);\r\n }\r\n onSendCode(): void {\r\n this.controller.sendCode(this.otpProvider, this.form.value);\r\n }\r\n}\r\n","<form class=\"tw-mt-2\" [formGroup]=\"form\">\r\n @if(usernameLabel){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n {{ usernameLabel }}\r\n </label>\r\n @if(usernameDescription){\r\n <div [innerHtml]=\"usernameDescription | sanitizeText\" class=\"auth-description tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched) && username?.errors.length\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">{{ usernameLabel }} ضروری است</div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-mb-4\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> شماره همراه </label>\r\n @if(mobileDescription){\r\n <div [innerHtml]=\"mobileDescription | sanitizeText\" class=\"auth-description tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"mobile\"\r\n formControlName=\"mobile\"\r\n placeholder=\"09121234567\"\r\n maxlength=\"11\"\r\n type=\"tel\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"mobile.invalid && (mobile.dirty || mobile.touched) && mobile?.errors.length\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">شماره همراه ضروری است</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'ارسال کد تایید'\"\r\n [valid]=\"isValid()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"auth-error tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, Input, signal, EventEmitter, Output } from '@angular/core';\r\nimport { BaseComponent } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-timer-countdown',\r\n templateUrl: './timer-countdown.component.html',\r\n styleUrl: './timer-countdown.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class TimerCountDownComponent extends BaseComponent {\r\n @Output() resend = new EventEmitter();\r\n @Input() minutes: number;\r\n @Input() loading: boolean;\r\n showResend = signal(false);\r\n minutesText = signal('');\r\n secondText = signal('');\r\n _interval: any;\r\n private _countDownDate: number;\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.startCountDown();\r\n }\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n }\r\n }\r\n startCountDown(): void {\r\n const tcountDownDate: Date = new Date();\r\n const nmin = tcountDownDate.getMinutes();\r\n tcountDownDate.setMinutes(nmin + this.minutes);\r\n this._countDownDate = tcountDownDate.getTime();\r\n this.showResend.set(false);\r\n this._calc();\r\n this._interval = setInterval(() => {\r\n this._calc();\r\n }, 1000);\r\n }\r\n _calc(): void {\r\n const now = new Date().getTime();\r\n const distance: any = this._countDownDate - now;\r\n\r\n // Time calculations for days, hours, minutes and seconds\r\n // const _days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n // const _hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n // Display the result in the respective elements\r\n this.minutesText.set(\r\n minutes.toLocaleString('en-US', {\r\n minimumIntegerDigits: 2,\r\n useGrouping: false\r\n })\r\n );\r\n this.secondText.set(\r\n seconds.toLocaleString('en-US', {\r\n minimumIntegerDigits: 2,\r\n useGrouping: false\r\n })\r\n );\r\n\r\n // If the count down is over, write some text\r\n if (distance < 0) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n this.showResend.set(true);\r\n }\r\n }\r\n}\r\n","@if(showResend()){\r\n<bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'ارسال مجدد'\"\r\n [valid]=\"true\"\r\n [loading]=\"loading\"\r\n [transparent]=\"true\"\r\n (click)=\"resend.emit()\"\r\n></bnrc-button-loading>\r\n}@else{\r\n<div class=\"tw-text-center\">\r\n <div\r\n id=\"timer\"\r\n class=\"auth-timer tw-px-2 tw-flex tw-flex-row-reverse gap-2 tw-justify-center tw-uppercase\"\r\n [style.visibility]=\"minutesText() ? 'visible' : 'hidden'\"\r\n >\r\n <div>\r\n <span class=\"tw-text-xl\">{{ minutesText() }}</span>\r\n </div>\r\n <div class=\"tw-text-2xl\">:</div>\r\n <div>\r\n <span class=\"tw-text-xl\">{{ secondText() }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n NgZone,\r\n Output,\r\n QueryList,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { getUniqueId, BarsaApi, ViewBase } from 'barsa-novin-ray-core';\r\n\r\nimport { ILoginVerificationView, LoginVerificationController } from '../controllers';\r\nimport { TimerCountDownComponent } from '../timer-countdown/timer-countdown.component';\r\n\r\n@Component({\r\n selector: 'ba-verification',\r\n templateUrl: './verification.component.html',\r\n styleUrl: './verification.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class VerificationComponent extends ViewBase<LoginVerificationController> implements ILoginVerificationView {\r\n @ViewChild(TimerCountDownComponent) _timerCountDown: TimerCountDownComponent;\r\n @ViewChildren('inputv') _inputsEl: QueryList<ElementRef>;\r\n @ViewChild('loadingBtn') _loadingBtn: TemplateRef<any>;\r\n @Output() otpVerified = new EventEmitter();\r\n @Output() changeMobile = new EventEmitter();\r\n @Input() mobile: string;\r\n @Input() otpProvider: string;\r\n @Input() errorTemplate: TemplateRef<any>;\r\n\r\n controller = new LoginVerificationController(this);\r\n form: FormGroup;\r\n capId = signal('-');\r\n resendLoading = signal(false);\r\n loading = signal(false);\r\n showCaptcha = signal(false);\r\n _ngZone = inject(NgZone);\r\n now = signal(getUniqueId(3));\r\n private fb = inject(FormBuilder);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n\r\n constructor() {\r\n super();\r\n this.form = this.fb.group({\r\n in1: ['', Validators.compose([Validators.required, Validators.maxLength(6)])],\r\n cap: [''],\r\n capId: [this.capId(), Validators.required]\r\n });\r\n }\r\n get in1(): any {\r\n return this.form.get('in1');\r\n }\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n this.showCaptcha.set(true);\r\n }\r\n showError(message: string, code: number): void {\r\n super.showError(message, code);\r\n this.capId.set(BarsaApi.LoginFormData.CaptchaId);\r\n }\r\n codeVerified(): void {\r\n this.otpVerified.emit();\r\n }\r\n onRefreshCaptcha(): void {\r\n this.now.set(getUniqueId(3));\r\n }\r\n onVerifyCode(): void {\r\n this._verifyCode();\r\n }\r\n onResendOtp(): void {\r\n this.controller.resendCode(this.otpProvider);\r\n }\r\n _verifyCode(): void {\r\n const { in1, capId, cap } = this.form.value;\r\n this.controller.verifyCode(this.otpProvider, { code: `${in1}`, capId, cap });\r\n }\r\n setResetLoading(loading: boolean): void {\r\n this.resendLoading.set(loading);\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n startCountDown(): void {\r\n this._timerCountDown.startCountDown();\r\n }\r\n get invArr(): ElementRef[] {\r\n return this._inputsEl.toArray();\r\n }\r\n\r\n get canVerify(): boolean {\r\n return this.controller.canVerify();\r\n }\r\n}\r\n","<form class=\"tw-pb-8 tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <label class=\"auth-label tw-block tw-w-full tw-text-md tw-font-bold tw-mb-4 tw-text-sm\">\r\n کد ارسال شده به شماره <strong>{{ mobile }}</strong> را وارد نمایید.\r\n </label>\r\n <a\r\n class=\"auth-link tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-sm tw-font-medium tw-mb-4\"\r\n (click)=\"changeMobile.emit()\"\r\n >ویرایش شماره همراه\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"tw-w-6\">\r\n <path\r\n d=\"M5,18H9.24a1,1,0,0,0,.71-.29l6.92-6.93h0L19.71,8a1,1,0,0,0,0-1.42L15.47,2.29a1,1,0,0,0-1.42,0L11.23,5.12h0L4.29,12.05a1,1,0,0,0-.29.71V17A1,1,0,0,0,5,18ZM14.76,4.41l2.83,2.83L16.17,8.66,13.34,5.83ZM6,13.17l5.93-5.93,2.83,2.83L8.83,16H6ZM21,20H3a1,1,0,0,0,0,2H21a1,1,0,0,0,0-2Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n </a>\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-3 tw-mb-4\">\r\n <input\r\n #inputv\r\n class=\"auth-field tw-w-full\"\r\n maxlength=\"6\"\r\n tabindex=\"0\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n name=\"in1\"\r\n [autoUpdate]=\"true\"\r\n appWebotp\r\n formControlName=\"in1\"\r\n />\r\n <ba-timer-countdown [minutes]=\"2\" (resend)=\"onResendOtp()\" [loading]=\"resendLoading()\"></ba-timer-countdown>\r\n </div>\r\n <div *ngIf=\"in1.invalid && (in1.dirty || in1.touched)\" class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\">\r\n <div *ngIf=\"in1.errors?.['required']\">کد تایید ضروری است</div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-2\">\r\n <bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'تایید کد'\"\r\n [valid]=\"canVerify\"\r\n [loading]=\"loading()\"\r\n (click)=\"onVerifyCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <div\r\n class=\"auth-error tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n signal,\r\n TemplateRef,\r\n inject\r\n} from '@angular/core';\r\nimport { ILoginUserPassView, LoginUserPassController } from '../controllers';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { getUniqueId, ViewBase, validateAllFormFields } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-user-pass',\r\n templateUrl: './user-pass.component.html',\r\n styleUrl: './user-pass.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class UserPassComponent extends ViewBase<LoginUserPassController> implements ILoginUserPassView {\r\n @Output() loggedIn = new EventEmitter<void>();\r\n @Input() errorTemplate: TemplateRef<any>;\r\n @Input() otpProvider: string;\r\n\r\n controller = new LoginUserPassController(this);\r\n form: FormGroup;\r\n canLogin = signal(false);\r\n loading = signal(false);\r\n capId = signal(getUniqueId(4));\r\n now = signal(getUniqueId(3));\r\n showCaptcha = signal(false);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n private fb = inject(FormBuilder);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.fb.group({\r\n username: ['', Validators.compose([Validators.required, Validators.minLength(1)])],\r\n password: ['', Validators.compose([Validators.required, Validators.minLength(1)])],\r\n cap: [''],\r\n capId: [this.capId(), Validators.required]\r\n });\r\n }\r\n get username(): any {\r\n return this.form.get('username');\r\n }\r\n get password(): any {\r\n return this.form.get('password');\r\n }\r\n get cap(): any {\r\n return this.form.get('cap');\r\n }\r\n userLoggedIn(): void {\r\n this.loggedIn.emit();\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n setValid(isValid: boolean): void {\r\n this.canLogin.set(isValid);\r\n }\r\n showError(message: string, code: number): void {\r\n super.showError(message, code);\r\n setTimeout(() => {\r\n this.errorMessage.set('');\r\n this.errorCode.set(-1);\r\n }, 3000);\r\n }\r\n visibleCaptcha(visible: boolean): void {\r\n this.now.set(getUniqueId(3));\r\n this.showCaptcha.set(visible);\r\n this.cap.reset();\r\n }\r\n onRefreshCaptcha(): void {\r\n this.now.set(getUniqueId(3));\r\n }\r\n onSendCode(): void {\r\n validateAllFormFields(this.form);\r\n this.canLogin() && !this.loading() && this.controller.login(this.form.value);\r\n }\r\n}\r\n","<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\" (ngSubmit)=\"onSendCode()\">\r\n <button type=\"submit\" hidden tabindex=\"-1\" aria-hidden=\"true\"></button>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> نام کاربری </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">نام کاربری ضروری است.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> رمز عبور </label>\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"auth-error tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">رمز عبور ضروری است.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"auth-label tw-flex tw-block tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> عبارت امنیتی </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"auth-field tw-w-full\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\" />\r\n <button\r\n class=\"auth-captcha-refresh tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"auth-error tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnInit, Output, signal } from '@angular/core';\r\nimport { PasskeyMode } from '../controllers';\r\nimport { PasskeyService } from '../services/passkey.service';\r\n\r\n@Component({\r\n selector: 'ba-passkey',\r\n templateUrl: './passkey.component.html',\r\n styleUrl: './passkey.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class PasskeyComponent implements OnInit {\n @Input() mode: PasskeyMode = 'login';\n @Input() autoStart = false;\n @Output() loggedIn = new EventEmitter<string>();\n @Output() registered = new EventEmitter<void>();\r\n @Output() skipped = new EventEmitter<void>();\r\n @Output() cancelled = new EventEmitter<void>();\r\n\r\n checkingSupport = signal(true);\r\n supported = signal(false);\r\n loading = signal(false);\r\n errorMessage = signal('');\r\n private readonly passkeyService = inject(PasskeyService);\r\n\r\n ngOnInit(): void {\r\n void this.checkSupport();\r\n }\r\n\r\n async onPrimaryAction(): Promise<void> {\r\n if (!this.supported() || this.loading()) {\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n this.errorMessage.set('');\r\n try {\r\n if (this.mode === 'enrollment') {\n await this.passkeyService.register();\n this.registered.emit();\n } else {\n const token2 = await this.passkeyService.authenticate();\n this.loggedIn.emit(token2);\n }\n } catch (error) {\n if (this.mode === 'enrollment' && this.passkeyService.isCredentialAlreadyRegistered(error)) {\n // excludeCredentials نشان می‌دهد Passkey روی authenticator جاری از قبل موجود است.\n this.registered.emit();\n return;\n }\n\n console.error('Passkey error:', error);\n\r\n if (error instanceof DOMException) {\r\n console.error('name:', error.name);\r\n console.error('message:', error.message);\r\n }\r\n\r\n this.errorMessage.set(this.passkeyService.getErrorMessage(error));\r\n } finally {\r\n this.loading.set(false);\r\n }\r\n }\r\n\r\n onSkip(): void {\n if (this.loading()) {\n return;\n }\n\n this.skipped.emit();\n }\n\r\n private async checkSupport(): Promise<void> {\n const supported = await this.passkeyService.isPlatformAuthenticatorAvailable();\n this.supported.set(supported);\n this.checkingSupport.set(false);\n\n if (supported && this.mode === 'login' && this.autoStart) {\n await this.onPrimaryAction();\n }\n }\n}\n","<section class=\"passkey-panel tw-mt-2\" [attr.aria-busy]=\"loading()\">\r\n @if (mode === 'enrollment') {\r\n <h3 class=\"passkey-title tw-text-lg tw-font-semibold tw-mb-2\">ورود سریع با همین دستگاه</h3>\r\n <p class=\"passkey-description tw-text-sm tw-mb-5\">\r\n با ثبت Passkey، دفعه‌ی بعد می‌توانید با اثر انگشت، تشخیص چهره یا PIN دستگاه وارد شوید. اطلاعات بیومتریک و PIN از\r\n دستگاه خارج نمی‌شوند.\r\n </p>\r\n } @else {\r\n <h3 class=\"passkey-title tw-text-lg tw-font-semibold tw-mb-2\">ورود با دستگاه</h3>\r\n <p class=\"passkey-description tw-text-sm tw-mb-5\">\r\n از اثر انگشت، تشخیص چهره یا PIN همین دستگاه برای ورود استفاده کنید.\r\n </p>\r\n } @if (checkingSupport()) {\r\n <p class=\"passkey-description tw-text-sm tw-mb-4\">در حال بررسی قابلیت دستگاه...</p>\r\n } @else if (supported()) {\r\n <div class=\"tw-flex tw-items-center tw-mb-4\">\r\n <bnrc-button-loading\r\n [text]=\"mode === 'enrollment' ? 'فعال‌سازی ورود با دستگاه' : 'ورود با دستگاه'\"\r\n [valid]=\"true\"\r\n [loading]=\"loading()\"\r\n (click)=\"onPrimaryAction()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n } @else {\r\n <p class=\"auth-error tw-p-3 tw-mb-4 tw-text-xs\" role=\"status\">\r\n احراز هویت داخلی روی این مرورگر یا دستگاه در دسترس نیست.\r\n </p>\r\n }\r\n\r\n <div class=\"tw-flex tw-gap-4 tw-items-center\">\r\n @if (mode === 'enrollment') {\r\n <button type=\"button\" class=\"auth-link passkey-link\" [disabled]=\"loading()\" (click)=\"onSkip()\">فعلاً نه</button>\r\n } @else {\r\n <button type=\"button\" class=\"auth-link passkey-link\" [disabled]=\"loading()\" (click)=\"cancelled.emit()\">\r\n بازگشت به روش‌های دیگر\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (errorMessage()) {\r\n <div class=\"auth-error tw-p-3 tw-mb-4 tw-mt-4 tw-text-xs\" role=\"alert\">\r\n <span class=\"tw-font-medium\">خطا!</span> {{ errorMessage() }}\r\n </div>\r\n }\r\n</section>\r\n","import {\r\n Component,\r\n input,\r\n WritableSignal,\r\n signal,\r\n inject,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy\r\n} from '@angular/core';\r\nimport { AuthViewState, LoginSettings } from '../controllers';\r\nimport { ApplicationCtrlrService, PortalService } from 'barsa-novin-ray-core';\r\nimport { PasskeyService } from '../services/passkey.service';\r\n\r\n@Component({\r\n selector: 'ba-auth',\r\n templateUrl: './barsa-auth.component.html',\r\n styleUrl: './barsa-auth.component.scss',\r\n changeDetection: ChangeDetectionStrategy.Eager,\r\n standalone: false\r\n})\r\nexport class BarsaAuthComponent {\n @Output() verified = new EventEmitter<string | undefined>();\n appSettings = input.required<LoginSettings>();\r\n state: WritableSignal<AuthViewState> = signal('enter-mobile');\r\n mobile = signal('');\r\n loading = signal(false);\r\n passkeyAvailable = signal(false);\r\n _portalService = inject(PortalService);\r\n _applicationCtrlrService = inject(ApplicationCtrlrService);\r\n private readonly passkeyService = inject(PasskeyService);\r\n\r\n ngOnInit(): void {\r\n this.state.set(this.appSettings().DefaultState || 'enter-mobile');\r\n if (this.appSettings().PasskeyEnable) {\r\n void this.updatePasskeyAvailability();\r\n }\r\n }\r\n\r\n onChangeState(state: AuthViewState): void {\r\n this.state.set(state);\r\n }\r\n onChangeMobile(): void {\r\n this.state.set('enter-mobile');\r\n }\r\n onOtpSent(mobile: string): void {\r\n this.mobile.set(mobile);\r\n this.state.set('verification');\r\n }\r\n onLoggedIn(): void {\r\n void this.completeExistingLogin();\r\n }\r\n\r\n onPasskeyLoggedIn(token2: string): void {\n this.finishLogin(token2);\n }\r\n\r\n onEnrollmentFinished(): void {\r\n this.finishLogin();\r\n }\r\n\r\n private async updatePasskeyAvailability(): Promise<void> {\r\n this.passkeyAvailable.set(await this.passkeyService.isPlatformAuthenticatorAvailable());\r\n }\r\n\r\n private async completeExistingLogin(): Promise<void> {\r\n this.loading.set(true);\r\n if (\r\n this.appSettings().PasskeyEnable &&\r\n this.appSettings().PasskeyPromptOnFirstLogin &&\r\n (await this.passkeyService.isPlatformAuthenticatorAvailable())\r\n ) {\r\n try {\r\n const status = await this.passkeyService.getEnrollmentStatus();\n if (this.passkeyService.canOfferEnrollment(status)) {\n this.loading.set(false);\n this.state.set('passkey-enrollment');\n return;\n }\r\n } catch (e) {\n console.error('Error checking passkey enrollment status:', e);\r\n // Passkey اختیاری است؛ خطای status نباید ورود موفق را متوقف کند.\r\n }\r\n }\r\n this.finishLogin();\r\n }\r\n\r\n private finishLogin(token2?: string): void {\n this.loading.set(false);\n this.verified.emit(token2);\n }\n}\n","<ng-container\r\n *ngTemplateOutlet=\"appSettings() ? renderUi : missAppSettings; context: { $implicit: appSettings() }\"\r\n></ng-container>\r\n<ng-template #missAppSettings> Oops! </ng-template>\r\n<ng-template #renderUi let-appSettings>\r\n <div>\r\n @switch (state()) { @case ('enter-mobile') {\r\n <ba-enter-mobile\r\n (otpSent)=\"onOtpSent($event)\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n [mobileDescription]=\"appSettings.MobileDescription\"\r\n [usernameDescription]=\"appSettings.UsernameDescription\"\r\n [usernameLabel]=\"appSettings.UsernameLabel\"\r\n >\r\n <div class=\"form-footer\">\n @if(appSettings.UserPassEnable){\n <a\n class=\"auth-link tw-inline-flex tw-gap-3 tw-items-center tw-text-sm tw-font-medium\"\n (click)=\"onChangeState('user-pass')\"\n >ورود با نام کاربری\n </a>\n } @if(appSettings.PasskeyEnable && passkeyAvailable()){\n <div class=\"passkey-entry tw-mt-5\">\n <button\n type=\"button\"\n class=\"passkey-entry-button tw-w-full tw-px-4 tw-py-3 tw-text-sm tw-font-medium\"\n (click)=\"onChangeState('passkey')\"\n >\n ورود با اثر انگشت، چهره یا PIN دستگاه\n </button>\n </div>\n }\n </div>\n </ba-enter-mobile>\r\n } @case ('verification') {\r\n <ba-verification\r\n [mobile]=\"mobile()\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n (changeMobile)=\"onChangeMobile()\"\r\n (otpVerified)=\"onLoggedIn()\"\r\n ></ba-verification>\r\n } @case ('user-pass') {\r\n <ba-user-pass (loggedIn)=\"onLoggedIn()\">\r\n <div class=\"form-footer\">\n @if(appSettings.UserPassEnable){\n <a\n class=\"auth-link tw-inline-flex tw-gap-3 tw-items-center tw-text-sm tw-font-medium\"\n (click)=\"onChangeState('enter-mobile')\"\n >ورود با شماره همراه\n </a>\n } @if(appSettings.PasskeyEnable && passkeyAvailable()){\n <div class=\"passkey-entry tw-mt-5\">\n <button\n type=\"button\"\n class=\"passkey-entry-button tw-w-full tw-px-4 tw-py-3 tw-text-sm tw-font-medium\"\n (click)=\"onChangeState('passkey')\"\n >\n ورود با اثر انگشت، چهره یا PIN دستگاه\n </button>\n </div>\n }\n </div>\n </ba-user-pass>\n } @case ('passkey') {\n <ba-passkey\n mode=\"login\"\n [autoStart]=\"true\"\n (loggedIn)=\"onPasskeyLoggedIn($event)\"\n (cancelled)=\"onChangeState('enter-mobile')\"\n >\n </ba-passkey>\n } @case ('passkey-enrollment') {\r\n <ba-passkey\r\n mode=\"enrollment\"\r\n (registered)=\"onEnrollmentFinished()\"\r\n (skipped)=\"onEnrollmentFinished()\"\r\n ></ba-passkey>\r\n } }\r\n </div>\r\n <div class=\"tw-absolute tw-left-0 tw-right-0 tw-bottom-0 tw-pb-safe\">\r\n @if(appSettings.LoginFooter){\r\n <div [innerHTML]=\"appSettings.LoginFooter | sanitizeText\"></div>\r\n } @if(state()!=='verification' && state()!=='passkey-enrollment' && !appSettings.HideGovSso){\r\n <div class=\"tw-relative tw-flex tw-py-3 tw-items-center tw-px-2\">\r\n <div class=\"auth-divider tw-flex-grow\"></div>\r\n <span class=\"auth-divider-label tw-flex-shrink tw-mx-4\">ورود از طریق درگاه</span>\r\n <div class=\"auth-divider tw-flex-grow\"></div>\r\n </div>\r\n <div class=\"auth-gov-entry tw-rounded-lg back-box-color tw-w-full tw-py-3\">\r\n <div class=\"tw-flex tw-items-center tw-text-center\">\r\n <a class=\"auth-link tw-w-full tw-text-sm tw-font-medium\" [attr.href]=\"appSettings.GovSSOHref\"\r\n >ورود از طریق درگاه دولت من\r\n </a>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n signal,\r\n WritableSignal,\r\n OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n inject\r\n} from '@angular/core';\r\nimport { LoginSettings } from '../controllers';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { PortalService } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-login',\r\n templateUrl: './login.component.html',\r\n styleUrl: './login.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class LoginComponent implements OnInit {\r\n @ViewChild('template', { static: true, read: TemplateRef }) _errorTemplate: TemplateRef<any>;\r\n settings: Settings;\r\n appSettings: WritableSignal<LoginSettings> = signal({\r\n Logo: null,\r\n HideGovSso: true,\r\n Section1Title: '',\r\n Section1Description: '',\r\n Subtitle: '',\r\n Title: '',\r\n UserPassEnable: false,\r\n UsernameLabel: '',\r\n LogoOnTop: false,\r\n DefaultState: 'enter-mobile',\r\n GovSSOHref: '',\r\n OtpProvider: '',\r\n LoginType: 1,\r\n MobileDescription: '',\r\n UsernameDescription: '',\r\n LoginFooter: '' \r\n });\r\n logoUrl = '';\r\n backgroundUrl = '';\r\n title = '';\r\n hideGovSso = false;\r\n private _activatedRoute = inject(ActivatedRoute);\r\n private _portalService = inject(PortalService);\r\n ngOnInit(): void {\r\n const resolverData = this._activatedRoute.snapshot.data;\r\n if (this.settings?.LoginSettingsValue) {\r\n this.appSettings.set(this.settings?.LoginSettingsValue);\r\n } else if (resolverData) {\r\n this.appSettings.set(resolverData.loginSettings);\r\n }\r\n }\r\n onVerified(token2?: string): void {\r\n if (token2) {\r\n const currentUrl = new URL(window.location.origin);\r\n currentUrl.searchParams.set('token2', token2);\r\n window.location.href = currentUrl.toString();\r\n return;\r\n }\r\n window.location.href = window.location.origin;\r\n }\r\n}\r\ninterface Settings {\r\n LoginSettingsValue: LoginSettings;\r\n}\r\n","@switch (appSettings().Theme$Caption) { @case ('Side') {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} @case ('Center') {\r\n<ng-container *ngTemplateOutlet=\"center\"></ng-container>\r\n} @default {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} }\r\n<ng-template #center>\r\n <div class=\"login-page tw-h-screen tw-flex tw-justify-center tw-items-center\">\r\n <section class=\"login-section tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-container tw-mx-auto\">\r\n <div class=\"tw-bg-transparent tw-border-0\">\r\n <div class=\"tw-flex tw-flex-col md:tw-flex-row rtl:tw-flex-row-reverse\">\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n\r\n <div class=\"tw-hidden md:tw-block md:tw-w-6/12 tw-shadow-sm\">\r\n <img\r\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-s\"\r\n loading=\"lazy\"\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/right-pic.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n\r\n <div class=\"login-panel tw-w-full md:tw-w-4/12 tw-relative tw-shadow-sm\">\r\n <div class=\"tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-mb-3 tw-text-center\">\r\n <a href=\"/\">\r\n <img\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/logo.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n width=\"175\"\r\n height=\"175\"\r\n loading=\"lazy\"\r\n />\r\n </a>\r\n <div class=\"tw-mt-5\">\r\n <h3 class=\"tw-text-lg tw-font-semibold\">\r\n {{ appSettings().Section1Description }}\r\n </h3>\r\n </div>\r\n </div>\r\n\r\n <!-- فرم ورود -->\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified($event)\"></ba-auth>\n\r\n <hr class=\"login-divider tw-my-4\" />\r\n\r\n <div\r\n class=\"tw-flex tw-flex-col md:tw-flex-row tw-gap-2 md:tw-gap-4 tw-justify-start tw-text-sm\"\r\n >\r\n <a\r\n id=\"forgetPassword\"\r\n class=\"auth-link tw-pt-2\"\r\n tabindex=\"6\"\r\n onclick=\"LoginFormUi.ForgetPassword()\"\r\n >\r\n رمز عبور را فراموش کرده ام\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n</ng-template>\r\n<ng-template #side>\r\n <div class=\"login-page tw-w-full tw-h-full\">\r\n <div class=\"tw-flex tw-justify-center tw-h-screen tw-flex-row-reverse\">\r\n <div\r\n class=\"tw-hidden tw-bg-cover lg:tw-block lg:tw-w-2/3\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().BackgroundPicture\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfBackground:appSettings().HeightOfBackground) +\r\n ')'\r\n \"\r\n >\r\n <div class=\"login-hero-overlay tw-flex tw-items-center tw-h-full tw-px-20\">\r\n <div>\r\n <h2 class=\"login-hero-title tw-text-4xl tw-font-bold\">\r\n {{ appSettings().Section1Title }}\r\n </h2>\r\n <p class=\"login-hero-description tw-max-w-xl tw-mt-3\">\r\n {{ appSettings().Section1Description }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n @if(appSettings().LoginSectionBackground){\r\n <div\r\n class=\"tw-flex tw-items-center tw-w-full tw-px-6 lg:tw-w-2/6 tw-absolute tw-right-0 tw-top-0 tw-bottom-0\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().LoginSectionBackground\r\n | picFieldSrc\r\n : 'ID'\r\n : null\r\n : ''\r\n : appSettings().WidthOfLoginSectionBackground\r\n : appSettings().HeightOfLoginSectionBackground) +\r\n ')'\r\n \"\r\n ></div>\r\n }\r\n <div class=\"tw-flex tw-items-center tw-w-full tw-max-w-md tw-px-6 tw-mx-auto lg:tw-w-2/6 tw-relative\">\r\n <div class=\"tw-flex-1 tw-h-[40rem]\">\r\n <div class=\"tw-text-center tw-flex tw-flex-col tw-items-center tw-mb-8 tw-gap-4\">\r\n <div\r\n class=\"tw-flex tw-items-center\"\r\n [class.tw-flex-col]=\"appSettings().LogoOnTop\"\r\n [class.tw-gap-2]=\"!appSettings().LogoOnTop\"\r\n [class.tw-gap-4]=\"appSettings().LogoOnTop\"\r\n >\r\n <img\r\n loading=\"lazy\"\r\n [src]=\"\r\n appSettings().Logo\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfLogo:appSettings().HeightOfLogo\r\n \"\r\n />\r\n @if(appSettings().Title){\r\n <h2 class=\"login-title tw-text-2xl tw-font-bold tw-text-center\">\r\n {{ appSettings().Title }}\r\n </h2>\r\n }\r\n </div>\r\n @if(appSettings().Subtitle ){\r\n <div class=\"tw-flex tw-gap-2 tw-items-center\">\r\n <p class=\"login-subtitle tw-text-xl tw-mt-1\">\r\n {{ appSettings().Subtitle }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified($event)\"></ba-auth>\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","import { NgModule, inject } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { BarsaNovinRayCoreModule, BaseModule, DynamicComponentService } from 'barsa-novin-ray-core';\r\nimport {\r\n BarsaAuthComponent,\r\n EnterMobileComponent,\r\n LoginComponent,\r\n TimerCountDownComponent,\r\n UserPassComponent,\r\n VerificationComponent,\r\n PasskeyComponent\r\n} from '../public-api';\r\n\r\nconst components = [\r\n BarsaAuthComponent,\r\n EnterMobileComponent,\r\n VerificationComponent,\r\n TimerCountDownComponent,\r\n UserPassComponent,\r\n LoginComponent,\r\n PasskeyComponent\r\n];\r\n\r\n@NgModule({\r\n declarations: [...components],\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, BarsaNovinRayCoreModule],\r\n exports: [...components]\r\n})\r\nexport class BarsaAuthModule extends BaseModule {\r\n protected dynamicComponents = [...components];\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n constructor() {\r\n const dcm = inject(DynamicComponentService);\r\n super(dcm, 'BarsaAuthModule');\r\n this.dcm = dcm;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of barsa-auth\r\n */\r\n\r\nexport * from './lib/barsa-auth/barsa-auth.component';\r\nexport * from './lib/enter-mobile/enter-mobile.component';\r\nexport * from './lib/user-pass/user-pass.component';\r\nexport * from './lib/verification/verification.component';\r\nexport * from './lib/timer-countdown/timer-countdown.component';\r\nexport * from './lib/login/login.component';\r\nexport * from './lib/passkey/passkey.component';\r\nexport * from './lib/services/passkey.service';\r\nexport * from './lib/controllers';\r\n\r\nexport * from './lib/barsa-auth.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i4.TimerCountDownComponent","i2","i3.EnterMobileComponent","i4.VerificationComponent","i5.UserPassComponent","i6.PasskeyComponent","i2.BarsaAuthComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "barsa-auth",
3
- "version": "2.3.167",
3
+ "version": "3.0.2",
4
4
  "peerDependencies": {
5
5
  "@angular/core": "^22.0.8",
6
6
  "@angular/common": "^22.0.8",
7
- "barsa-novin-ray-core": "2.3.159"
7
+ "barsa-novin-ray-core": "3.0.0"
8
8
  },
9
9
  "dependencies": {
10
10
  "tslib": "^2.3.0"