@firestitch/2fa 12.1.2 → 12.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"firestitch-2fa.umd.js","sources":["../../src/app/tokens/verification.token.ts","../../src/app/enums/verification-method-type.enum.ts","../../src/app/modules/verification/components/2fa-verification-methods/2fa-verification-methods.component.ts","../../src/app/modules/verification/components/2fa-verification-methods/2fa-verification-methods.component.html","../../src/app/modules/code-input/components/code-input/code-input.component.ts","../../src/app/modules/code-input/components/code-input/code-input.component.html","../../src/app/modules/verification/components/2fa-verification-code/2fa-verification-code.component.ts","../../src/app/modules/verification/components/2fa-verification-code/2fa-verification-code.component.html","../../src/app/modules/verification/components/2fa-verification/2fa-verification.component.ts","../../src/app/modules/verification/components/2fa-verification/2fa-verification.component.html","../../src/app/modules/code-input/code-input.module.ts","../../src/app/modules/verification/fs-2fa-verification.module.ts","../../src/app/modules/manage/components/app/app.component.ts","../../src/app/modules/manage/components/app/app.component.html","../../src/app/modules/manage/components/email/email.component.ts","../../src/app/modules/manage/components/email/email.component.html","../../src/app/modules/manage/components/number/number.component.ts","../../src/app/modules/manage/components/number/number.component.html","../../src/app/modules/manage/services/two-factor-manage.service.ts","../../src/app/modules/manage/components/defaulted/defaulted.component.ts","../../src/app/modules/manage/components/defaulted/defaulted.component.html","../../src/app/modules/manage/components/verification-methods/verification-methods.component.ts","../../src/app/modules/manage/components/verification-methods/verification-methods.component.html","../../src/app/modules/manage/components/numbers/numbers.component.ts","../../src/app/modules/manage/components/numbers/numbers.component.html","../../src/app/modules/manage/components/emails/emails.component.ts","../../src/app/modules/manage/components/emails/emails.component.html","../../src/app/modules/manage/components/manage-methods/manage-methods.component.ts","../../src/app/modules/manage/components/manage-methods/manage-methods.component.html","../../src/app/modules/manage/components/2fa-manage/2fa-manage.component.ts","../../src/app/modules/manage/components/2fa-manage/2fa-manage.component.html","../../src/app/modules/manage/fs-2f-manage.module.ts","../../src/firestitch-2fa.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { IFsVerificationProvider } from '../interfaces/verification-provider.interface';\n\nexport const FS_2FA_VERIFICATION_PROVIDER = new InjectionToken<IFsVerificationProvider>(\n 'Provider for Verification service',\n);\n","export enum FsVerificationMethodType {\n Sms = 'sms',\n Email = 'email',\n App = 'app',\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { Observable } from 'rxjs';\nimport { map, shareReplay, tap } from 'rxjs/operators';\n\nimport { FS_2FA_VERIFICATION_PROVIDER } from '../../../../tokens/verification.token';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { IFsVerificationProvider } from '../../../../interfaces/verification-provider.interface';\nimport { IFsVerificationMethod } from '../../../../interfaces/verification-method.interface';\n\n\n@Component({\n templateUrl: './2fa-verification-methods.component.html',\n styleUrls: [\n './2fa-verification-methods.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Fs2faVerificationMethodsComponent {\n\n public method: IFsVerificationMethod;\n public phone: string;\n public code: string;\n public methods$: Observable<Record<string, IFsVerificationMethod[]>>;\n public readonly verificationMethodType = FsVerificationMethodType;\n\n constructor(\n @Inject(FS_2FA_VERIFICATION_PROVIDER)\n private _verificationProvider: IFsVerificationProvider,\n @Inject(MAT_DIALOG_DATA)\n private _dialogData: any,\n private _dialogRef: MatDialogRef<Fs2faVerificationMethodsComponent>,\n ) {\n this._setActiveMethod();\n this._initMethods();\n }\n\n public compareWith(o1, o2) {\n return o1 && o2 && o1.id === o2.id\n }\n\n public setVerificationMethod = () => {\n return this._verificationProvider\n .updateVerificationMethod(this.method.id)\n .pipe(\n tap((method: IFsVerificationMethod) => {\n this._dialogRef.close(method);\n })\n );\n };\n\n private _setActiveMethod(): void {\n this.method = this._dialogData?.method;\n }\n\n private _initMethods(): void {\n this.methods$ = this._verificationProvider\n .methods()\n .pipe(\n map((methods) => {\n return methods\n .reduce((acc, method) => {\n if (!acc[method.type]) {\n acc[method.type] = [];\n }\n\n acc[method.type].push(method);\n\n return acc;\n }, {});\n }),\n shareReplay(1),\n );\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n Verification Methods\n </h1>\n <form fsForm [submit]=\"setVerificationMethod\" [dirtySubmitButton]=\"false\">\n <mat-dialog-content>\n <ng-container *fsSkeleton=\"methods$ | async as methods\">\n <fs-radio-group [(ngModel)]=\"method\" name=\"method\" [compareWith]=\"compareWith\">\n <ng-container *ngFor=\"let methodMap of methods | keyvalue\">\n <div class=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n textsms\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Text Message</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following mobile number\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n mail\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Email</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following email\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"verificationMethodType.App\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n phone_iphone\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Authenticator App</div>\n <div class=\"method-subtitle\">\n Verification code generated by an authenticator app\n </div>\n </div>\n </div>\n </ng-container> \n </ng-container>\n\n <mat-radio-button class=\"method-item\" *ngFor=\"let method of methodMap.value\" [value]=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n {{ method.phoneNumber }}\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n {{ method.email }}\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.App\">\n Authenticator App\n </ng-container> \n </ng-container>\n </mat-radio-button>\n </div>\n </ng-container>\n </fs-radio-group>\n </ng-container>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"actions\">\n <ng-container *ngIf=\"methods$ | async\">\n <button mat-button type=\"submit\" color=\"primary\">Next</button>\n </ng-container>\n <button mat-button type=\"button\" [mat-dialog-close]=\"null\">Cancel</button>\n </div>\n </mat-dialog-actions>\n </form>\n</fs-dialog>\n","import { Component, ChangeDetectionStrategy, Output, EventEmitter, Input, ViewChild } from '@angular/core';\n\nimport { CodeInputComponent as AngularCodeInputComponent } from 'angular-code-input';\n\n\n@Component({\n selector: 'app-code-input',\n templateUrl: './code-input.component.html',\n styleUrls: ['./code-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodeInputComponent {\n\n @ViewChild(AngularCodeInputComponent)\n public angularCodeInputComponent: AngularCodeInputComponent;\n\n @Input() public codeLength: number;\n @Input() public code;\n\n @Output() public codeCompleted = new EventEmitter();\n @Output() public codeChanged = new EventEmitter();\n \n public focus(): void {\n this.angularCodeInputComponent.focusOnField(0);\n }\n}","<code-input\r\n [initialFocusField]=\"0\"\r\n [codeLength]=\"6\"\r\n [code]=\"code\"\r\n (codeCompleted)=\"codeCompleted.emit($event)\"\r\n (codeChanged)=\"codeChanged.emit($event)\">\r\n</code-input>","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlContainer, NgForm } from '@angular/forms';\nimport { CodeInputComponent } from '../../../../modules/code-input/components/code-input';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\n\nimport { IFsVerificationMethod } from '../../../../interfaces/verification-method.interface';\n\n\n@Component({\n selector: 'fs-2fa-verification-code',\n templateUrl: './2fa-verification-code.component.html',\n styleUrls: [\n './2fa-verification-code.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [\n {\n provide: ControlContainer,\n useExisting: NgForm,\n },\n ],\n})\nexport class Fs2faVerificationCodeComponent {\n\n @ViewChild(CodeInputComponent)\n public codeInputComponent: CodeInputComponent;\n\n @Input()\n public method: IFsVerificationMethod;\n\n @Input()\n public code;\n\n @Output()\n public codeChanged = new EventEmitter<string>();\n\n @Output()\n public codeCompleted = new EventEmitter<void>();\n\n public FsVerificationMethodType = FsVerificationMethodType;\n\n public codeChange(code): void {\n this.code = code;\n this.codeChanged.emit(this.code);\n }\n\n public focus(): void {\n this.codeInputComponent.focus();\n }\n\n}\n","<ng-container *ngIf=\"method.phoneNumber && method.type === FsVerificationMethodType.Sms\">\n <p class=\"description\">\n A text message with a verification code was just\n sent to <span style=\"white-space: nowrap;\">{{ method.phoneNumber }}</span> to verify it's you.\n </p>\n\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"method.type === FsVerificationMethodType.Email\">\n <p class=\"description\">\n A email with a verification code was just sent to {{ method.email }} to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"method.type === FsVerificationMethodType.App\">\n <p class=\"description\">\n Enter the verification code generated by your 2 factor authenticator app to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n\n<ng-template #input> \n <app-code-input \n [code]=\"code\"\n (codeChanged)=\"codeChange($event)\"\n (codeCompleted)=\"codeCompleted.emit()\">\n </app-code-input> \n</ng-template> ","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { FsDialog } from '@firestitch/dialog';\n\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport { IFsVerificationMethod } from '../../../../interfaces/verification-method.interface';\nimport { Fs2faVerificationMethodsComponent } from '../2fa-verification-methods/2fa-verification-methods.component';\nimport { Subject } from 'rxjs';\nimport { FS_2FA_VERIFICATION_PROVIDER } from '../../../../tokens/verification.token';\nimport { IFsVerificationProvider } from '../../../../interfaces/verification-provider.interface';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { Fs2faVerificationCodeComponent } from '../2fa-verification-code/2fa-verification-code.component';\n\n\n@Component({\n selector: 'fs-2fa-verification',\n templateUrl: './2fa-verification.component.html',\n styleUrls: [\n './2fa-verification.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Fs2faVerificationComponent implements OnDestroy, AfterViewInit, OnInit {\n\n @ViewChild(Fs2faVerificationCodeComponent)\n public verificationCodeComponent: Fs2faVerificationCodeComponent;\n\n @Input()\n public method: IFsVerificationMethod;\n\n @Output()\n public verified = new EventEmitter<unknown>();\n\n @Output()\n public codeChanged = new EventEmitter<unknown>();\n\n @Output()\n public codeCompleted = new EventEmitter<unknown>();\n\n public resendInProgress = false;\n public code = '';\n public trustedDevice = true;\n public FsVerificationMethodType = FsVerificationMethodType;\n\n private _destroy$ = new Subject<void>();\n\n constructor(\n @Inject(FS_2FA_VERIFICATION_PROVIDER)\n public verificationProvider: IFsVerificationProvider,\n private _cdRef: ChangeDetectorRef,\n private _dialog: FsDialog,\n ) {\n }\n\n public ngOnInit(): void {\n this.codeChanged\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((code: string) => {\n this.code = code;\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public verify() {\n this.verificationProvider\n .verify(this.code, this.trustedDevice)\n .subscribe((response) => {\n this.verified.emit(response);\n });\n };\n\n public ngAfterViewInit(): void {\n this.verificationCodeComponent.focus(); \n }\n\n public resend(): void {\n this.resendInProgress = true;\n this.code = '';\n\n this.verificationProvider\n .resend()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.resendInProgress = false; \n this.verificationCodeComponent.focus(); \n this._cdRef.markForCheck();\n })\n }\n\n public showVerificationMethods(): void {\n this._dialog.open(\n Fs2faVerificationMethodsComponent,\n {\n data: {\n method: this.method,\n }\n }\n )\n .afterClosed()\n .pipe(\n filter((method) => !!method),\n )\n .subscribe((method) => {\n this.method = method;\n this.code = '';\n\n this._cdRef.markForCheck();\n\n setTimeout(() => {\n this.verificationCodeComponent.focus();\n });\n });\n }\n\n}\n","<div class=\"code-container\">\n <fs-2fa-verification-code\n [method]=\"method\"\n [code]=\"code\"\n (codeChanged)=\"codeChanged.emit($event)\"\n (codeCompleted)=\"codeCompleted.emit()\">\n </fs-2fa-verification-code>\n</div>\n\n<div class=\"additional\">\n <mat-checkbox\n name=\"trust-device\"\n [(ngModel)]=\"trustedDevice\">\n Trust this device\n </mat-checkbox>\n\n <span class=\"resend-code-btn\">\n <ng-container *ngIf=\"!resendInProgress else sending\">\n <a (click)=\"resend()\">\n Resend Code\n </a>\n </ng-container>\n <ng-template #sending>\n <mat-spinner [diameter]=\"12\"></mat-spinner> Sending\n </ng-template>\n </span>\n</div>","import { NgModule } from '@angular/core';\n\nimport { CodeInputModule as AngularCodeInputModule } from 'angular-code-input';\n\nimport { CodeInputComponent } from './components/code-input';\n\n\n@NgModule({\n imports: [\n AngularCodeInputModule,\n ],\n declarations: [\n CodeInputComponent,\n ],\n exports: [\n CodeInputComponent,\n ],\n})\nexport class CodeInputModule {\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { FsFormModule } from '@firestitch/form';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsRadioGroupModule } from '@firestitch/radiogroup';\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport { Fs2faVerificationComponent } from './components/2fa-verification/2fa-verification.component';\nimport { Fs2faVerificationCodeComponent } from './components/2fa-verification-code/2fa-verification-code.component';\nimport { Fs2faVerificationMethodsComponent } from './components/2fa-verification-methods/2fa-verification-methods.component';\n\nimport { CodeInputModule } from '../code-input';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n\n FsFormModule,\n FsRadioGroupModule,\n FsDialogModule,\n\n CodeInputModule,\n MatCheckboxModule,\n MatProgressSpinnerModule,\n FsSkeletonModule,\n FsSkeletonModule,\n MatIconModule,\n MatRadioModule,\n ],\n declarations: [\n Fs2faVerificationComponent,\n Fs2faVerificationCodeComponent,\n Fs2faVerificationMethodsComponent,\n ],\n exports: [\n Fs2faVerificationComponent,\n ],\n providers: [],\n})\nexport class Fs2faVerificationModule {}\n","import {\n Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef, OnInit, ViewChild,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsFormDirective } from '@firestitch/form';\nimport { FsMessage } from '@firestitch/message';\n\nimport { tap } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppComponent implements OnInit {\n\n @ViewChild(FsFormDirective)\n public form: FsFormDirective;\n\n public twoFactorManageService: TwoFactorManageService;\n public mode: 'qr-code' | 'code-input' = 'qr-code';\n public accountId;\n public qrCodeUrl;\n public code;\n public default;\n public appType: 'google' | 'authy';\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<AppComponent>,\n private _cdRef: ChangeDetectorRef,\n private _message: FsMessage,\n ) {}\n\n public ngOnInit(): void {\n this.twoFactorManageService = this._data.twoFactorManageService;\n this.accountId = this._data.accountId;\n this.default = !this.twoFactorManageService.hasVerificationMethods;\n }\n\n public appTypeGoogle(): void {\n this.appTypeSelect('google');\n }\n\n public appTypeAuthy(): void {\n this.appTypeSelect('authy');\n }\n\n public appTypeSelect(appType): void {\n this.appType = appType;\n this.twoFactorManageService.verificationMethodCreate({\n type: 'app',\n default: this.default,\n })\n .subscribe((response) => {\n this.qrCodeUrl = response.qrCodeUrl;\n this._cdRef.markForCheck();\n });\n }\n\n public codeCompleted(): void {\n this.form.triggerSubmit();\n }\n\n public codeChanged(code): void {\n this.code = code;\n this.form.dirty();\n }\n\n public next(): void {\n this.mode = 'code-input';\n }\n\n public verify = () => {\n return this.twoFactorManageService.verificationMethodVerify(this.code)\n .pipe(\n tap(() => {\n this._message.success('Created app authenticator verification method');\n this._dialogRef.close(true);\n }),\n );\n };\n\n}\n","<form fsForm [submit]=\"verify\">\n <fs-dialog>\n <h1 mat-dialog-title>Authenticator App Setup</h1>\n <mat-dialog-content>\n\n <div *ngIf=\"mode === 'qr-code'\" class=\"qr-code\">\n <ng-container *ngIf=\"appType\">\n <ol>\n <li>\n <ng-container *ngIf=\"appType === 'authy'\">\n Install the Authy Authenticator App from the <a href=\"https://apps.apple.com/us/app/authy/id494168017\" target=\"_blank\">App Store</a> or\n the <a href=\"https://play.google.com/store/apps/details?id=com.authy.authy\" target=\"_blank\">Google Play Store</a>.\n </ng-container>\n\n <ng-container *ngIf=\"appType === 'google'\">\n Install the Google Authenticator App from the <a href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\" target=\"_blank\">App Store</a> or\n the <a href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_US&gl=US\" target=\"_blank\">Google Play Store</a>.\n </ng-container>\n </li>\n <ng-container *ngIf=\"appType === 'authy'\">\n <li>\n Open the Authy app and select <b>Add Account</b>.\n </li>\n <li>\n Select <b>Scan QR Code</b> and scan the QR code below.\n </li>\n </ng-container> \n <ng-container *ngIf=\"appType === 'google'\">\n <li>\n Open the Google Authentictor app and click the <b>Plus icon</b> in the lower right corner.\n </li>\n <li>\n Select <b>Scan a QR code</b> and scan the QR code below.\n </li>\n </ng-container>\n </ol>\n\n <qr-code \n *fsSkeleton=\"qrCodeUrl\"\n [value]=\"qrCodeUrl\"\n size=\"200\"\n errorCorrectionLevel=\"H\"\n [margin]=\"0\">\n </qr-code> \n </ng-container>\n\n <div class=\"app-types\" *ngIf=\"!appType\">\n <p>Select the Authenticator App you prefer</p>\n\n <div class=\"row\">\n <span>\n <a (click)=\"appTypeAuthy()\">\n <svg width=\"50\" height=\"50\" viewBox=\"0 0 256 256\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid\"><path d=\"M256 127.998C256 198.696 198.694 256 127.997 256 57.304 256 0 198.696 0 127.998 0 57.305 57.304 0 127.997 0 198.694 0 256 57.305 256 127.998z\" fill=\"#EC1C24\"/><path d=\"M117.024 100.89l30.691 30.68c4.43 4.436 11.623 4.436 16.064 0 4.431-4.435 4.441-11.622 0-16.058L133.086 84.82C111.125 62.854 75.631 62.5 53.204 83.704a9.536 9.536 0 0 0-.605.548c-.098.098-.178.202-.275.29-.1.096-.202.182-.297.278-.194.193-.371.396-.54.597-21.215 22.437-20.85 57.932 1.113 79.897L83.292 196c4.44 4.433 11.623 4.433 16.062 0 4.442-4.437 4.442-11.633.011-16.06l-30.693-30.691c-13.398-13.393-13.488-35.129-.278-48.637 13.506-13.21 35.23-13.114 48.63.279zm39.612-40.873c-4.435 4.437-4.435 11.623.012 16.059l30.681 30.693c13.39 13.392 13.477 35.125.268 48.636-13.51 13.2-35.227 13.112-48.623-.282l-30.692-30.689c-4.438-4.437-11.633-4.437-16.066 0-4.443 4.433-4.443 11.642 0 16.065l30.682 30.694c21.968 21.965 57.458 22.322 79.889 1.116.208-.184.404-.355.61-.549.094-.095.182-.192.273-.29.1-.095.197-.183.29-.289.197-.183.365-.384.54-.594 21.215-22.428 20.86-57.911-1.102-79.889l-30.692-30.682c-4.436-4.443-11.638-4.443-16.07.001z\" fill=\"#FFF\"/></svg>\n </a>\n Authy\n </span>\n \n <span>\n <a (click)=\"appTypeGoogle()\"> \n <svg width=\"50\" height=\"50\" viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"m457.07 45.92c73.67-8.62 149.41.22 218.93 26.24 62.75 23.47 120.59 60.41 167.72 108.09-40.31 39.97-80.25 80.31-120.51 120.33-25.95-25.45-56.19-46.65-89.47-61.37-44.22-19.82-93.39-28.54-141.72-25.2-54.6 3.52-108.11 22.49-152.63 54.3-55.24 38.95-96.61 97.22-114.8 162.35-13.64 47.78-14.77 98.97-3.76 147.4 8.85 39.61 26.09 77.29 50.05 110.03 22.24 30.45 50.3 56.64 82.22 76.71 36.79 23.24 78.76 38.22 121.96 43.48 37.02 4.65 74.9 2.23 111.05-7 3.97-1.91 6.24 2.61 8.73 4.86 40.74 40.95 81.68 81.7 122.43 122.63-73.31 35.6-155.99 51.86-237.3 46.12-68.05-4.51-135.07-24.08-194.71-57.18-24.87-13.6-48.23-29.82-70.33-47.54-17.46-14.81-34.71-30.01-49.72-47.35-25.41-27.39-47.21-58.11-65.17-90.87-4-7.72-8.64-15.12-11.9-23.2-4.47-9.05-8.37-18.36-12.25-27.67-4.96-13.27-10.26-26.44-13.88-40.15-.43-1.81-1.53-3.33-2.52-4.85-8.3-28.66-12.95-58.33-15.44-88.04-2.62-37.36-1.33-75.05 4.78-112.03 12.18-75.48 43.41-147.74 89.86-208.44 30.12-39.5 66.53-74.21 107.46-102.35 62.44-43.11 135.53-70.69 210.92-79.3m49.18 50.48c-5.7.99-10.96 3.76-15.38 7.43-10.4 8.93-14.14 24.81-8.17 37.28 6.33 15.02 25.16 23.1 40.36 17 15.43-5.24 24.78-23.51 19.74-39.06-4.1-15.43-20.92-25.79-36.55-22.65m-267.96 111.99c-5.33.28-10.59 1.92-15.16 4.68-11.47 7.03-17.88 21.74-14.36 34.86 3.09 14.08 16.78 25.06 31.26 24.61 15.03.41 29.08-11.39 31.54-26.17 2.24-10.33-1.61-21.55-9.14-28.85-6.24-6.33-15.3-9.62-24.14-9.13m-115.96 272c-6.62 1.23-12.84 4.58-17.54 9.4-9.45 9.72-11.72 25.57-5.02 37.42 7.16 13.96 25.48 20.86 39.98 14.62 15.02-5.51 23.99-23.42 19.06-38.71-4.04-15.41-20.86-25.96-36.48-22.73m111.98 272.05c-11.49 1.95-21.48 10.72-24.84 21.88-3.87 11.63-.13 25.16 8.9 33.36 6.15 5.48 14.4 8.7 22.67 8.32 11.16-.25 21.98-6.87 27.12-16.8 4.93-8.83 5.15-20.02.71-29.1-5.82-12.78-20.81-20.33-34.56-17.66m272.06 112.03c-11.76 2.02-21.92 11.07-25.09 22.6-3.87 12.57 1.13 27.25 11.91 34.79 7.86 5.79 18.42 7.67 27.77 4.86 9.61-2.77 17.7-10.24 21.07-19.68 4.97-12.74.36-28.32-10.58-36.46-7.02-5.45-16.35-7.67-25.08-6.11z\" fill=\"#a0a0a0\"/>\n <g fill=\"#c1c1c1\">\n <path d=\"m506.25 96.4c15.63-3.14 32.45 7.22 36.55 22.65 5.04 15.55-4.31 33.82-19.74 39.06-15.2 6.1-34.03-1.98-40.36-17-5.97-12.47-2.23-28.35 8.17-37.28 4.42-3.67 9.68-6.44 15.38-7.43z\"/>\n <path d=\"m122.33 480.39c15.62-3.23 32.44 7.32 36.48 22.73 4.93 15.29-4.04 33.2-19.06 38.71-14.5 6.24-32.82-.66-39.98-14.62-6.7-11.85-4.43-27.7 5.02-37.42 4.7-4.82 10.92-8.17 17.54-9.4z\"/>\n </g>\n <path d=\"m843.72 180.25.11-.11c24.64 25.12 46.96 52.6 65.61 82.47 36.01 57.16 59.38 122.22 67.87 189.25 5.67 44.88 5.27 90.6-2.05 135.27-12.7 80.01-46.94 156.41-97.9 219.36-42.3 52.48-95.87 96.04-156.41 125.76l-.63-.26c-1.01-1.1-2.03-2.16-3.05-3.22-40.75-40.93-81.69-81.68-122.43-122.63-2.49-2.25-4.76-6.77-8.73-4.86-36.15 9.23-74.03 11.65-111.05 7-43.2-5.26-85.17-20.24-121.96-43.48-31.92-20.07-59.98-46.26-82.22-76.71-23.96-32.74-41.2-70.42-50.05-110.03-11.01-48.43-9.88-99.62 3.76-147.4 18.19-65.13 59.56-123.4 114.8-162.35 44.52-31.81 98.03-50.78 152.63-54.3 48.33-3.34 97.5 5.38 141.72 25.2 33.28 14.72 63.52 35.92 89.47 61.37 40.26-40.02 80.2-80.36 120.51-120.33m-351.75 183.97c-21.23 2.85-41.89 10.28-59.88 21.94-23.08 14.45-41.76 35.58-53.9 59.91-14.58 29.2-18.64 63.21-12.5 95.17 3.93 19.85 12.03 38.88 23.56 55.51 7.93 11.52 17.65 21.66 27.65 31.38 57.33 57.41 114.61 114.86 171.99 172.21 49.09-13.07 94.67-38.94 131.05-74.4 45.11-43.34 75.66-101.44 86.31-163.06.24-1.04.22-2.91 1.85-2.6 29.63.04 59.26-.01 88.9.05 19.04-.3 36.87-14.77 40.76-33.46.22-1.21 0-2.32-.67-3.35 1.22-5.71 2.08-11.58 1.38-17.43l-.24.4c-2.05-20.34-20.84-37.12-41.25-37.17-80.64-.07-161.28-.01-241.93-.07-6.44-22.08-18.5-42.33-34.03-59.23-25.8-27.5-62.26-45.01-100.02-46.82-9.68.02-19.44-.54-29.03 1.02m286.37 388.31c-12.64 2.06-23.37 12.59-25.7 25.18-1.48 8.14-.14 17.02 4.73 23.85 5.76 9.2 16.8 14.76 27.61 14.25 8.32.03 16.28-3.95 22.16-9.66 4.87-5.6 8.45-12.67 8.67-20.2.86-11.37-5.06-23.1-14.87-28.96-6.52-4.46-14.89-5.75-22.6-4.46z\" fill=\"#686868\"/>\n <path d=\"m238.29 208.39c8.84-.49 17.9 2.8 24.14 9.13 7.53 7.3 11.38 18.52 9.14 28.85-2.46 14.78-16.51 26.58-31.54 26.17-14.48.45-28.17-10.53-31.26-24.61-3.52-13.12 2.89-27.83 14.36-34.86 4.57-2.76 9.83-4.4 15.16-4.68z\" fill=\"#c3c3c3\"/>\n <path d=\"m491.97 364.22c9.59-1.56 19.35-1 29.03-1.02 37.76 1.81 74.22 19.32 100.02 46.82 15.53 16.9 27.59 37.15 34.03 59.23-47.67-.01-95.35-.01-143.03-.01-12.19-.11-24.23 5.42-32.21 14.61-6.01 6.85-9.74 15.65-10.44 24.74-1.19 14.17 5.36 28.7 16.69 37.28 7.62 5.91 17.28 9 26.92 8.8 126.69-.04 253.39-.06 380.08.03 4.76.04 9.59-.15 14.2-1.48 14.21-3.82 26.02-15.47 29.83-29.7.67 1.03.89 2.14.67 3.35-3.89 18.69-21.72 33.16-40.76 33.46-29.64-.06-59.27-.01-88.9-.05-1.63-.31-1.61 1.56-1.85 2.6-10.65 61.62-41.2 119.72-86.31 163.06-36.38 35.46-81.96 61.33-131.05 74.4-57.38-57.35-114.66-114.8-171.99-172.21-10-9.72-19.72-19.86-27.65-31.38-11.53-16.63-19.63-35.66-23.56-55.51-6.14-31.96-2.08-65.97 12.5-95.17 12.14-24.33 30.82-45.46 53.9-59.91 17.99-11.66 38.65-19.09 59.88-21.94z\" fill=\"#474747\"/>\n <g fill=\"#bfbfbf\">\n <path d=\"m479.81 483.85c7.98-9.19 20.02-14.72 32.21-14.61 47.68 0 95.36 0 143.03.01 80.65.06 161.29 0 241.93.07 20.41.05 39.2 16.83 41.25 37.17-.19.33-.58.97-.78 1.29-3.68-18.51-21.57-33.16-40.47-33.05-124.97.1-249.94.12-374.91.17-7.73.13-15.74-.8-23.15 1.96-9.06 2.84-16.73 9.1-22.27 16.7-3.34 4.55-4.39 10.24-7.28 15.03.7-9.09 4.43-17.89 10.44-24.74z\"/>\n <path d=\"m234.31 752.44c13.75-2.67 28.74 4.88 34.56 17.66 4.44 9.08 4.22 20.27-.71 29.1-5.14 9.93-15.96 16.55-27.12 16.8-8.27.38-16.52-2.84-22.67-8.32-9.03-8.2-12.77-21.73-8.9-33.36 3.36-11.16 13.35-19.93 24.84-21.88z\"/>\n </g>\n <path d=\"m498.92 476.86c7.41-2.76 15.42-1.83 23.15-1.96 124.97-.05 249.94-.07 374.91-.17 18.9-.11 36.79 14.54 40.47 33.05.2-.32.59-.96.78-1.29l.24-.4c.7 5.85-.16 11.72-1.38 17.43-3.81 14.23-15.62 25.88-29.83 29.7-4.61 1.33-9.44 1.52-14.2 1.48-126.69-.09-253.39-.07-380.08-.03-9.64.2-19.3-2.89-26.92-8.8-11.33-8.58-17.88-23.11-16.69-37.28 2.89-4.79 3.94-10.48 7.28-15.03 5.54-7.6 13.21-13.86 22.27-16.7z\" fill=\"#b0b0b0\"/>\n <path d=\"m59.49 636.08c.99 1.52 2.09 3.04 2.52 4.85 3.62 13.71 8.92 26.88 13.88 40.15 3.88 9.31 7.78 18.62 12.25 27.67 3.26 8.08 7.9 15.48 11.9 23.2 17.96 32.76 39.76 63.48 65.17 90.87 15.01 17.34 32.26 32.54 49.72 47.35 22.1 17.72 45.46 33.94 70.33 47.54 59.64 33.1 126.66 52.67 194.71 57.18 81.31 5.74 163.99-10.52 237.3-46.12 1.02 1.06 2.04 2.12 3.05 3.22l.03.61c-42.32 21.03-87.88 35.53-134.56 42.91-56.91 8.9-115.46 7.49-171.82-4.5-67.89-14.35-132.42-44.21-187.42-86.51-63.52-48.63-114.32-113.73-145.86-187.27-8.42-19.87-15.93-40.22-21.2-61.15z\" fill=\"#939393\"/>\n <path d=\"m778.34 752.53c7.71-1.29 16.08 0 22.6 4.46 9.81 5.86 15.73 17.59 14.87 28.96-.22 7.53-3.8 14.6-8.67 20.2-5.88 5.71-13.84 9.69-22.16 9.66-10.81.51-21.85-5.05-27.61-14.25-4.87-6.83-6.21-15.71-4.73-23.85 2.33-12.59 13.06-23.12 25.7-25.18z\" fill=\"#767676\"/>\n <path d=\"m506.37 864.47c8.73-1.56 18.06.66 25.08 6.11 10.94 8.14 15.55 23.72 10.58 36.46-3.37 9.44-11.46 16.91-21.07 19.68-9.35 2.81-19.91.93-27.77-4.86-10.78-7.54-15.78-22.22-11.91-34.79 3.17-11.53 13.33-20.58 25.09-22.6z\" fill=\"#bebebe\"/>\n </svg>\n </a>\n Google Authenticator\n </span>\n </div>\n\n <mat-checkbox \n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default 2-step verification method\n </mat-checkbox>\n </div>\n \n </div>\n\n <div *ngIf=\"mode === 'code-input'\" class=\"code-input\">\n <div>\n Enter the 6-digit code you see in the App.\n </div>\n\n <app-code-input\n [codeLength]=\"6\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">\n </app-code-input>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <ng-container *ngIf=\"appType\">\n <button\n *ngIf=\"mode === 'qr-code'\"\n type=\"button\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Next\n </button>\n <button\n *ngIf=\"mode === 'code-input'\"\n type=\"submit\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Verify\n </button> \n </ng-container>\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n","import {\n Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsFormDirective } from '@firestitch/form';\n\nimport { of } from 'rxjs';\nimport { switchMap, tap } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './email.component.html',\n styleUrls: ['./email.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailComponent {\n\n @ViewChild(FsFormDirective, { static: false })\n public form: FsFormDirective;\n\n public email;\n public code;\n public default;\n public verificationMethod = null;\n public twoFactorManageService: TwoFactorManageService;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<EmailComponent>,\n private _cdRef: ChangeDetectorRef,\n private _message: FsMessage,\n ) {\n this.twoFactorManageService = _data.twoFactorManageService;\n this.default = !this.twoFactorManageService.hasVerificationMethods;\n }\n\n public resend(): void {\n this.twoFactorManageService.verificationMethodResend()\n .subscribe(() => {\n this._message.success('Resent verification code');\n });\n }\n\n public submit = () => {\n return of(true)\n .pipe(\n switchMap(() => {\n return this.verificationMethod ?\n this.twoFactorManageService.verificationMethodVerify(this.code)\n .pipe(\n tap((verificationMethod) => {\n this._message.success('Created email verification method');\n this._dialogRef.close(verificationMethod);\n }),\n ) :\n this.twoFactorManageService.verificationMethodCreate({\n type: 'email',\n email: this.email,\n default: this.default,\n })\n .pipe(\n tap((verificationMethod) => {\n this.verificationMethod = verificationMethod;\n this.form.clear();\n this._cdRef.markForCheck();\n }),\n );\n }),\n );\n };\n\n public codeCompleted(): void {\n this.form.triggerSubmit();\n }\n\n public codeChanged(code): void {\n this.code = code;\n }\n\n}\n","<form fsForm [submit]=\"submit\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Email Setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <p>The app just sent you an email with a verification code.</p>\n \n <app-code-input \n [code]=\"code\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">\n </app-code-input> \n\n <div>Did't get the code? <a (click)=\"resend()\">Resend Code</a></div>\n </ng-container>\n\n <ng-template #notVerificationMethod>\n <p>The app will only use this email for verifying your account security. </p>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input\n matInput\n [required]=\"true\"\n [(ngModel)]=\"email\"\n name=\"email\">\n </mat-form-field>\n <mat-checkbox \n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default 2-step verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n","import {\n Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsFormDirective } from '@firestitch/form';\n\nimport { of } from 'rxjs';\nimport { switchMap, tap } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './number.component.html',\n styleUrls: ['./number.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumberComponent {\n\n @ViewChild(FsFormDirective, { static: false })\n public form: FsFormDirective;\n\n public phone;\n public code;\n public default;\n public verificationMethod = null;\n public defaultCountry;\n public twoFactorManageService: TwoFactorManageService;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<NumberComponent>,\n private _cdRef: ChangeDetectorRef,\n private _message: FsMessage,\n ) {\n this.twoFactorManageService = _data.twoFactorManageService;\n this.defaultCountry = _data.defaultCountry;\n this.default = !this.twoFactorManageService.hasVerificationMethods;\n }\n\n public resend(): void {\n this.twoFactorManageService.verificationMethodResend()\n .subscribe(() => {\n this._message.success('Resent verification code');\n });\n }\n\n public submit = () => {\n return of(true)\n .pipe(\n switchMap(() => {\n return this.verificationMethod ?\n this.twoFactorManageService.verificationMethodVerify(this.code)\n .pipe(\n tap((verificationMethod) => {\n this._message.success('Created text message verification method');\n this._dialogRef.close(verificationMethod);\n }),\n ) :\n this.twoFactorManageService.verificationMethodCreate({\n type: 'sms',\n phoneNumber: this.phone.number,\n phoneCode: this.phone.countryCode,\n phoneCountry: this.phone.isoCode,\n default: this.default,\n }).pipe(\n tap((verificationMethod) => {\n this.verificationMethod = verificationMethod;\n this.form.clear();\n this._cdRef.markForCheck();\n }),\n );\n }),\n );\n };\n\n public codeCompleted(): void {\n this.form.triggerSubmit();\n }\n\n public codeChanged(code): void {\n this.code = code;\n }\n\n}\n","<form fsForm [submit]=\"submit\" autocomplete=\"off\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Text Message Setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <p>The app just sent you a text message with a verification code.</p>\n\n <app-code-input \n [code]=\"code\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">\n </app-code-input> \n \n <div>Did't get the code? <a (click)=\"resend()\">Resend Code</a></div>\n </ng-container>\n\n <ng-template #notVerificationMethod>\n <p>The app will only use this number for verifying your account security. Message and data rates may apply by your cell phone provider.</p>\n <mat-form-field>\n <mat-label>Phone number</mat-label>\n <fs-phone-field\n [(ngModel)]=\"phone\"\n [country]=\"defaultCountry\"\n name=\"phone\"\n autocomplete=\"off\"\n [required]=\"true\">\n </fs-phone-field>\n </mat-form-field>\n <mat-checkbox \n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default 2-step verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { AppComponent } from '../components/app';\nimport { EmailComponent } from '../components/email';\nimport { NumberComponent } from '../components/number';\n\n\n@Injectable()\nexport class TwoFactorManageService implements OnDestroy {\n\n private _destroy$ = new Subject();\n\n private _verificationMethodFetch: () => Observable<any[]>;\n private _verificationMethodCreate: (verificationMethod) => Observable<any>;\n private _verificationMethodDelete: (verificationMethod) => Observable<any>;\n private _verificationMethodVerify: (verificationMethod) => Observable<any>;\n private _verificationMethodResend: () => Observable<any>;\n private _accountVerify: () => Observable<any[]>;\n private _verificationMethods$ = new BehaviorSubject<any[]>([]);\n\n constructor(\n private _dialog: MatDialog,\n ) {}\n\n public get verificationMethods$() {\n return this._verificationMethods$\n .pipe(\n takeUntil(this._destroy$),\n );\n }\n \n public get verificationMethods() {\n return this._verificationMethods$.getValue();\n }\n\n public get hasVerificationMethods(): boolean {\n return !!this._verificationMethods$.getValue().length;\n }\n \n public getVerificationMethods(type) {\n return this.verificationMethods\n .filter((verificationMethod) => {\n return verificationMethod.type === type;\n });\n }\n \n public hasVerificationMethod(type) {\n return this.verificationMethods\n .some((verificationMethod) => {\n return verificationMethod.type === type;\n });\n }\n\n public registerVerificationMethodResend(value) {\n this._verificationMethodResend = value;\n }\n\n public registerVerificationMethodFetch(value) {\n this._verificationMethodFetch = value;\n }\n\n public registerVerificationMethodDelete(value) {\n this._verificationMethodDelete = value;\n }\n\n public registerVerificationMethodCreate(value) {\n this._verificationMethodCreate = value;\n }\n\n public registerVerificationMethodVerify(value) {\n this._verificationMethodVerify = value;\n }\n\n public registerAccountVerify(value) {\n this._accountVerify = value;\n }\n\n public verificationMethodDelete(verificationMethod): Observable<any> {\n return this._verificationMethodDelete(verificationMethod)\n .pipe(\n tap(() => {\n this.verificationMethodFetch();\n }),\n );\n }\n\n public verificationMethodVerify(verificationMethod): Observable<any> {\n return this._verificationMethodVerify(verificationMethod)\n .pipe(\n tap(() => {\n this.verificationMethodFetch();\n }),\n );\n }\n\n public verificationMethodCreate(verificationMethod): Observable<any> {\n return this._verificationMethodCreate(verificationMethod);\n }\n\n public verificationMethodResend(): Observable<any> {\n return this._verificationMethodResend();\n }\n\n public verificationMethodFetch() {\n this._verificationMethodFetch()\n .subscribe((verificationMethods) => {\n this._verificationMethods$.next(verificationMethods);\n });\n }\n\n public accountVerify(): Observable<any> {\n return this._accountVerify();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public addSms(defaultCountry): Observable<any>{\n return this.accountVerify()\n .pipe(\n switchMap(() => this._dialog.open(NumberComponent, {\n data: {\n defaultCountry,\n twoFactorManageService: this,\n },\n })\n .afterClosed(),\n ),\n tap(() => {\n this.verificationMethodFetch();\n }),\n takeUntil(this._destroy$),\n );\n }\n\n public addEmail(): Observable<any>{\n return this.accountVerify()\n .pipe(\n switchMap(() => this._dialog.open(EmailComponent, {\n data: { twoFactorManageService: this },\n })\n .afterClosed(),\n ),\n tap(() => {\n this.verificationMethodFetch();\n }),\n takeUntil(this._destroy$),\n );\n }\n\n public addApp(): Observable<any>{\n return this.accountVerify()\n .pipe(\n switchMap(() => this._dialog.open(AppComponent, {\n data: { twoFactorManageService: this },\n })\n .afterClosed(),\n ),\n tap(() => {\n this.verificationMethodFetch();\n }),\n takeUntil(this._destroy$),\n );\n }\n}\n","import {\n Component, ChangeDetectionStrategy,\n} from '@angular/core';\n\n\n@Component({\n selector: 'app-defaulted',\n templateUrl: './defaulted.component.html',\n styleUrls: ['./defaulted.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultedComponent {\n\n}\n","<span>Default</span>","import {\n Component, ChangeDetectionStrategy, OnInit, Input, Output, EventEmitter,\n} from '@angular/core';\n\nimport { FsListConfig } from '@firestitch/list';\nimport { FsPrompt } from '@firestitch/prompt';\nimport { IFsVerificationMethod } from '../../../../interfaces/verification-method.interface';\n\nimport { map, switchMap } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n selector: 'app-verification-methods',\n templateUrl: './verification-methods.component.html',\n styleUrls: ['./verification-methods.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VerificationMethodsComponent implements OnInit {\n\n @Input() public twoFactorManageService: TwoFactorManageService;\n @Input() public type;\n \n @Output() public deleted = new EventEmitter<IFsVerificationMethod>();\n\n public listConfig: FsListConfig;\n public textMessageAdd: () => void;\n\n constructor(\n private _prompt: FsPrompt,\n ) {\n }\n\n public ngOnInit(): void {\n this.listConfig = {\n rowActions: [\n {\n click: (verificationMethod) => {\n this._prompt.confirm({\n title: 'Confirm',\n template: 'Would you like to delete this verification method?',\n })\n .pipe(\n switchMap(() => this.twoFactorManageService\n .verificationMethodDelete(verificationMethod)),\n )\n .subscribe(() => {\n this.deleted.emit(verificationMethod);\n });\n },\n label: 'Delete',\n },\n ],\n fetch: () => {\n return this.twoFactorManageService.verificationMethods$\n .pipe(\n map((verificationMethods) => ({\n data: verificationMethods.filter((verificationMethod) => {\n return verificationMethod.type === this.type;\n }),\n }),\n ),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"listConfig\">\n <fs-list-column class=\"col-name\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"row\">\n <ng-container *ngIf=\"row.type === 'sms'\">\n <fs-country [code]=\"row.phoneCountry\" [showName]=\"false\"></fs-country> {{row.phoneNumber | fsPhone}}\n </ng-container>\n\n <ng-container *ngIf=\"row.type === 'email'\">\n {{row.email}}\n </ng-container>\n \n <app-defaulted *ngIf=\"row.default\"></app-defaulted>\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>","import {\n Component, Inject, ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FsMessage } from '@firestitch/message';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './numbers.component.html',\n styleUrls: ['./numbers.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumbersComponent {\n\n public defaultCountry;\n public twoFactorManageService: TwoFactorManageService;\n public FsVerificationMethodType = FsVerificationMethodType;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any, \n private _dialogRef: MatDialogRef<NumbersComponent>,\n private _message: FsMessage,\n ) {\n this.twoFactorManageService = _data.twoFactorManageService;\n this.defaultCountry = _data.defaultCountry;\n }\n\n public add(): void {\n this.twoFactorManageService.addSms(this.defaultCountry)\n .subscribe();\n }\n\n public deleted(): void {\n this._message.success('Deleted text message verification method');\n if(!this.twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.Sms)) {\n this._dialogRef.close();\n }\n }\n\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n Text Message Numbers\n </h1>\n <mat-dialog-content>\n <app-verification-methods\n [type]=\"FsVerificationMethodType.Sms\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </app-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add Number\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import {\n Component, Inject, ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FsMessage } from '@firestitch/message';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './emails.component.html',\n styleUrls: ['./emails.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailsComponent {\n\n public twoFactorManageService: TwoFactorManageService;\n public FsVerificationMethodType = FsVerificationMethodType;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<EmailsComponent>,\n private _message: FsMessage,\n ) {\n this.twoFactorManageService = _data.twoFactorManageService;\n }\n\n public add(): void {\n this.twoFactorManageService.addEmail()\n .subscribe();\n }\n\n public deleted(): void {\n this._message.success('Deleted email verification method');\n if(!this.twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.Email)) {\n this._dialogRef.close();\n }\n }\n\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n Emails\n </h1>\n <mat-dialog-content>\n <app-verification-methods\n [type]=\"FsVerificationMethodType.Email\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </app-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add Email\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import {\n Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef, OnInit, OnDestroy,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\n\nimport { NumbersComponent } from '../numbers';\nimport { EmailsComponent } from '../emails';\nimport { TwoFactorManageService } from '../../services';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { FsMessage } from '@firestitch/message';\n\n\n@Component({\n templateUrl: './manage-methods.component.html',\n styleUrls: ['./manage-methods.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ManageMethodsComponent implements OnInit, OnDestroy {\n\n public verificationMethods;\n private _destroy$ = new Subject();\n private _defaultCountry: string;\n private _twoFactorManageService: TwoFactorManageService;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _cdRef: ChangeDetectorRef,\n private _dialog: MatDialog,\n private _message: FsMessage,\n ) {}\n\n public ngOnInit(): void {\n this._defaultCountry = this._data.defaultCountry;\n this._twoFactorManageService = this._data.twoFactorManageService;\n\n this._twoFactorManageService.verificationMethods$\n .subscribe((verificationMethods) => {\n this.verificationMethods = verificationMethods;\n this._cdRef.markForCheck();\n });\n }\n\n public get defaultSms(): boolean {\n return this._twoFactorManageService.getVerificationMethods(FsVerificationMethodType.Sms)\n .some((verificationMethod) => {\n return verificationMethod.default;\n });\n }\n\n public get defaultApp(): boolean {\n return this._twoFactorManageService.getVerificationMethods(FsVerificationMethodType.App)\n .some((verificationMethod) => {\n return verificationMethod.default;\n });\n }\n\n public get defaultEmail(): boolean {\n return this._twoFactorManageService.getVerificationMethods(FsVerificationMethodType.Email)\n .some((verificationMethod) => {\n return verificationMethod.default;\n });\n }\n\n public get textHasVerificationMethod(): boolean {\n return this._twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.Sms);\n }\n\n public get appHasVerificationMethod(): boolean {\n return this._twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.App);\n }\n\n public get emailHasVerificationMethod(): boolean {\n return this._twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.Email);\n }\n\n public textMessageManage(): void {\n this._dialog.open(NumbersComponent, {\n data: {\n twoFactorManageService: this._twoFactorManageService,\n defaultCountry: this._defaultCountry,\n },\n });\n }\n\n public textMessageAdd(): void {\n this._twoFactorManageService.addSms(this._defaultCountry)\n .subscribe();\n }\n\n public emailMessageManage(): void {\n this._dialog.open(EmailsComponent, {\n data: {\n twoFactorManageService: this._twoFactorManageService,\n },\n });\n }\n\n public emailMessageAdd(): void {\n this._twoFactorManageService.addEmail()\n .subscribe();\n }\n\n public appRemove(): void {\n this._message.success('Removed App Authenticator verification method');\n\n const verificationMethod = this.verificationMethods\n .find((_verificationMethod) => {\n return _verificationMethod.type === FsVerificationMethodType.App;\n });\n\n if(verificationMethod) {\n this._twoFactorManageService.verificationMethodDelete(verificationMethod)\n .subscribe(() => {\n this._cdRef.markForCheck();\n });\n }\n }\n\n public appAdd(): void {\n this._twoFactorManageService.addApp()\n .subscribe();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>2-Step Verification</h1>\n <mat-dialog-content>\n <table>\n <tr>\n <td>\n <mat-icon>textsms</mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>Text Message</span>\n <app-defaulted *ngIf=\"defaultSms\"></app-defaulted>\n </div>\n <div class=\"small\">Verification codes are sent by text message</div>\n </td>\n <td>\n <button \n *ngIf=\"textHasVerificationMethod; else textMessageManageButton\"\n mat-raised-button \n type=\"button\"\n (click)=\"textMessageManage()\">\n Manage\n </button>\n <ng-template #textMessageManageButton>\n <button \n mat-raised-button \n color=\"primary\"\n type=\"button\"\n (click)=\"textMessageAdd()\">\n Turn On\n </button>\n </ng-template>\n </td>\n </tr>\n <tr>\n <td>\n <mat-icon>email</mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>Email</span> \n <app-defaulted *ngIf=\"defaultEmail\"></app-defaulted>\n </div>\n <div class=\"small\">Verification codes are sent by email message</div>\n </td>\n <td>\n <button \n *ngIf=\"emailHasVerificationMethod; else emailMessageManageButton\"\n mat-raised-button \n type=\"button\"\n (click)=\"emailMessageManage()\">\n Manage\n </button>\n <ng-template #emailMessageManageButton>\n <button \n mat-raised-button \n color=\"primary\"\n type=\"button\"\n (click)=\"emailMessageAdd()\">\n Turn On\n </button>\n </ng-template>\n </td>\n </tr>\n <tr>\n <td>\n <mat-icon>phone_iphone</mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>Authenticator App</span>\n <app-defaulted *ngIf=\"defaultApp\"></app-defaulted>\n </div>\n <div class=\"small\">Verification code is generated by an authenticator app such as Authy or Google Authenticator</div>\n </td>\n <td>\n <button \n *ngIf=\"appHasVerificationMethod; else appMessageManageButton\"\n mat-raised-button \n type=\"button\"\n (click)=\"appRemove()\">\n Remove\n </button>\n <ng-template #appMessageManageButton>\n <button \n mat-raised-button \n color=\"primary\"\n type=\"button\"\n (click)=\"appAdd()\">\n Turn On\n </button>\n </ng-template>\n </td>\n </tr> \n </table> \n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import {\n Component,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n OnDestroy,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\nimport { ManageMethodsComponent } from '../manage-methods';\n\n\n@Component({\n selector: 'fs-2fa-manage',\n templateUrl: './2fa-manage.component.html',\n styleUrls: ['./2fa-manage.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TwoFactorManageService],\n})\nexport class Fs2faManageComponent implements OnDestroy, OnInit {\n\n @Input() public accountVerify: () => Observable<any>;\n @Input() public defaultCountry: string;\n @Input() public verificationMethodsFetch: () => Observable<any[]>;\n @Input() public verificationMethodDelete: (verificationMethod: any) => Observable<any>;\n @Input() public verificationMethodCreate: (verificationMethod: any) => Observable<any>;\n @Input() public verificationMethodVerify: (verificationMethod: any) => Observable<any>;\n @Input() public verificationMethodResend: () => Observable<any>;\n\n public statuses;\n\n private _destroy$ = new Subject();\n\n constructor(\n private _cdRef: ChangeDetectorRef,\n private _dialog: MatDialog,\n private _twoFactorManageService: TwoFactorManageService,\n ) {}\n\n public ngOnInit(): void {\n this._twoFactorManageService.registerVerificationMethodFetch(this.verificationMethodsFetch);\n this._twoFactorManageService.registerVerificationMethodDelete(this.verificationMethodDelete);\n this._twoFactorManageService.registerVerificationMethodCreate(this.verificationMethodCreate);\n this._twoFactorManageService.registerVerificationMethodVerify(this.verificationMethodVerify);\n this._twoFactorManageService.registerVerificationMethodResend(this.verificationMethodResend);\n this._twoFactorManageService.registerAccountVerify(this.accountVerify);\n\n\n this._twoFactorManageService.verificationMethods$\n .subscribe((verificationMethods) => {\n const types = {\n sms: 'Text Message',\n email: 'Email',\n app: 'Authenticator App',\n };\n\n this.statuses = Object.keys(\n verificationMethods.reduce((accum, verificationMethod) => {\n accum[verificationMethod.type] = true;\n\n return accum;\n }, {}),\n )\n .map((type) => {\n return types[type];\n });\n\n this._cdRef.markForCheck();\n });\n\n this._twoFactorManageService.verificationMethodFetch();\n }\n\n public manage() {\n const dialogRef = this._dialog.open(ManageMethodsComponent, {\n autoFocus: false,\n data: {\n defaultCountry: this.defaultCountry,\n twoFactorManageService: this._twoFactorManageService,\n },\n });\n\n dialogRef.afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public reload(): void {\n this._twoFactorManageService.verificationMethodFetch();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n\n}\n","<fs-label-field>\n <fs-label>Status</fs-label>\n <ng-container *ngIf=\"statuses\">\n <ng-container *ngIf=\"statuses.length === 1\">\n {{statuses[0]}} verification is enabled\n </ng-container>\n\n <ng-container *ngIf=\"statuses.length > 1\">\n {{statuses.join(', ')}} verifications are enabled\n </ng-container>\n\n <ng-container *ngIf=\"statuses.length === 0\">\n No verification methods are enabled\n </ng-container>\n </ng-container>\n</fs-label-field>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { FsListModule } from '@firestitch/list';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsPhoneModule } from '@firestitch/phone';\nimport { FsCountryModule } from '@firestitch/country';\n\nimport { QrCodeModule } from 'ng-qrcode';\n\n\nimport { CodeInputModule } from '../code-input';\nimport { Fs2faManageComponent } from './components/2fa-manage';\nimport { ManageMethodsComponent } from './components/manage-methods';\nimport { NumbersComponent } from './components/numbers';\nimport { AppComponent } from './components/app';\nimport { EmailComponent } from './components/email';\nimport { VerificationMethodsComponent } from './components/verification-methods';\nimport { NumberComponent } from './components/number';\nimport { EmailsComponent } from './components/emails';\nimport { DefaultedComponent } from './components/defaulted';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatInputModule,\n MatIconModule,\n MatCheckboxModule,\n\n FsDialogModule,\n FsListModule,\n FsFormModule,\n FsLabelModule,\n FsPhoneModule,\n FsSkeletonModule,\n FsCountryModule,\n\n CodeInputModule,\n\n QrCodeModule,\n ],\n declarations: [\n Fs2faManageComponent,\n ManageMethodsComponent,\n NumbersComponent,\n AppComponent,\n EmailComponent,\n VerificationMethodsComponent,\n NumberComponent,\n EmailsComponent,\n DefaultedComponent,\n ],\n exports: [Fs2faManageComponent],\n})\nexport class Fs2faManageModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["InjectionToken","FsVerificationMethodType","tap","map","shareReplay","MAT_DIALOG_DATA","Component","ChangeDetectionStrategy","Inject","EventEmitter","AngularCodeInputComponent","ViewChild","Input","Output","ControlContainer","NgForm","Subject","takeUntil","filter","AngularCodeInputModule","NgModule","CommonModule","FormsModule","MatFormFieldModule","MatInputModule","MatButtonModule","FsFormModule","FsRadioGroupModule","FsDialogModule","MatCheckboxModule","MatProgressSpinnerModule","FsSkeletonModule","MatIconModule","MatRadioModule","FsFormDirective","of","switchMap","BehaviorSubject","Injectable","MatDialogModule","FsListModule","FsLabelModule","FsPhoneModule","FsCountryModule","QrCodeModule"],"mappings":"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"}
1
+ {"version":3,"file":"firestitch-2fa.umd.js","sources":["../../src/app/tokens/verification.token.ts","../../src/app/enums/verification-method-type.enum.ts","../../src/app/modules/verification/components/2fa-verification-methods/2fa-verification-methods.component.ts","../../src/app/modules/verification/components/2fa-verification-methods/2fa-verification-methods.component.html","../../src/app/modules/code-input/components/code-input/code-input.component.ts","../../src/app/modules/code-input/components/code-input/code-input.component.html","../../src/app/modules/verification/components/2fa-verification-code/2fa-verification-code.component.ts","../../src/app/modules/verification/components/2fa-verification-code/2fa-verification-code.component.html","../../src/app/modules/verification/components/2fa-verification/2fa-verification.component.ts","../../src/app/modules/verification/components/2fa-verification/2fa-verification.component.html","../../src/app/modules/code-input/code-input.module.ts","../../src/app/modules/verification/fs-2fa-verification.module.ts","../../src/app/modules/manage/components/app/app.component.ts","../../src/app/modules/manage/components/app/app.component.html","../../src/app/modules/manage/components/email/email.component.ts","../../src/app/modules/manage/components/email/email.component.html","../../src/app/modules/manage/components/number/number.component.ts","../../src/app/modules/manage/components/number/number.component.html","../../src/app/modules/manage/services/two-factor-manage.service.ts","../../src/app/modules/manage/components/defaulted/defaulted.component.ts","../../src/app/modules/manage/components/defaulted/defaulted.component.html","../../src/app/modules/manage/components/verification-methods/verification-methods.component.ts","../../src/app/modules/manage/components/verification-methods/verification-methods.component.html","../../src/app/modules/manage/components/numbers/numbers.component.ts","../../src/app/modules/manage/components/numbers/numbers.component.html","../../src/app/modules/manage/components/emails/emails.component.ts","../../src/app/modules/manage/components/emails/emails.component.html","../../src/app/modules/manage/components/manage-methods/manage-methods.component.ts","../../src/app/modules/manage/components/manage-methods/manage-methods.component.html","../../src/app/modules/manage/components/2fa-manage/2fa-manage.component.ts","../../src/app/modules/manage/components/2fa-manage/2fa-manage.component.html","../../src/app/modules/manage/fs-2f-manage.module.ts","../../src/firestitch-2fa.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { IFsVerificationProvider } from '../interfaces/verification-provider.interface';\n\nexport const FS_2FA_VERIFICATION_PROVIDER = new InjectionToken<IFsVerificationProvider>(\n 'Provider for Verification service',\n);\n","export enum FsVerificationMethodType {\n Sms = 'sms',\n Email = 'email',\n App = 'app',\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { Observable } from 'rxjs';\nimport { map, shareReplay, tap } from 'rxjs/operators';\n\nimport { FS_2FA_VERIFICATION_PROVIDER } from '../../../../tokens/verification.token';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { IFsVerificationProvider } from '../../../../interfaces/verification-provider.interface';\nimport { IFsVerificationMethod } from '../../../../interfaces/verification-method.interface';\n\n\n@Component({\n templateUrl: './2fa-verification-methods.component.html',\n styleUrls: [\n './2fa-verification-methods.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Fs2faVerificationMethodsComponent {\n\n public method: IFsVerificationMethod;\n public phone: string;\n public code: string;\n public methods$: Observable<Record<string, IFsVerificationMethod[]>>;\n public readonly verificationMethodType = FsVerificationMethodType;\n\n constructor(\n @Inject(FS_2FA_VERIFICATION_PROVIDER)\n private _verificationProvider: IFsVerificationProvider,\n @Inject(MAT_DIALOG_DATA)\n private _dialogData: any,\n private _dialogRef: MatDialogRef<Fs2faVerificationMethodsComponent>,\n ) {\n this._setActiveMethod();\n this._initMethods();\n }\n\n public compareWith(o1, o2) {\n return o1 && o2 && o1.id === o2.id\n }\n\n public setVerificationMethod = () => {\n return this._verificationProvider\n .updateVerificationMethod(this.method.id)\n .pipe(\n tap((method: IFsVerificationMethod) => {\n this._dialogRef.close(method);\n })\n );\n };\n\n private _setActiveMethod(): void {\n this.method = this._dialogData?.method;\n }\n\n private _initMethods(): void {\n this.methods$ = this._verificationProvider\n .methods()\n .pipe(\n map((methods) => {\n return methods\n .reduce((acc, method) => {\n if (!acc[method.type]) {\n acc[method.type] = [];\n }\n\n acc[method.type].push(method);\n\n return acc;\n }, {});\n }),\n shareReplay(1),\n );\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n Verification Methods\n </h1>\n <form fsForm [submit]=\"setVerificationMethod\" [dirtySubmitButton]=\"false\">\n <mat-dialog-content>\n <ng-container *fsSkeleton=\"methods$ | async as methods\">\n <fs-radio-group [(ngModel)]=\"method\" name=\"method\" [compareWith]=\"compareWith\">\n <ng-container *ngFor=\"let methodMap of methods | keyvalue\">\n <div class=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n textsms\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Text Message</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following mobile number\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n mail\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Email</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following email\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"verificationMethodType.App\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n phone_iphone\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Authenticator App</div>\n <div class=\"method-subtitle\">\n Verification code generated by an authenticator app\n </div>\n </div>\n </div>\n </ng-container> \n </ng-container>\n\n <mat-radio-button class=\"method-item\" *ngFor=\"let method of methodMap.value\" [value]=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n {{ method.phoneNumber }}\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n {{ method.email }}\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.App\">\n Authenticator App\n </ng-container> \n </ng-container>\n </mat-radio-button>\n </div>\n </ng-container>\n </fs-radio-group>\n </ng-container>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"actions\">\n <ng-container *ngIf=\"methods$ | async\">\n <button mat-button type=\"submit\" color=\"primary\">Next</button>\n </ng-container>\n <button mat-button type=\"button\" [mat-dialog-close]=\"null\">Cancel</button>\n </div>\n </mat-dialog-actions>\n </form>\n</fs-dialog>\n","import { Component, ChangeDetectionStrategy, Output, EventEmitter, Input, ViewChild } from '@angular/core';\n\nimport { CodeInputComponent as AngularCodeInputComponent } from 'angular-code-input';\n\n\n@Component({\n selector: 'app-code-input',\n templateUrl: './code-input.component.html',\n styleUrls: ['./code-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodeInputComponent {\n\n @ViewChild(AngularCodeInputComponent)\n public angularCodeInputComponent: AngularCodeInputComponent;\n\n @Input() public codeLength: number;\n @Input() public code;\n\n @Output() public codeCompleted = new EventEmitter();\n @Output() public codeChanged = new EventEmitter();\n \n public focus(): void {\n this.angularCodeInputComponent.focusOnField(0);\n }\n}","<code-input\r\n [initialFocusField]=\"0\"\r\n [codeLength]=\"6\"\r\n [code]=\"code\"\r\n (codeCompleted)=\"codeCompleted.emit($event)\"\r\n (codeChanged)=\"codeChanged.emit($event)\">\r\n</code-input>","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlContainer, NgForm } from '@angular/forms';\nimport { CodeInputComponent } from '../../../../modules/code-input/components/code-input';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\n\nimport { IFsVerificationMethod } from '../../../../interfaces/verification-method.interface';\n\n\n@Component({\n selector: 'fs-2fa-verification-code',\n templateUrl: './2fa-verification-code.component.html',\n styleUrls: [\n './2fa-verification-code.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [\n {\n provide: ControlContainer,\n useExisting: NgForm,\n },\n ],\n})\nexport class Fs2faVerificationCodeComponent {\n\n @ViewChild(CodeInputComponent)\n public codeInputComponent: CodeInputComponent;\n\n @Input()\n public method: IFsVerificationMethod;\n\n @Input()\n public code;\n\n @Output()\n public codeChanged = new EventEmitter<string>();\n\n @Output()\n public codeCompleted = new EventEmitter<void>();\n\n public FsVerificationMethodType = FsVerificationMethodType;\n\n public codeChange(code): void {\n this.code = code;\n this.codeChanged.emit(this.code);\n }\n\n public focus(): void {\n this.codeInputComponent.focus();\n }\n\n}\n","<ng-container *ngIf=\"method.phoneNumber && method.type === FsVerificationMethodType.Sms\">\n <p class=\"description\">\n A text message with a verification code was just\n sent to <span style=\"white-space: nowrap;\">{{ method.phoneNumber }}</span> to verify it's you.\n </p>\n\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"method.type === FsVerificationMethodType.Email\">\n <p class=\"description\">\n A email with a verification code was just sent to {{ method.email }} to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"method.type === FsVerificationMethodType.App\">\n <p class=\"description\">\n Enter the verification code generated by your 2 factor authenticator app to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n\n<ng-template #input> \n <app-code-input \n [code]=\"code\"\n (codeChanged)=\"codeChange($event)\"\n (codeCompleted)=\"codeCompleted.emit()\">\n </app-code-input> \n</ng-template> ","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\n\nimport { FsDialog } from '@firestitch/dialog';\n\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport { IFsVerificationMethod } from '../../../../interfaces/verification-method.interface';\nimport { Fs2faVerificationMethodsComponent } from '../2fa-verification-methods/2fa-verification-methods.component';\nimport { Subject } from 'rxjs';\nimport { FS_2FA_VERIFICATION_PROVIDER } from '../../../../tokens/verification.token';\nimport { IFsVerificationProvider } from '../../../../interfaces/verification-provider.interface';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { Fs2faVerificationCodeComponent } from '../2fa-verification-code/2fa-verification-code.component';\n\n\n@Component({\n selector: 'fs-2fa-verification',\n templateUrl: './2fa-verification.component.html',\n styleUrls: [\n './2fa-verification.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Fs2faVerificationComponent implements OnDestroy, AfterViewInit, OnInit {\n\n @ViewChild(Fs2faVerificationCodeComponent)\n public verificationCodeComponent: Fs2faVerificationCodeComponent;\n\n @Input()\n public method: IFsVerificationMethod;\n\n @Output()\n public verified = new EventEmitter<unknown>();\n\n @Output()\n public codeChanged = new EventEmitter<unknown>();\n\n @Output()\n public codeCompleted = new EventEmitter<unknown>();\n\n public resendInProgress = false;\n public code = '';\n public trustedDevice = true;\n public FsVerificationMethodType = FsVerificationMethodType;\n\n private _destroy$ = new Subject<void>();\n\n constructor(\n @Inject(FS_2FA_VERIFICATION_PROVIDER)\n public verificationProvider: IFsVerificationProvider,\n private _cdRef: ChangeDetectorRef,\n private _dialog: FsDialog,\n ) {\n }\n\n public ngOnInit(): void {\n this.codeChanged\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((code: string) => {\n this.code = code;\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public verify() {\n this.verificationProvider\n .verify(this.code, this.trustedDevice)\n .subscribe((response) => {\n this.verified.emit(response);\n });\n };\n\n public ngAfterViewInit(): void {\n this.verificationCodeComponent.focus(); \n }\n\n public resend(): void {\n this.resendInProgress = true;\n this.code = '';\n\n this.verificationProvider\n .resend()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.resendInProgress = false; \n this.verificationCodeComponent.focus(); \n this._cdRef.markForCheck();\n })\n }\n\n public showVerificationMethods(): void {\n this._dialog.open(\n Fs2faVerificationMethodsComponent,\n {\n data: {\n method: this.method,\n }\n }\n )\n .afterClosed()\n .pipe(\n filter((method) => !!method),\n )\n .subscribe((method) => {\n this.method = method;\n this.code = '';\n\n this._cdRef.markForCheck();\n\n setTimeout(() => {\n this.verificationCodeComponent.focus();\n });\n });\n }\n\n}\n","<div class=\"code-container\">\n <fs-2fa-verification-code\n [method]=\"method\"\n [code]=\"code\"\n (codeChanged)=\"codeChanged.emit($event)\"\n (codeCompleted)=\"codeCompleted.emit()\">\n </fs-2fa-verification-code>\n</div>\n\n<div class=\"additional\">\n <mat-checkbox\n name=\"trust-device\"\n [(ngModel)]=\"trustedDevice\">\n Trust this device\n </mat-checkbox>\n\n <span class=\"resend-code-btn\">\n <ng-container *ngIf=\"!resendInProgress else sending\">\n <a (click)=\"resend()\">\n Resend Code\n </a>\n </ng-container>\n <ng-template #sending>\n <mat-spinner [diameter]=\"12\"></mat-spinner> Sending\n </ng-template>\n </span>\n</div>","import { NgModule } from '@angular/core';\n\nimport { CodeInputModule as AngularCodeInputModule } from 'angular-code-input';\n\nimport { CodeInputComponent } from './components/code-input';\n\n\n@NgModule({\n imports: [\n AngularCodeInputModule,\n ],\n declarations: [\n CodeInputComponent,\n ],\n exports: [\n CodeInputComponent,\n ],\n})\nexport class CodeInputModule {\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { FsFormModule } from '@firestitch/form';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsRadioGroupModule } from '@firestitch/radiogroup';\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport { Fs2faVerificationComponent } from './components/2fa-verification/2fa-verification.component';\nimport { Fs2faVerificationCodeComponent } from './components/2fa-verification-code/2fa-verification-code.component';\nimport { Fs2faVerificationMethodsComponent } from './components/2fa-verification-methods/2fa-verification-methods.component';\n\nimport { CodeInputModule } from '../code-input';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n\n FsFormModule,\n FsRadioGroupModule,\n FsDialogModule,\n\n CodeInputModule,\n MatCheckboxModule,\n MatProgressSpinnerModule,\n FsSkeletonModule,\n FsSkeletonModule,\n MatIconModule,\n MatRadioModule,\n ],\n declarations: [\n Fs2faVerificationComponent,\n Fs2faVerificationCodeComponent,\n Fs2faVerificationMethodsComponent,\n ],\n exports: [\n Fs2faVerificationComponent,\n ],\n providers: [],\n})\nexport class Fs2faVerificationModule {}\n","import {\n Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef, OnInit, ViewChild,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsFormDirective } from '@firestitch/form';\nimport { FsMessage } from '@firestitch/message';\n\nimport { tap } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppComponent implements OnInit {\n\n @ViewChild(FsFormDirective)\n public form: FsFormDirective;\n\n public twoFactorManageService: TwoFactorManageService;\n public mode: 'qr-code' | 'code-input' = 'qr-code';\n public accountId;\n public qrCodeUrl;\n public code;\n public default;\n public appType: 'google' | 'authy';\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<AppComponent>,\n private _cdRef: ChangeDetectorRef,\n private _message: FsMessage,\n ) {}\n\n public ngOnInit(): void {\n this.twoFactorManageService = this._data.twoFactorManageService;\n this.accountId = this._data.accountId;\n this.default = !this.twoFactorManageService.hasVerificationMethods;\n }\n\n public appTypeGoogle(): void {\n this.appTypeSelect('google');\n }\n\n public appTypeAuthy(): void {\n this.appTypeSelect('authy');\n }\n\n public appTypeSelect(appType): void {\n this.appType = appType;\n this.twoFactorManageService.verificationMethodCreate({\n type: 'app',\n default: this.default,\n })\n .subscribe((response) => {\n this.qrCodeUrl = response.qrCodeUrl;\n this._cdRef.markForCheck();\n });\n }\n\n public codeCompleted(): void {\n this.form.triggerSubmit();\n }\n\n public codeChanged(code): void {\n this.code = code;\n this.form.dirty();\n }\n\n public next(): void {\n this.mode = 'code-input';\n }\n\n public verify = () => {\n return this.twoFactorManageService.verificationMethodVerify(this.code)\n .pipe(\n tap(() => {\n this._message.success('Created app authenticator verification method');\n this._dialogRef.close(true);\n }),\n );\n };\n\n}\n","<form fsForm [submit]=\"verify\">\n <fs-dialog>\n <h1 mat-dialog-title>Authenticator App Setup</h1>\n <mat-dialog-content>\n\n <div *ngIf=\"mode === 'qr-code'\" class=\"qr-code\">\n <ng-container *ngIf=\"appType\">\n <ol>\n <li>\n <ng-container *ngIf=\"appType === 'authy'\">\n Install the Authy Authenticator App from the <a href=\"https://apps.apple.com/us/app/authy/id494168017\" target=\"_blank\">App Store</a> or\n the <a href=\"https://play.google.com/store/apps/details?id=com.authy.authy\" target=\"_blank\">Google Play Store</a>.\n </ng-container>\n\n <ng-container *ngIf=\"appType === 'google'\">\n Install the Google Authenticator App from the <a href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\" target=\"_blank\">App Store</a> or\n the <a href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_US&gl=US\" target=\"_blank\">Google Play Store</a>.\n </ng-container>\n </li>\n <ng-container *ngIf=\"appType === 'authy'\">\n <li>\n Open the Authy app and select <b>Add Account</b>.\n </li>\n <li>\n Select <b>Scan QR Code</b> and scan the QR code below.\n </li>\n </ng-container> \n <ng-container *ngIf=\"appType === 'google'\">\n <li>\n Open the Google Authentictor app and click the <b>Plus icon</b> in the lower right corner.\n </li>\n <li>\n Select <b>Scan a QR code</b> and scan the QR code below.\n </li>\n </ng-container>\n </ol>\n\n <qr-code \n *fsSkeleton=\"qrCodeUrl\"\n [value]=\"qrCodeUrl\"\n size=\"200\"\n errorCorrectionLevel=\"H\"\n [margin]=\"0\">\n </qr-code> \n </ng-container>\n\n <div class=\"app-types\" *ngIf=\"!appType\">\n <p>Select the Authenticator App you prefer</p>\n\n <div class=\"row\">\n <span>\n <a (click)=\"appTypeAuthy()\">\n <svg width=\"50\" height=\"50\" viewBox=\"0 0 256 256\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid\"><path d=\"M256 127.998C256 198.696 198.694 256 127.997 256 57.304 256 0 198.696 0 127.998 0 57.305 57.304 0 127.997 0 198.694 0 256 57.305 256 127.998z\" fill=\"#EC1C24\"/><path d=\"M117.024 100.89l30.691 30.68c4.43 4.436 11.623 4.436 16.064 0 4.431-4.435 4.441-11.622 0-16.058L133.086 84.82C111.125 62.854 75.631 62.5 53.204 83.704a9.536 9.536 0 0 0-.605.548c-.098.098-.178.202-.275.29-.1.096-.202.182-.297.278-.194.193-.371.396-.54.597-21.215 22.437-20.85 57.932 1.113 79.897L83.292 196c4.44 4.433 11.623 4.433 16.062 0 4.442-4.437 4.442-11.633.011-16.06l-30.693-30.691c-13.398-13.393-13.488-35.129-.278-48.637 13.506-13.21 35.23-13.114 48.63.279zm39.612-40.873c-4.435 4.437-4.435 11.623.012 16.059l30.681 30.693c13.39 13.392 13.477 35.125.268 48.636-13.51 13.2-35.227 13.112-48.623-.282l-30.692-30.689c-4.438-4.437-11.633-4.437-16.066 0-4.443 4.433-4.443 11.642 0 16.065l30.682 30.694c21.968 21.965 57.458 22.322 79.889 1.116.208-.184.404-.355.61-.549.094-.095.182-.192.273-.29.1-.095.197-.183.29-.289.197-.183.365-.384.54-.594 21.215-22.428 20.86-57.911-1.102-79.889l-30.692-30.682c-4.436-4.443-11.638-4.443-16.07.001z\" fill=\"#FFF\"/></svg>\n </a>\n Authy\n </span>\n \n <span>\n <a (click)=\"appTypeGoogle()\"> \n <svg width=\"50\" height=\"50\" viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"m457.07 45.92c73.67-8.62 149.41.22 218.93 26.24 62.75 23.47 120.59 60.41 167.72 108.09-40.31 39.97-80.25 80.31-120.51 120.33-25.95-25.45-56.19-46.65-89.47-61.37-44.22-19.82-93.39-28.54-141.72-25.2-54.6 3.52-108.11 22.49-152.63 54.3-55.24 38.95-96.61 97.22-114.8 162.35-13.64 47.78-14.77 98.97-3.76 147.4 8.85 39.61 26.09 77.29 50.05 110.03 22.24 30.45 50.3 56.64 82.22 76.71 36.79 23.24 78.76 38.22 121.96 43.48 37.02 4.65 74.9 2.23 111.05-7 3.97-1.91 6.24 2.61 8.73 4.86 40.74 40.95 81.68 81.7 122.43 122.63-73.31 35.6-155.99 51.86-237.3 46.12-68.05-4.51-135.07-24.08-194.71-57.18-24.87-13.6-48.23-29.82-70.33-47.54-17.46-14.81-34.71-30.01-49.72-47.35-25.41-27.39-47.21-58.11-65.17-90.87-4-7.72-8.64-15.12-11.9-23.2-4.47-9.05-8.37-18.36-12.25-27.67-4.96-13.27-10.26-26.44-13.88-40.15-.43-1.81-1.53-3.33-2.52-4.85-8.3-28.66-12.95-58.33-15.44-88.04-2.62-37.36-1.33-75.05 4.78-112.03 12.18-75.48 43.41-147.74 89.86-208.44 30.12-39.5 66.53-74.21 107.46-102.35 62.44-43.11 135.53-70.69 210.92-79.3m49.18 50.48c-5.7.99-10.96 3.76-15.38 7.43-10.4 8.93-14.14 24.81-8.17 37.28 6.33 15.02 25.16 23.1 40.36 17 15.43-5.24 24.78-23.51 19.74-39.06-4.1-15.43-20.92-25.79-36.55-22.65m-267.96 111.99c-5.33.28-10.59 1.92-15.16 4.68-11.47 7.03-17.88 21.74-14.36 34.86 3.09 14.08 16.78 25.06 31.26 24.61 15.03.41 29.08-11.39 31.54-26.17 2.24-10.33-1.61-21.55-9.14-28.85-6.24-6.33-15.3-9.62-24.14-9.13m-115.96 272c-6.62 1.23-12.84 4.58-17.54 9.4-9.45 9.72-11.72 25.57-5.02 37.42 7.16 13.96 25.48 20.86 39.98 14.62 15.02-5.51 23.99-23.42 19.06-38.71-4.04-15.41-20.86-25.96-36.48-22.73m111.98 272.05c-11.49 1.95-21.48 10.72-24.84 21.88-3.87 11.63-.13 25.16 8.9 33.36 6.15 5.48 14.4 8.7 22.67 8.32 11.16-.25 21.98-6.87 27.12-16.8 4.93-8.83 5.15-20.02.71-29.1-5.82-12.78-20.81-20.33-34.56-17.66m272.06 112.03c-11.76 2.02-21.92 11.07-25.09 22.6-3.87 12.57 1.13 27.25 11.91 34.79 7.86 5.79 18.42 7.67 27.77 4.86 9.61-2.77 17.7-10.24 21.07-19.68 4.97-12.74.36-28.32-10.58-36.46-7.02-5.45-16.35-7.67-25.08-6.11z\" fill=\"#a0a0a0\"/>\n <g fill=\"#c1c1c1\">\n <path d=\"m506.25 96.4c15.63-3.14 32.45 7.22 36.55 22.65 5.04 15.55-4.31 33.82-19.74 39.06-15.2 6.1-34.03-1.98-40.36-17-5.97-12.47-2.23-28.35 8.17-37.28 4.42-3.67 9.68-6.44 15.38-7.43z\"/>\n <path d=\"m122.33 480.39c15.62-3.23 32.44 7.32 36.48 22.73 4.93 15.29-4.04 33.2-19.06 38.71-14.5 6.24-32.82-.66-39.98-14.62-6.7-11.85-4.43-27.7 5.02-37.42 4.7-4.82 10.92-8.17 17.54-9.4z\"/>\n </g>\n <path d=\"m843.72 180.25.11-.11c24.64 25.12 46.96 52.6 65.61 82.47 36.01 57.16 59.38 122.22 67.87 189.25 5.67 44.88 5.27 90.6-2.05 135.27-12.7 80.01-46.94 156.41-97.9 219.36-42.3 52.48-95.87 96.04-156.41 125.76l-.63-.26c-1.01-1.1-2.03-2.16-3.05-3.22-40.75-40.93-81.69-81.68-122.43-122.63-2.49-2.25-4.76-6.77-8.73-4.86-36.15 9.23-74.03 11.65-111.05 7-43.2-5.26-85.17-20.24-121.96-43.48-31.92-20.07-59.98-46.26-82.22-76.71-23.96-32.74-41.2-70.42-50.05-110.03-11.01-48.43-9.88-99.62 3.76-147.4 18.19-65.13 59.56-123.4 114.8-162.35 44.52-31.81 98.03-50.78 152.63-54.3 48.33-3.34 97.5 5.38 141.72 25.2 33.28 14.72 63.52 35.92 89.47 61.37 40.26-40.02 80.2-80.36 120.51-120.33m-351.75 183.97c-21.23 2.85-41.89 10.28-59.88 21.94-23.08 14.45-41.76 35.58-53.9 59.91-14.58 29.2-18.64 63.21-12.5 95.17 3.93 19.85 12.03 38.88 23.56 55.51 7.93 11.52 17.65 21.66 27.65 31.38 57.33 57.41 114.61 114.86 171.99 172.21 49.09-13.07 94.67-38.94 131.05-74.4 45.11-43.34 75.66-101.44 86.31-163.06.24-1.04.22-2.91 1.85-2.6 29.63.04 59.26-.01 88.9.05 19.04-.3 36.87-14.77 40.76-33.46.22-1.21 0-2.32-.67-3.35 1.22-5.71 2.08-11.58 1.38-17.43l-.24.4c-2.05-20.34-20.84-37.12-41.25-37.17-80.64-.07-161.28-.01-241.93-.07-6.44-22.08-18.5-42.33-34.03-59.23-25.8-27.5-62.26-45.01-100.02-46.82-9.68.02-19.44-.54-29.03 1.02m286.37 388.31c-12.64 2.06-23.37 12.59-25.7 25.18-1.48 8.14-.14 17.02 4.73 23.85 5.76 9.2 16.8 14.76 27.61 14.25 8.32.03 16.28-3.95 22.16-9.66 4.87-5.6 8.45-12.67 8.67-20.2.86-11.37-5.06-23.1-14.87-28.96-6.52-4.46-14.89-5.75-22.6-4.46z\" fill=\"#686868\"/>\n <path d=\"m238.29 208.39c8.84-.49 17.9 2.8 24.14 9.13 7.53 7.3 11.38 18.52 9.14 28.85-2.46 14.78-16.51 26.58-31.54 26.17-14.48.45-28.17-10.53-31.26-24.61-3.52-13.12 2.89-27.83 14.36-34.86 4.57-2.76 9.83-4.4 15.16-4.68z\" fill=\"#c3c3c3\"/>\n <path d=\"m491.97 364.22c9.59-1.56 19.35-1 29.03-1.02 37.76 1.81 74.22 19.32 100.02 46.82 15.53 16.9 27.59 37.15 34.03 59.23-47.67-.01-95.35-.01-143.03-.01-12.19-.11-24.23 5.42-32.21 14.61-6.01 6.85-9.74 15.65-10.44 24.74-1.19 14.17 5.36 28.7 16.69 37.28 7.62 5.91 17.28 9 26.92 8.8 126.69-.04 253.39-.06 380.08.03 4.76.04 9.59-.15 14.2-1.48 14.21-3.82 26.02-15.47 29.83-29.7.67 1.03.89 2.14.67 3.35-3.89 18.69-21.72 33.16-40.76 33.46-29.64-.06-59.27-.01-88.9-.05-1.63-.31-1.61 1.56-1.85 2.6-10.65 61.62-41.2 119.72-86.31 163.06-36.38 35.46-81.96 61.33-131.05 74.4-57.38-57.35-114.66-114.8-171.99-172.21-10-9.72-19.72-19.86-27.65-31.38-11.53-16.63-19.63-35.66-23.56-55.51-6.14-31.96-2.08-65.97 12.5-95.17 12.14-24.33 30.82-45.46 53.9-59.91 17.99-11.66 38.65-19.09 59.88-21.94z\" fill=\"#474747\"/>\n <g fill=\"#bfbfbf\">\n <path d=\"m479.81 483.85c7.98-9.19 20.02-14.72 32.21-14.61 47.68 0 95.36 0 143.03.01 80.65.06 161.29 0 241.93.07 20.41.05 39.2 16.83 41.25 37.17-.19.33-.58.97-.78 1.29-3.68-18.51-21.57-33.16-40.47-33.05-124.97.1-249.94.12-374.91.17-7.73.13-15.74-.8-23.15 1.96-9.06 2.84-16.73 9.1-22.27 16.7-3.34 4.55-4.39 10.24-7.28 15.03.7-9.09 4.43-17.89 10.44-24.74z\"/>\n <path d=\"m234.31 752.44c13.75-2.67 28.74 4.88 34.56 17.66 4.44 9.08 4.22 20.27-.71 29.1-5.14 9.93-15.96 16.55-27.12 16.8-8.27.38-16.52-2.84-22.67-8.32-9.03-8.2-12.77-21.73-8.9-33.36 3.36-11.16 13.35-19.93 24.84-21.88z\"/>\n </g>\n <path d=\"m498.92 476.86c7.41-2.76 15.42-1.83 23.15-1.96 124.97-.05 249.94-.07 374.91-.17 18.9-.11 36.79 14.54 40.47 33.05.2-.32.59-.96.78-1.29l.24-.4c.7 5.85-.16 11.72-1.38 17.43-3.81 14.23-15.62 25.88-29.83 29.7-4.61 1.33-9.44 1.52-14.2 1.48-126.69-.09-253.39-.07-380.08-.03-9.64.2-19.3-2.89-26.92-8.8-11.33-8.58-17.88-23.11-16.69-37.28 2.89-4.79 3.94-10.48 7.28-15.03 5.54-7.6 13.21-13.86 22.27-16.7z\" fill=\"#b0b0b0\"/>\n <path d=\"m59.49 636.08c.99 1.52 2.09 3.04 2.52 4.85 3.62 13.71 8.92 26.88 13.88 40.15 3.88 9.31 7.78 18.62 12.25 27.67 3.26 8.08 7.9 15.48 11.9 23.2 17.96 32.76 39.76 63.48 65.17 90.87 15.01 17.34 32.26 32.54 49.72 47.35 22.1 17.72 45.46 33.94 70.33 47.54 59.64 33.1 126.66 52.67 194.71 57.18 81.31 5.74 163.99-10.52 237.3-46.12 1.02 1.06 2.04 2.12 3.05 3.22l.03.61c-42.32 21.03-87.88 35.53-134.56 42.91-56.91 8.9-115.46 7.49-171.82-4.5-67.89-14.35-132.42-44.21-187.42-86.51-63.52-48.63-114.32-113.73-145.86-187.27-8.42-19.87-15.93-40.22-21.2-61.15z\" fill=\"#939393\"/>\n <path d=\"m778.34 752.53c7.71-1.29 16.08 0 22.6 4.46 9.81 5.86 15.73 17.59 14.87 28.96-.22 7.53-3.8 14.6-8.67 20.2-5.88 5.71-13.84 9.69-22.16 9.66-10.81.51-21.85-5.05-27.61-14.25-4.87-6.83-6.21-15.71-4.73-23.85 2.33-12.59 13.06-23.12 25.7-25.18z\" fill=\"#767676\"/>\n <path d=\"m506.37 864.47c8.73-1.56 18.06.66 25.08 6.11 10.94 8.14 15.55 23.72 10.58 36.46-3.37 9.44-11.46 16.91-21.07 19.68-9.35 2.81-19.91.93-27.77-4.86-10.78-7.54-15.78-22.22-11.91-34.79 3.17-11.53 13.33-20.58 25.09-22.6z\" fill=\"#bebebe\"/>\n </svg>\n </a>\n Google Authenticator\n </span>\n </div>\n\n <mat-checkbox \n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default 2-step verification method\n </mat-checkbox>\n </div>\n \n </div>\n\n <div *ngIf=\"mode === 'code-input'\" class=\"code-input\">\n <div>\n Enter the 6-digit code you see in the App.\n </div>\n\n <app-code-input\n [codeLength]=\"6\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">\n </app-code-input>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <ng-container *ngIf=\"appType\">\n <button\n *ngIf=\"mode === 'qr-code'\"\n type=\"button\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Next\n </button>\n <button\n *ngIf=\"mode === 'code-input'\"\n type=\"submit\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Verify\n </button> \n </ng-container>\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n","import {\n Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsFormDirective } from '@firestitch/form';\n\nimport { of } from 'rxjs';\nimport { switchMap, tap } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './email.component.html',\n styleUrls: ['./email.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailComponent {\n\n @ViewChild(FsFormDirective, { static: false })\n public form: FsFormDirective;\n\n public email;\n public code;\n public default;\n public verificationMethod = null;\n public twoFactorManageService: TwoFactorManageService;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<EmailComponent>,\n private _cdRef: ChangeDetectorRef,\n private _message: FsMessage,\n ) {\n this.twoFactorManageService = _data.twoFactorManageService;\n this.default = !this.twoFactorManageService.hasVerificationMethods;\n }\n\n public resend(): void {\n this.twoFactorManageService.verificationMethodResend()\n .subscribe(() => {\n this._message.success('Resent verification code');\n });\n }\n\n public submit = () => {\n return of(true)\n .pipe(\n switchMap(() => {\n return this.verificationMethod ?\n this.twoFactorManageService.verificationMethodVerify(this.code)\n .pipe(\n tap((verificationMethod) => {\n this._message.success('Created email verification method');\n this._dialogRef.close(verificationMethod);\n }),\n ) :\n this.twoFactorManageService.verificationMethodCreate({\n type: 'email',\n email: this.email,\n default: this.default,\n })\n .pipe(\n tap((verificationMethod) => {\n this.verificationMethod = verificationMethod;\n this.form.clear();\n this._cdRef.markForCheck();\n }),\n );\n }),\n );\n };\n\n public codeCompleted(): void {\n if(!this.form.submitting) {\n this.form.triggerSubmit();\n }\n }\n\n public codeChanged(code): void {\n this.code = code;\n }\n\n}\n","<form fsForm [submit]=\"submit\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Email Setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <p>The app just sent you an email with a verification code.</p>\n \n <app-code-input \n [code]=\"code\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">\n </app-code-input> \n\n <div>Did't get the code? <a (click)=\"resend()\">Resend Code</a></div>\n </ng-container>\n\n <ng-template #notVerificationMethod>\n <p>The app will only use this email for verifying your account security. </p>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input\n matInput\n [required]=\"true\"\n [(ngModel)]=\"email\"\n [fsFormEmail]=\"true\"\n name=\"email\">\n </mat-form-field>\n <mat-checkbox \n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default 2-step verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n","import {\n Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsMessage } from '@firestitch/message';\nimport { FsFormDirective } from '@firestitch/form';\n\nimport { of } from 'rxjs';\nimport { switchMap, tap } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './number.component.html',\n styleUrls: ['./number.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumberComponent {\n\n @ViewChild(FsFormDirective, { static: false })\n public form: FsFormDirective;\n\n public phone;\n public code;\n public default;\n public verificationMethod = null;\n public defaultCountry;\n public twoFactorManageService: TwoFactorManageService;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<NumberComponent>,\n private _cdRef: ChangeDetectorRef,\n private _message: FsMessage,\n ) {\n this.twoFactorManageService = _data.twoFactorManageService;\n this.defaultCountry = _data.defaultCountry;\n this.default = !this.twoFactorManageService.hasVerificationMethods;\n }\n\n public resend(): void {\n this.twoFactorManageService.verificationMethodResend()\n .subscribe(() => {\n this._message.success('Resent verification code');\n });\n }\n\n public submit = () => {\n return of(true)\n .pipe(\n switchMap(() => {\n return this.verificationMethod ?\n this.twoFactorManageService.verificationMethodVerify(this.code)\n .pipe(\n tap((verificationMethod) => {\n this._message.success('Created text message verification method');\n this._dialogRef.close(verificationMethod);\n }),\n ) :\n this.twoFactorManageService.verificationMethodCreate({\n type: 'sms',\n phoneNumber: this.phone.number,\n phoneCode: this.phone.countryCode,\n phoneCountry: this.phone.isoCode,\n default: this.default,\n }).pipe(\n tap((verificationMethod) => {\n this.verificationMethod = verificationMethod;\n this.form.clear();\n this._cdRef.markForCheck();\n }),\n );\n }),\n );\n };\n\n public codeCompleted(): void {\n if(!this.form.submitting) {\n this.form.triggerSubmit();\n }\n }\n\n public codeChanged(code): void {\n this.code = code;\n }\n\n}\n","<form fsForm [submit]=\"submit\" autocomplete=\"off\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Text Message Setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <p>The app just sent you a text message with a verification code.</p>\n\n <app-code-input \n [code]=\"code\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">\n </app-code-input> \n \n <div>Did't get the code? <a (click)=\"resend()\">Resend Code</a></div>\n </ng-container>\n\n <ng-template #notVerificationMethod>\n <p>The app will only use this number for verifying your account security. Message and data rates may apply by your cell phone provider.</p>\n <mat-form-field>\n <mat-label>Phone number</mat-label>\n <fs-phone-field\n [(ngModel)]=\"phone\"\n [country]=\"defaultCountry\"\n name=\"phone\"\n autocomplete=\"off\"\n [required]=\"true\">\n </fs-phone-field>\n </mat-form-field>\n <mat-checkbox \n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default 2-step verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\nimport { FsVerificationMethodType } from '../../../enums/verification-method-type.enum';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { AppComponent } from '../components/app';\nimport { EmailComponent } from '../components/email';\nimport { NumberComponent } from '../components/number';\n\n\n@Injectable()\nexport class TwoFactorManageService implements OnDestroy {\n\n private _destroy$ = new Subject();\n\n private _verificationMethodFetch: () => Observable<any[]>;\n private _verificationMethodCreate: (verificationMethod) => Observable<any>;\n private _verificationMethodDelete: (verificationMethod) => Observable<any>;\n private _verificationMethodVerify: (verificationMethod) => Observable<any>;\n private _verificationMethodResend: () => Observable<any>;\n private _accountVerify: () => Observable<any[]>;\n private _verificationMethods$ = new BehaviorSubject<any[]>([]);\n\n constructor(\n private _dialog: MatDialog,\n ) {}\n\n public get verificationMethods$() {\n return this._verificationMethods$\n .pipe(\n takeUntil(this._destroy$),\n );\n }\n \n public get verificationMethods() {\n return this._verificationMethods$.getValue();\n }\n\n public get hasVerificationMethods(): boolean {\n return !!this._verificationMethods$.getValue().length;\n }\n\n public get emailVerificationMethods() {\n return this.getVerificationMethods(FsVerificationMethodType.Email);\n }\n\n public get smsVerificationMethods() {\n return this.getVerificationMethods(FsVerificationMethodType.Sms);\n }\n\n public get appVerificationMethods() {\n return this.getVerificationMethods(FsVerificationMethodType.App);\n }\n \n public getVerificationMethods(type) {\n return this.verificationMethods\n .filter((verificationMethod) => {\n return verificationMethod.type === type;\n });\n }\n \n public hasVerificationMethod(type) {\n return this.verificationMethods\n .some((verificationMethod) => {\n return verificationMethod.type === type;\n });\n }\n\n public registerVerificationMethodResend(value) {\n this._verificationMethodResend = value;\n }\n\n public registerVerificationMethodFetch(value) {\n this._verificationMethodFetch = value;\n }\n\n public registerVerificationMethodDelete(value) {\n this._verificationMethodDelete = value;\n }\n\n public registerVerificationMethodCreate(value) {\n this._verificationMethodCreate = value;\n }\n\n public registerVerificationMethodVerify(value) {\n this._verificationMethodVerify = value;\n }\n\n public registerAccountVerify(value) {\n this._accountVerify = value;\n }\n\n public verificationMethodDelete(verificationMethod): Observable<any> {\n return this._verificationMethodDelete(verificationMethod)\n .pipe(\n tap(() => {\n this.verificationMethodFetch();\n }),\n );\n }\n\n public verificationMethodVerify(verificationMethod): Observable<any> {\n return this._verificationMethodVerify(verificationMethod)\n .pipe(\n tap(() => {\n this.verificationMethodFetch();\n }),\n );\n }\n\n public verificationMethodCreate(verificationMethod): Observable<any> {\n return this._verificationMethodCreate(verificationMethod);\n }\n\n public verificationMethodResend(): Observable<any> {\n return this._verificationMethodResend();\n }\n\n public verificationMethodFetch() {\n this._verificationMethodFetch()\n .subscribe((verificationMethods) => {\n this._verificationMethods$.next(verificationMethods);\n });\n }\n\n public accountVerify(): Observable<any> {\n return this._accountVerify();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public addSms(defaultCountry): Observable<any>{\n return this.accountVerify()\n .pipe(\n switchMap(() => this._dialog.open(NumberComponent, {\n data: {\n defaultCountry,\n twoFactorManageService: this,\n },\n })\n .afterClosed(),\n ),\n tap(() => {\n this.verificationMethodFetch();\n }),\n takeUntil(this._destroy$),\n );\n }\n\n public addEmail(): Observable<any>{\n return this.accountVerify()\n .pipe(\n switchMap(() => this._dialog.open(EmailComponent, {\n data: { twoFactorManageService: this },\n })\n .afterClosed(),\n ),\n tap(() => {\n this.verificationMethodFetch();\n }),\n takeUntil(this._destroy$),\n );\n }\n\n public addApp(): Observable<any>{\n return this.accountVerify()\n .pipe(\n switchMap(() => this._dialog.open(AppComponent, {\n data: { twoFactorManageService: this },\n })\n .afterClosed(),\n ),\n tap(() => {\n this.verificationMethodFetch();\n }),\n takeUntil(this._destroy$),\n );\n }\n}\n","import {\n Component, ChangeDetectionStrategy,\n} from '@angular/core';\n\n\n@Component({\n selector: 'app-defaulted',\n templateUrl: './defaulted.component.html',\n styleUrls: ['./defaulted.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultedComponent {\n\n}\n","<span>Default</span>","import {\n Component, ChangeDetectionStrategy, OnInit, Input, Output, EventEmitter,\n} from '@angular/core';\n\nimport { FsListConfig } from '@firestitch/list';\nimport { FsPrompt } from '@firestitch/prompt';\nimport { IFsVerificationMethod } from '../../../../interfaces/verification-method.interface';\n\nimport { map, switchMap } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n selector: 'app-verification-methods',\n templateUrl: './verification-methods.component.html',\n styleUrls: ['./verification-methods.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VerificationMethodsComponent implements OnInit {\n\n @Input() public twoFactorManageService: TwoFactorManageService;\n @Input() public type;\n \n @Output() public deleted = new EventEmitter<IFsVerificationMethod>();\n\n public listConfig: FsListConfig;\n public textMessageAdd: () => void;\n\n constructor(\n private _prompt: FsPrompt,\n ) {\n }\n\n public ngOnInit(): void {\n this.listConfig = {\n rowActions: [\n {\n click: (verificationMethod) => {\n this._prompt.confirm({\n title: 'Confirm',\n template: 'Would you like to delete this verification method?',\n })\n .pipe(\n switchMap(() => this.twoFactorManageService\n .verificationMethodDelete(verificationMethod)),\n )\n .subscribe(() => {\n this.deleted.emit(verificationMethod);\n });\n },\n label: 'Delete',\n },\n ],\n fetch: () => {\n return this.twoFactorManageService.verificationMethods$\n .pipe(\n map((verificationMethods) => ({\n data: verificationMethods.filter((verificationMethod) => {\n return verificationMethod.type === this.type;\n }),\n }),\n ),\n );\n },\n };\n }\n}\n","<fs-list [config]=\"listConfig\">\n <fs-list-column class=\"col-name\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"row\">\n <ng-container *ngIf=\"row.type === 'sms'\">\n <fs-country [code]=\"row.phoneCountry\" [showName]=\"false\"></fs-country> {{row.phoneNumber | fsPhone}}\n </ng-container>\n\n <ng-container *ngIf=\"row.type === 'email'\">\n {{row.email}}\n </ng-container>\n \n <app-defaulted *ngIf=\"row.default\"></app-defaulted>\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>","import {\n Component, Inject, ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FsMessage } from '@firestitch/message';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './numbers.component.html',\n styleUrls: ['./numbers.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumbersComponent {\n\n public defaultCountry;\n public twoFactorManageService: TwoFactorManageService;\n public FsVerificationMethodType = FsVerificationMethodType;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any, \n private _dialogRef: MatDialogRef<NumbersComponent>,\n private _message: FsMessage,\n ) {\n this.twoFactorManageService = _data.twoFactorManageService;\n this.defaultCountry = _data.defaultCountry;\n }\n\n public add(): void {\n this.twoFactorManageService.addSms(this.defaultCountry)\n .subscribe();\n }\n\n public deleted(): void {\n this._message.success('Deleted text message verification method');\n if(!this.twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.Sms)) {\n this._dialogRef.close();\n }\n }\n\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n Text Message Numbers\n </h1>\n <mat-dialog-content>\n <app-verification-methods\n [type]=\"FsVerificationMethodType.Sms\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </app-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add Number\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import {\n Component, Inject, ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FsMessage } from '@firestitch/message';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { TwoFactorManageService } from '../../services';\n\n\n@Component({\n templateUrl: './emails.component.html',\n styleUrls: ['./emails.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmailsComponent {\n\n public twoFactorManageService: TwoFactorManageService;\n public FsVerificationMethodType = FsVerificationMethodType;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<EmailsComponent>,\n private _message: FsMessage,\n ) {\n this.twoFactorManageService = _data.twoFactorManageService;\n }\n\n public add(): void {\n this.twoFactorManageService.addEmail()\n .subscribe();\n }\n\n public deleted(): void {\n this._message.success('Deleted email verification method');\n if(!this.twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.Email)) {\n this._dialogRef.close();\n }\n }\n\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n Emails\n </h1>\n <mat-dialog-content>\n <app-verification-methods\n [type]=\"FsVerificationMethodType.Email\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </app-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add Email\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import {\n Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef, OnInit, OnDestroy,\n} from '@angular/core';\n\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\n\nimport { NumbersComponent } from '../numbers';\nimport { EmailsComponent } from '../emails';\nimport { TwoFactorManageService } from '../../services';\nimport { FsVerificationMethodType } from '../../../../enums/verification-method-type.enum';\nimport { FsMessage } from '@firestitch/message';\n\n\n@Component({\n templateUrl: './manage-methods.component.html',\n styleUrls: ['./manage-methods.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ManageMethodsComponent implements OnInit, OnDestroy {\n\n public twoFactorManageService: TwoFactorManageService;\n public verificationMethods;\n\n private _destroy$ = new Subject();\n private _defaultCountry: string;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _cdRef: ChangeDetectorRef,\n private _dialog: MatDialog,\n private _message: FsMessage,\n ) {}\n\n public ngOnInit(): void {\n this._defaultCountry = this._data.defaultCountry;\n this.twoFactorManageService = this._data.twoFactorManageService;\n\n this.twoFactorManageService.verificationMethods$\n .subscribe((verificationMethods) => {\n this.verificationMethods = verificationMethods;\n this._cdRef.markForCheck();\n });\n }\n\n public get defaultSms(): boolean {\n return this.twoFactorManageService.smsVerificationMethods\n .some((verificationMethod) => {\n return verificationMethod.default;\n });\n }\n\n public get defaultApp(): boolean {\n return this.twoFactorManageService.appVerificationMethods\n .some((verificationMethod) => {\n return verificationMethod.default;\n });\n }\n\n public get defaultEmail(): boolean {\n return this.twoFactorManageService.emailVerificationMethods\n .some((verificationMethod) => {\n return verificationMethod.default;\n });\n }\n\n public get textHasVerificationMethod(): boolean {\n return this.twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.Sms);\n }\n\n public get appHasVerificationMethod(): boolean {\n return this.twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.App);\n }\n\n public get emailHasVerificationMethod(): boolean {\n return this.twoFactorManageService.hasVerificationMethod(FsVerificationMethodType.Email);\n }\n\n public textMessageManage(): void {\n this._dialog.open(NumbersComponent, {\n data: {\n twoFactorManageService: this.twoFactorManageService,\n defaultCountry: this._defaultCountry,\n },\n });\n }\n\n public textMessageAdd(): void {\n this.twoFactorManageService.addSms(this._defaultCountry)\n .subscribe();\n }\n\n public emailMessageManage(): void {\n this._dialog.open(EmailsComponent, {\n data: {\n twoFactorManageService: this.twoFactorManageService,\n },\n });\n }\n\n public emailMessageAdd(): void {\n this.twoFactorManageService.addEmail()\n .subscribe();\n }\n\n public appRemove(): void {\n this._message.success('Removed App Authenticator verification method');\n\n const verificationMethod = this.verificationMethods\n .find((_verificationMethod) => {\n return _verificationMethod.type === FsVerificationMethodType.App;\n });\n\n if(verificationMethod) {\n this.twoFactorManageService.verificationMethodDelete(verificationMethod)\n .subscribe(() => {\n this._cdRef.markForCheck();\n });\n }\n }\n\n public appAdd(): void {\n this.twoFactorManageService.addApp()\n .subscribe();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>2-Step Verification</h1>\n <mat-dialog-content>\n <table>\n <tr>\n <td>\n <mat-icon>textsms</mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>Text Message</span>\n <span *ngIf=\"textHasVerificationMethod\" class=\"enabled\"></span>\n <app-defaulted *ngIf=\"defaultSms\"></app-defaulted>\n </div>\n <div class=\"small\">\n Verification codes are sent by text message\n <ng-container *ngIf=\"textHasVerificationMethod\">\n to <span class=\"items\">\n <span *ngFor=\"let item of twoFactorManageService.smsVerificationMethods\">{{item.phoneNumber | fsPhone}}</span>\n </span>\n </ng-container>\n </div>\n </td>\n <td>\n <button \n *ngIf=\"textHasVerificationMethod; else textMessageManageButton\"\n mat-raised-button \n type=\"button\"\n (click)=\"textMessageManage()\">\n Manage\n </button>\n <ng-template #textMessageManageButton>\n <button \n mat-raised-button \n color=\"primary\"\n type=\"button\"\n (click)=\"textMessageAdd()\">\n Turn On\n </button>\n </ng-template>\n </td>\n </tr>\n <tr>\n <td>\n <mat-icon>email</mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>Email</span> \n <span *ngIf=\"emailHasVerificationMethod\" class=\"enabled\"></span>\n <app-defaulted *ngIf=\"defaultEmail\"></app-defaulted>\n </div>\n <div class=\"small\">\n Verification codes are sent by email\n <ng-container *ngIf=\"emailHasVerificationMethod\">\n to <span class=\"items\">\n <span *ngFor=\"let item of twoFactorManageService.emailVerificationMethods\">{{item.email}}</span>\n </span>\n </ng-container>\n </div>\n </td>\n <td>\n <button \n *ngIf=\"emailHasVerificationMethod; else emailMessageManageButton\"\n mat-raised-button \n type=\"button\"\n (click)=\"emailMessageManage()\">\n Manage\n </button>\n <ng-template #emailMessageManageButton>\n <button \n mat-raised-button \n color=\"primary\"\n type=\"button\"\n (click)=\"emailMessageAdd()\">\n Turn On\n </button>\n </ng-template>\n </td>\n </tr>\n <tr>\n <td>\n <mat-icon>phone_iphone</mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>Authenticator App</span>\n <span *ngIf=\"appHasVerificationMethod\" class=\"enabled\"></span>\n <app-defaulted *ngIf=\"defaultApp\"></app-defaulted>\n </div>\n <div class=\"small\">Verification code is generated by an authenticator app such as Authy or Google Authenticator</div>\n </td>\n <td>\n <button \n *ngIf=\"appHasVerificationMethod; else appMessageManageButton\"\n mat-raised-button \n type=\"button\"\n (click)=\"appRemove()\">\n Remove\n </button>\n <ng-template #appMessageManageButton>\n <button \n mat-raised-button \n color=\"primary\"\n type=\"button\"\n (click)=\"appAdd()\">\n Turn On\n </button>\n </ng-template>\n </td>\n </tr> \n </table> \n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n","import {\n Component,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n OnDestroy,\n Input,\n OnInit,\n} from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TwoFactorManageService } from '../../services';\n\nimport { ManageMethodsComponent } from '../manage-methods';\n\n\n@Component({\n selector: 'fs-2fa-manage',\n templateUrl: './2fa-manage.component.html',\n styleUrls: ['./2fa-manage.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TwoFactorManageService],\n})\nexport class Fs2faManageComponent implements OnDestroy, OnInit {\n\n @Input() public accountVerify: () => Observable<any>;\n @Input() public defaultCountry: string;\n @Input() public verificationMethodsFetch: () => Observable<any[]>;\n @Input() public verificationMethodDelete: (verificationMethod: any) => Observable<any>;\n @Input() public verificationMethodCreate: (verificationMethod: any) => Observable<any>;\n @Input() public verificationMethodVerify: (verificationMethod: any) => Observable<any>;\n @Input() public verificationMethodResend: () => Observable<any>;\n\n public statuses;\n\n private _destroy$ = new Subject();\n\n constructor(\n private _cdRef: ChangeDetectorRef,\n private _dialog: MatDialog,\n private _twoFactorManageService: TwoFactorManageService,\n ) {}\n\n public ngOnInit(): void {\n this._twoFactorManageService.registerVerificationMethodFetch(this.verificationMethodsFetch);\n this._twoFactorManageService.registerVerificationMethodDelete(this.verificationMethodDelete);\n this._twoFactorManageService.registerVerificationMethodCreate(this.verificationMethodCreate);\n this._twoFactorManageService.registerVerificationMethodVerify(this.verificationMethodVerify);\n this._twoFactorManageService.registerVerificationMethodResend(this.verificationMethodResend);\n this._twoFactorManageService.registerAccountVerify(this.accountVerify);\n\n\n this._twoFactorManageService.verificationMethods$\n .subscribe((verificationMethods) => {\n const types = {\n sms: 'Text Message',\n email: 'Email',\n app: 'Authenticator App',\n };\n\n this.statuses = Object.keys(\n verificationMethods.reduce((accum, verificationMethod) => {\n accum[verificationMethod.type] = true;\n\n return accum;\n }, {}),\n )\n .map((type) => {\n return types[type];\n });\n\n this._cdRef.markForCheck();\n });\n\n this._twoFactorManageService.verificationMethodFetch();\n }\n\n public manage() {\n const dialogRef = this._dialog.open(ManageMethodsComponent, {\n autoFocus: false,\n data: {\n defaultCountry: this.defaultCountry,\n twoFactorManageService: this._twoFactorManageService,\n },\n });\n\n dialogRef.afterClosed()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public reload(): void {\n this._twoFactorManageService.verificationMethodFetch();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n\n}\n","<fs-label-field>\n <fs-label>Status</fs-label>\n <ng-container *ngIf=\"statuses\">\n <ng-container *ngIf=\"statuses.length === 1\">\n {{statuses[0]}} verification is enabled\n </ng-container>\n\n <ng-container *ngIf=\"statuses.length > 1\">\n {{statuses.join(', ')}} verifications are enabled\n </ng-container>\n\n <ng-container *ngIf=\"statuses.length === 0\">\n No verification methods are enabled\n </ng-container>\n </ng-container>\n</fs-label-field>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { FsListModule } from '@firestitch/list';\nimport { FsDialogModule } from '@firestitch/dialog';\nimport { FsFormModule } from '@firestitch/form';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsPhoneModule } from '@firestitch/phone';\nimport { FsCountryModule } from '@firestitch/country';\n\nimport { QrCodeModule } from 'ng-qrcode';\n\n\nimport { CodeInputModule } from '../code-input';\nimport { Fs2faManageComponent } from './components/2fa-manage';\nimport { ManageMethodsComponent } from './components/manage-methods';\nimport { NumbersComponent } from './components/numbers';\nimport { AppComponent } from './components/app';\nimport { EmailComponent } from './components/email';\nimport { VerificationMethodsComponent } from './components/verification-methods';\nimport { NumberComponent } from './components/number';\nimport { EmailsComponent } from './components/emails';\nimport { DefaultedComponent } from './components/defaulted';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatInputModule,\n MatIconModule,\n MatCheckboxModule,\n\n FsDialogModule,\n FsListModule,\n FsFormModule,\n FsLabelModule,\n FsPhoneModule,\n FsSkeletonModule,\n FsCountryModule,\n\n CodeInputModule,\n\n QrCodeModule,\n ],\n declarations: [\n Fs2faManageComponent,\n ManageMethodsComponent,\n NumbersComponent,\n AppComponent,\n EmailComponent,\n VerificationMethodsComponent,\n NumberComponent,\n EmailsComponent,\n DefaultedComponent,\n ],\n exports: [Fs2faManageComponent],\n})\nexport class Fs2faManageModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["InjectionToken","FsVerificationMethodType","tap","map","shareReplay","MAT_DIALOG_DATA","Component","ChangeDetectionStrategy","Inject","EventEmitter","AngularCodeInputComponent","ViewChild","Input","Output","ControlContainer","NgForm","Subject","takeUntil","filter","AngularCodeInputModule","NgModule","CommonModule","FormsModule","MatFormFieldModule","MatInputModule","MatButtonModule","FsFormModule","FsRadioGroupModule","FsDialogModule","MatCheckboxModule","MatProgressSpinnerModule","FsSkeletonModule","MatIconModule","MatRadioModule","FsFormDirective","of","switchMap","BehaviorSubject","Injectable","MatDialogModule","FsListModule","FsLabelModule","FsPhoneModule","FsCountryModule","QrCodeModule"],"mappings":"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"}
@@ -54,14 +54,16 @@ export class EmailComponent {
54
54
  });
55
55
  }
56
56
  codeCompleted() {
57
- this.form.triggerSubmit();
57
+ if (!this.form.submitting) {
58
+ this.form.triggerSubmit();
59
+ }
58
60
  }
59
61
  codeChanged(code) {
60
62
  this.code = code;
61
63
  }
62
64
  }
63
65
  EmailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EmailComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i0.ChangeDetectorRef }, { token: i2.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
64
- EmailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EmailComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: FsFormDirective, descendants: true }], ngImport: i0, template: "<form fsForm [submit]=\"submit\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Email Setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <p>The app just sent you an email with a verification code.</p>\n \n <app-code-input \n [code]=\"code\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">\n </app-code-input> \n\n <div>Did't get the code? <a (click)=\"resend()\">Resend Code</a></div>\n </ng-container>\n\n <ng-template #notVerificationMethod>\n <p>The app will only use this email for verifying your account security. </p>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input\n matInput\n [required]=\"true\"\n [(ngModel)]=\"email\"\n name=\"email\">\n </mat-form-field>\n <mat-checkbox \n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default 2-step verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}mat-form-field{width:100%}mat-dialog-content{width:400px}p{margin-top:0}app-code-input{margin-bottom:10px;display:block}\n"], components: [{ type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i4.CodeInputComponent, selector: "app-code-input", inputs: ["codeLength", "code"], outputs: ["codeCompleted", "codeChanged"] }, { type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "successDelay", "errorDelay", "submit", "tabGroup"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatLabel, selector: "mat-label" }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.ɵf, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i9.ɵw, selector: "button[type=\"submit\"]", inputs: ["dirtySubmit", "name"] }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
66
+ EmailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EmailComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: FsFormDirective, descendants: true }], ngImport: i0, template: "<form fsForm [submit]=\"submit\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Email Setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <p>The app just sent you an email with a verification code.</p>\n \n <app-code-input \n [code]=\"code\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">\n </app-code-input> \n\n <div>Did't get the code? <a (click)=\"resend()\">Resend Code</a></div>\n </ng-container>\n\n <ng-template #notVerificationMethod>\n <p>The app will only use this email for verifying your account security. </p>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input\n matInput\n [required]=\"true\"\n [(ngModel)]=\"email\"\n [fsFormEmail]=\"true\"\n name=\"email\">\n </mat-form-field>\n <mat-checkbox \n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default 2-step verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}mat-form-field{width:100%}mat-dialog-content{width:400px}p{margin-top:0}app-code-input{margin-bottom:10px;display:block}\n"], components: [{ type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i4.CodeInputComponent, selector: "app-code-input", inputs: ["codeLength", "code"], outputs: ["codeCompleted", "codeChanged"] }, { type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "successDelay", "errorDelay", "submit", "tabGroup"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatLabel, selector: "mat-label" }, { type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.ɵf, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { type: i9.ɵk, selector: "[fsFormEmail]", inputs: ["fsFormEmailMessage", "fsFormEmail"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i9.ɵw, selector: "button[type=\"submit\"]", inputs: ["dirtySubmit", "name"] }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
65
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EmailComponent, decorators: [{
66
68
  type: Component,
67
69
  args: [{
@@ -76,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
76
78
  type: ViewChild,
77
79
  args: [FsFormDirective, { static: false }]
78
80
  }] } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21hbmFnZS9jb21wb25lbnRzL2VtYWlsL2VtYWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tYW5hZ2UvY29tcG9uZW50cy9lbWFpbC9lbWFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEdBQ3pFLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTaEQsTUFBTSxPQUFPLGNBQWM7SUFXekIsWUFDbUMsS0FBVSxFQUNuQyxVQUF3QyxFQUN4QyxNQUF5QixFQUN6QixRQUFtQjtRQUhNLFVBQUssR0FBTCxLQUFLLENBQUs7UUFDbkMsZUFBVSxHQUFWLFVBQVUsQ0FBOEI7UUFDeEMsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQVB0Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFvQjFCLFdBQU0sR0FBRyxHQUFHLEVBQUU7WUFDbkIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO2lCQUNaLElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3lCQUM1RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsRUFBRTt3QkFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztvQkFDNUMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUFDO29CQUNMLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx3QkFBd0IsQ0FBQzt3QkFDbkQsSUFBSSxFQUFFLE9BQU87d0JBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3dCQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87cUJBQ3RCLENBQUM7eUJBQ0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7d0JBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQzt3QkFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDN0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNSLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDTixDQUFDLENBQUM7UUFyQ0EsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDO0lBQ3JFLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHdCQUF3QixFQUFFO2FBQ25ELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQThCTSxhQUFhO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFJO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7OzRHQTlEVSxjQUFjLGtCQVlmLGVBQWU7Z0dBWmQsY0FBYywwRkFFZCxlQUFlLGdEQ3RCNUIsaWhEQW9EQTs0RkRoQ2EsY0FBYztrQkFMMUIsU0FBUzttQkFBQztvQkFDVCxXQUFXLEVBQUUsd0JBQXdCO29CQUNyQyxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzswQkFhSSxNQUFNOzJCQUFDLGVBQWU7K0hBVGxCLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbmplY3QsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5cbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZm9ybSc7XG5cbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFR3b0ZhY3Rvck1hbmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9lbWFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtYWlsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFbWFpbENvbXBvbmVudCB7XG5cbiAgQFZpZXdDaGlsZChGc0Zvcm1EaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgZm9ybTogRnNGb3JtRGlyZWN0aXZlO1xuXG4gIHB1YmxpYyBlbWFpbDtcbiAgcHVibGljIGNvZGU7XG4gIHB1YmxpYyBkZWZhdWx0O1xuICBwdWJsaWMgdmVyaWZpY2F0aW9uTWV0aG9kID0gbnVsbDtcbiAgcHVibGljIHR3b0ZhY3Rvck1hbmFnZVNlcnZpY2U6IFR3b0ZhY3Rvck1hbmFnZVNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgX2RhdGE6IGFueSxcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxFbWFpbENvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgKSB7XG4gICAgdGhpcy50d29GYWN0b3JNYW5hZ2VTZXJ2aWNlID0gX2RhdGEudHdvRmFjdG9yTWFuYWdlU2VydmljZTtcbiAgICB0aGlzLmRlZmF1bHQgPSAhdGhpcy50d29GYWN0b3JNYW5hZ2VTZXJ2aWNlLmhhc1ZlcmlmaWNhdGlvbk1ldGhvZHM7XG4gIH1cblxuICBwdWJsaWMgcmVzZW5kKCk6IHZvaWQge1xuICAgIHRoaXMudHdvRmFjdG9yTWFuYWdlU2VydmljZS52ZXJpZmljYXRpb25NZXRob2RSZXNlbmQoKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnUmVzZW50IHZlcmlmaWNhdGlvbiBjb2RlJyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG9mKHRydWUpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52ZXJpZmljYXRpb25NZXRob2QgP1xuICAgICAgICAgICAgdGhpcy50d29GYWN0b3JNYW5hZ2VTZXJ2aWNlLnZlcmlmaWNhdGlvbk1ldGhvZFZlcmlmeSh0aGlzLmNvZGUpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgodmVyaWZpY2F0aW9uTWV0aG9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0NyZWF0ZWQgZW1haWwgdmVyaWZpY2F0aW9uIG1ldGhvZCcpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHZlcmlmaWNhdGlvbk1ldGhvZCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgdGhpcy50d29GYWN0b3JNYW5hZ2VTZXJ2aWNlLnZlcmlmaWNhdGlvbk1ldGhvZENyZWF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLFxuICAgICAgICAgICAgICBkZWZhdWx0OiB0aGlzLmRlZmF1bHQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKHZlcmlmaWNhdGlvbk1ldGhvZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy52ZXJpZmljYXRpb25NZXRob2QgPSB2ZXJpZmljYXRpb25NZXRob2Q7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH07XG5cbiAgcHVibGljIGNvZGVDb21wbGV0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLnRyaWdnZXJTdWJtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBjb2RlQ2hhbmdlZChjb2RlKTogdm9pZCB7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgfVxuXG59XG4iLCI8Zm9ybSBmc0Zvcm0gW3N1Ym1pdF09XCJzdWJtaXRcIj5cbiAgPGZzLWRpYWxvZz5cbiAgICA8aDEgbWF0LWRpYWxvZy10aXRsZT5cbiAgICAgIEVtYWlsIFNldHVwXG4gICAgPC9oMT5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZlcmlmaWNhdGlvbk1ldGhvZDsgZWxzZSBub3RWZXJpZmljYXRpb25NZXRob2RcIj5cbiAgICAgICAgPHA+VGhlIGFwcCBqdXN0IHNlbnQgeW91IGFuIGVtYWlsIHdpdGggYSB2ZXJpZmljYXRpb24gY29kZS48L3A+XG4gICAgICAgIFxuICAgICAgICA8YXBwLWNvZGUtaW5wdXQgIFxuICAgICAgICAgIFtjb2RlXT1cImNvZGVcIlxuICAgICAgICAgIChjb2RlQ2hhbmdlZCk9XCJjb2RlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoY29kZUNvbXBsZXRlZCk9XCJjb2RlQ29tcGxldGVkKClcIj5cbiAgICAgICAgPC9hcHAtY29kZS1pbnB1dD4gXG5cbiAgICAgICAgPGRpdj5EaWQndCBnZXQgdGhlIGNvZGU/IDxhIChjbGljayk9XCJyZXNlbmQoKVwiPlJlc2VuZCBDb2RlPC9hPjwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm90VmVyaWZpY2F0aW9uTWV0aG9kPlxuICAgICAgICA8cD5UaGUgYXBwIHdpbGwgb25seSB1c2UgdGhpcyBlbWFpbCBmb3IgdmVyaWZ5aW5nIHlvdXIgYWNjb3VudCBzZWN1cml0eS4gPC9wPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5FbWFpbDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1haWxcIlxuICAgICAgICAgICAgbmFtZT1cImVtYWlsXCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggXG4gICAgICAgICAgICBuYW1lPVwiZGVmYXVsdFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiPlxuICAgICAgICAgIE1ha2UgdGhpcyB0aGUgZGVmYXVsdCAyLXN0ZXAgdmVyaWZpY2F0aW9uIG1ldGhvZFxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgIE5leHRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJ1bmRlZmluZWRcIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgPC9mcy1kaWFsb2c+XG48L2Zvcm0+XG4iXX0=
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21hbmFnZS9jb21wb25lbnRzL2VtYWlsL2VtYWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tYW5hZ2UvY29tcG9uZW50cy9lbWFpbC9lbWFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEdBQ3pFLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTaEQsTUFBTSxPQUFPLGNBQWM7SUFXekIsWUFDbUMsS0FBVSxFQUNuQyxVQUF3QyxFQUN4QyxNQUF5QixFQUN6QixRQUFtQjtRQUhNLFVBQUssR0FBTCxLQUFLLENBQUs7UUFDbkMsZUFBVSxHQUFWLFVBQVUsQ0FBOEI7UUFDeEMsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQVB0Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFvQjFCLFdBQU0sR0FBRyxHQUFHLEVBQUU7WUFDbkIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO2lCQUNaLElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3lCQUM1RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsRUFBRTt3QkFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztvQkFDNUMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUFDO29CQUNMLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx3QkFBd0IsQ0FBQzt3QkFDbkQsSUFBSSxFQUFFLE9BQU87d0JBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3dCQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87cUJBQ3RCLENBQUM7eUJBQ0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7d0JBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQzt3QkFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDN0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNSLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDTixDQUFDLENBQUM7UUFyQ0EsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDO0lBQ3JFLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHdCQUF3QixFQUFFO2FBQ25ELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQThCTSxhQUFhO1FBQ2xCLElBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFJO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7OzRHQWhFVSxjQUFjLGtCQVlmLGVBQWU7Z0dBWmQsY0FBYywwRkFFZCxlQUFlLGdEQ3RCNUIscWpEQXFEQTs0RkRqQ2EsY0FBYztrQkFMMUIsU0FBUzttQkFBQztvQkFDVCxXQUFXLEVBQUUsd0JBQXdCO29CQUNyQyxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzswQkFhSSxNQUFNOzJCQUFDLGVBQWU7K0hBVGxCLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbmplY3QsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5cbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZm9ybSc7XG5cbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFR3b0ZhY3Rvck1hbmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9lbWFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtYWlsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFbWFpbENvbXBvbmVudCB7XG5cbiAgQFZpZXdDaGlsZChGc0Zvcm1EaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgZm9ybTogRnNGb3JtRGlyZWN0aXZlO1xuXG4gIHB1YmxpYyBlbWFpbDtcbiAgcHVibGljIGNvZGU7XG4gIHB1YmxpYyBkZWZhdWx0O1xuICBwdWJsaWMgdmVyaWZpY2F0aW9uTWV0aG9kID0gbnVsbDtcbiAgcHVibGljIHR3b0ZhY3Rvck1hbmFnZVNlcnZpY2U6IFR3b0ZhY3Rvck1hbmFnZVNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgX2RhdGE6IGFueSxcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxFbWFpbENvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgKSB7XG4gICAgdGhpcy50d29GYWN0b3JNYW5hZ2VTZXJ2aWNlID0gX2RhdGEudHdvRmFjdG9yTWFuYWdlU2VydmljZTtcbiAgICB0aGlzLmRlZmF1bHQgPSAhdGhpcy50d29GYWN0b3JNYW5hZ2VTZXJ2aWNlLmhhc1ZlcmlmaWNhdGlvbk1ldGhvZHM7XG4gIH1cblxuICBwdWJsaWMgcmVzZW5kKCk6IHZvaWQge1xuICAgIHRoaXMudHdvRmFjdG9yTWFuYWdlU2VydmljZS52ZXJpZmljYXRpb25NZXRob2RSZXNlbmQoKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnUmVzZW50IHZlcmlmaWNhdGlvbiBjb2RlJyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG9mKHRydWUpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52ZXJpZmljYXRpb25NZXRob2QgP1xuICAgICAgICAgICAgdGhpcy50d29GYWN0b3JNYW5hZ2VTZXJ2aWNlLnZlcmlmaWNhdGlvbk1ldGhvZFZlcmlmeSh0aGlzLmNvZGUpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgodmVyaWZpY2F0aW9uTWV0aG9kKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0NyZWF0ZWQgZW1haWwgdmVyaWZpY2F0aW9uIG1ldGhvZCcpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHZlcmlmaWNhdGlvbk1ldGhvZCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgdGhpcy50d29GYWN0b3JNYW5hZ2VTZXJ2aWNlLnZlcmlmaWNhdGlvbk1ldGhvZENyZWF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLFxuICAgICAgICAgICAgICBkZWZhdWx0OiB0aGlzLmRlZmF1bHQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKHZlcmlmaWNhdGlvbk1ldGhvZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy52ZXJpZmljYXRpb25NZXRob2QgPSB2ZXJpZmljYXRpb25NZXRob2Q7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH07XG5cbiAgcHVibGljIGNvZGVDb21wbGV0ZWQoKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuZm9ybS5zdWJtaXR0aW5nKSB7XG4gICAgICB0aGlzLmZvcm0udHJpZ2dlclN1Ym1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb2RlQ2hhbmdlZChjb2RlKTogdm9pZCB7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgfVxuXG59XG4iLCI8Zm9ybSBmc0Zvcm0gW3N1Ym1pdF09XCJzdWJtaXRcIj5cbiAgPGZzLWRpYWxvZz5cbiAgICA8aDEgbWF0LWRpYWxvZy10aXRsZT5cbiAgICAgIEVtYWlsIFNldHVwXG4gICAgPC9oMT5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZlcmlmaWNhdGlvbk1ldGhvZDsgZWxzZSBub3RWZXJpZmljYXRpb25NZXRob2RcIj5cbiAgICAgICAgPHA+VGhlIGFwcCBqdXN0IHNlbnQgeW91IGFuIGVtYWlsIHdpdGggYSB2ZXJpZmljYXRpb24gY29kZS48L3A+XG4gICAgICAgIFxuICAgICAgICA8YXBwLWNvZGUtaW5wdXQgIFxuICAgICAgICAgIFtjb2RlXT1cImNvZGVcIlxuICAgICAgICAgIChjb2RlQ2hhbmdlZCk9XCJjb2RlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoY29kZUNvbXBsZXRlZCk9XCJjb2RlQ29tcGxldGVkKClcIj5cbiAgICAgICAgPC9hcHAtY29kZS1pbnB1dD4gXG5cbiAgICAgICAgPGRpdj5EaWQndCBnZXQgdGhlIGNvZGU/IDxhIChjbGljayk9XCJyZXNlbmQoKVwiPlJlc2VuZCBDb2RlPC9hPjwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm90VmVyaWZpY2F0aW9uTWV0aG9kPlxuICAgICAgICA8cD5UaGUgYXBwIHdpbGwgb25seSB1c2UgdGhpcyBlbWFpbCBmb3IgdmVyaWZ5aW5nIHlvdXIgYWNjb3VudCBzZWN1cml0eS4gPC9wPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5FbWFpbDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1haWxcIlxuICAgICAgICAgICAgW2ZzRm9ybUVtYWlsXT1cInRydWVcIlxuICAgICAgICAgICAgbmFtZT1cImVtYWlsXCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggXG4gICAgICAgICAgICBuYW1lPVwiZGVmYXVsdFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiPlxuICAgICAgICAgIE1ha2UgdGhpcyB0aGUgZGVmYXVsdCAyLXN0ZXAgdmVyaWZpY2F0aW9uIG1ldGhvZFxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgIE5leHRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJ1bmRlZmluZWRcIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgPC9mcy1kaWFsb2c+XG48L2Zvcm0+XG4iXX0=