@foodmarketmaker/marketmaker-auth 0.0.4
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foodmarketmaker-marketmaker-auth.mjs","sources":["../../../projects/marketmaker-auth/src/lib/auth/auth.service.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-types.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-state.service.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-signin/auth-signin.component.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-signin/auth-signin.component.html","../../../projects/marketmaker-auth/src/lib/auth/auth-utils.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-signup/auth-signup.component.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-signup/auth-signup.component.html","../../../projects/marketmaker-auth/src/lib/auth/auth-forgot/auth-forgot.component.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-forgot/auth-forgot.component.html","../../../projects/marketmaker-auth/src/lib/auth/auth-confirm-signup/auth-confirm-signup.component.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-confirm-signup/auth-confirm-signup.component.html","../../../projects/marketmaker-auth/src/lib/auth/auth-confirm-reset/auth-confirm-reset.component.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-confirm-reset/auth-confirm-reset.component.html","../../../projects/marketmaker-auth/src/lib/auth/auth-modal/auth-modal.component.ts","../../../projects/marketmaker-auth/src/lib/auth/auth-modal/auth-modal.component.html","../../../projects/marketmaker-auth/src/public-api.ts","../../../projects/marketmaker-auth/src/foodmarketmaker-marketmaker-auth.ts"],"sourcesContent":["import { computed, Injectable, signal, Signal } from '@angular/core'\nimport { Amplify } from 'aws-amplify'\nimport { CookieStorage } from 'aws-amplify/utils'\nimport { cognitoUserPoolsTokenProvider } from 'aws-amplify/auth/cognito'\nimport {\n confirmResetPassword,\n confirmSignUp,\n fetchAuthSession,\n JWT,\n resetPassword,\n resendSignUpCode,\n signIn,\n signInWithRedirect,\n signOut,\n signUp,\n SignUpOutput,\n} from 'aws-amplify/auth'\n\nexport const SignUpNextSteps = {\n DONE: 'DONE',\n CONFIRM_SIGN_UP: 'CONFIRM_SIGN_UP',\n} as const\nexport type SignUpNextStep = keyof typeof SignUpNextSteps | string\n\nexport type SignUpResponse = {\n isSignedUp: boolean\n nextStep?: SignUpNextStep\n error?: string\n}\n\nexport type ResendCodeResponse = {\n isCodeRequested: boolean\n error?: string\n}\n\nexport const SignInNextSteps = {\n DONE: 'DONE',\n RESET_PASSWORD: 'RESET_PASSWORD',\n CONFIRM_SIGN_UP: 'CONFIRM_SIGN_UP',\n} as const\nexport type SignInNextStep = keyof typeof SignInNextSteps | string\n\nexport type SignInResponse = {\n isSignedIn: boolean\n nextStep?: SignInNextStep\n error?: string\n}\n\nexport const ResetPasswordNextSteps = {\n DONE: 'DONE',\n CONFIRM_RESET_PASSWORD_WITH_CODE: 'CONFIRM_RESET_PASSWORD_WITH_CODE',\n} as const\nexport type ResetPasswordNextStep = keyof typeof ResetPasswordNextSteps | string\n\nexport type ResetPasswordResponse = {\n isPasswordReset: boolean\n nextStep?: ResetPasswordNextStep\n error?: string\n}\n\nexport type ConfirmResetPasswordResponse = {\n isPasswordReset: boolean\n error?: string\n}\n\nexport interface SignInCredentials {\n username: string\n password: string\n}\n\nexport interface SignUpCredentials extends SignInCredentials {\n email: string\n}\n\nexport const AMAZON = 'Amazon'\nexport const APPLE = 'Apple'\nexport const FACEBOOK = 'Facebook'\nexport const GOOGLE = 'Google'\nexport type AuthProvider = typeof AMAZON | typeof APPLE | typeof FACEBOOK | typeof GOOGLE\n\ntype CognitoException = {\n __type: string\n message: string\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private readonly devClientId = '2q2fh1vn4c2ce9nfe516tl1dld'\n private readonly prodClientId = '76htqb41727bo3v0096hpl8qnm'\n\n private _signedInSignal = signal<boolean>(false)\n private _usernameSignal = signal<string | undefined>(undefined)\n private _idTokenSignal = signal<JWT | undefined>(undefined)\n private _accessTokenSignal = signal<JWT | undefined>(undefined)\n\n public impersonating = false\n public impersonatingEmail: string | undefined = undefined\n\n constructor() {\n this.initAuth()\n this.refreshSession().then(() => {\n console.log('AuthService: session refreshed')\n })\n }\n\n public get signedInSignal(): Signal<boolean> {\n return this._signedInSignal.asReadonly()\n }\n\n public get idTokenSignal(): Signal<JWT | undefined> {\n return this._idTokenSignal.asReadonly()\n }\n\n public get accessTokenSignal(): Signal<JWT | undefined> {\n return this._accessTokenSignal.asReadonly()\n }\n\n public get usernameSignal(): Signal<string | undefined> {\n return this._usernameSignal.asReadonly()\n }\n\n public bearerTokenSignal: Signal<string | undefined> = computed(() => {\n const token = this._idTokenSignal()\n return token ? `Bearer ${token.toString()}` : undefined\n })\n\n public get emailSignal(): Signal<string | undefined> {\n return computed(() => this.extractFromIdToken('email'))\n }\n\n public get nameSignal(): Signal<string | undefined> {\n return computed(() => this.extractFromIdToken('name'))\n }\n\n public get pictureSignal(): Signal<string | undefined> {\n return computed(() => this.extractFromIdToken('picture'))\n }\n\n public get signedIn(): boolean {\n return this._signedInSignal()\n }\n\n public get bearerToken(): string | undefined {\n return this.bearerTokenSignal()\n }\n\n public get email(): string | undefined {\n return this.emailSignal()\n }\n\n private buildPoolConfig() {\n const url = location.origin + '/'\n const isLocal = location.host.startsWith('local')\n return {\n userPoolClientId: isLocal ? this.devClientId : this.prodClientId,\n redirectSignInUrl: url,\n redirectSignOutUrl: url,\n }\n }\n\n private initAuth() {\n const config = this.buildPoolConfig()\n Amplify.configure({\n Auth: {\n Cognito: {\n userPoolId: 'us-west-2_p1Epu0go8',\n userPoolClientId: config.userPoolClientId,\n identityPoolId: 'us-west-2:008f23d3-6c9f-4aa4-ad6f-6a4db545024c',\n loginWith: {\n oauth: {\n domain: 'signinsample98d73a66-98d73a66-dev.auth.us-west-2.amazoncognito.com',\n scopes: ['phone', 'email', 'openid', 'profile', 'aws.cognito.signin.user.admin'],\n redirectSignIn: [config.redirectSignInUrl],\n redirectSignOut: [config.redirectSignOutUrl],\n responseType: 'code',\n },\n },\n },\n },\n })\n\n const domain = this.domainFromUrl(window.location.href) ?? undefined\n const secure = window.location.protocol.includes('https')\n cognitoUserPoolsTokenProvider.setKeyValueStorage(\n new CookieStorage({\n domain,\n path: '/',\n sameSite: 'strict',\n expires: 31,\n secure,\n }),\n )\n }\n\n private domainFromUrl(url: string): string | null {\n const lower = url.toLowerCase()\n if (lower.includes('localhost')) return 'localhost'\n if (lower.includes('betafoodmarketmaker.com')) return 'betafoodmarketmaker.com'\n if (lower.includes('foodmarketmaker.com')) return 'foodmarketmaker.com'\n return null\n }\n\n public async signIn(credentials: SignInCredentials): Promise<SignInResponse> {\n try {\n const { isSignedIn, nextStep } = await signIn({\n username: credentials.username,\n password: credentials.password,\n })\n if (isSignedIn) {\n await this.refreshSession()\n return { isSignedIn: true }\n }\n return { isSignedIn: false, nextStep: nextStep.signInStep }\n } catch (error) {\n return { isSignedIn: false, error: this.errorMessage(error, 'sign in', credentials.username) }\n }\n }\n\n public async signUp(credentials: SignUpCredentials): Promise<SignUpResponse> {\n try {\n const { isSignUpComplete, nextStep } = await signUp({\n username: credentials.username,\n password: credentials.password,\n options: { userAttributes: { email: credentials.email } },\n })\n if (isSignUpComplete) return { isSignedUp: true }\n return { isSignedUp: false, nextStep: nextStep.signUpStep }\n } catch (error) {\n return { isSignedUp: false, error: this.errorMessage(error, 'sign up', credentials.username) }\n }\n }\n\n public async confirmSignUp(username: string, code: string): Promise<SignUpResponse> {\n try {\n const { isSignUpComplete, nextStep } = await confirmSignUp({ username, confirmationCode: code })\n if (isSignUpComplete) return { isSignedUp: true }\n return { isSignedUp: false, nextStep: nextStep.signUpStep }\n } catch (error) {\n return { isSignedUp: false, error: this.errorMessage(error, 'confirm account', username) }\n }\n }\n\n public async resendSignUpCode(username: string): Promise<ResendCodeResponse> {\n try {\n await resendSignUpCode({ username })\n return { isCodeRequested: true }\n } catch (error) {\n return { isCodeRequested: false, error: this.errorMessage(error, 'resend code', username) }\n }\n }\n\n public async socialSignIn(provider: AuthProvider): Promise<SignInResponse> {\n try {\n await signInWithRedirect({ provider: provider as AuthProvider })\n await this.refreshSession()\n return { isSignedIn: true }\n } catch (error) {\n return { isSignedIn: false, error: this.errorMessage(error, 'social sign in') }\n }\n }\n\n public async signOut() {\n if (!this.signedIn) return\n try {\n await signOut()\n } catch (error) {\n console.error('AuthService: signOut error', error)\n } finally {\n this._signedInSignal.set(false)\n this._idTokenSignal.set(undefined)\n this._accessTokenSignal.set(undefined)\n }\n }\n\n public async resetPassword(username: string): Promise<ResetPasswordResponse> {\n try {\n const { isPasswordReset, nextStep } = await resetPassword({ username })\n if (isPasswordReset) return { isPasswordReset: true }\n return { isPasswordReset: false, nextStep: nextStep.resetPasswordStep }\n } catch (error) {\n return { isPasswordReset: false, error: this.errorMessage(error, 'reset password', username) }\n }\n }\n\n public async confirmResetPassword(\n username: string,\n newPassword: string,\n code: string,\n ): Promise<ConfirmResetPasswordResponse> {\n try {\n await confirmResetPassword({ username, confirmationCode: code, newPassword })\n return { isPasswordReset: true }\n } catch (error) {\n return { isPasswordReset: false, error: this.errorMessage(error, 'confirm new password', username) }\n }\n }\n\n public async refreshSession() {\n const { idToken, accessToken } = (await fetchAuthSession()).tokens ?? {}\n if (idToken !== this._idTokenSignal()) {\n this._idTokenSignal.set(idToken)\n this._signedInSignal.set(idToken != null)\n }\n if (accessToken !== this._accessTokenSignal()) {\n this._accessTokenSignal.set(accessToken)\n }\n }\n\n public isAdmin(): boolean {\n return this.hasRole('admin')\n }\n\n public hasRole(rolename: string): boolean {\n const groups = this.getUserGroups()\n return groups.indexOf(rolename) >= 0\n }\n\n public impersonate(email: string): boolean {\n if (!this.isAdmin()) return false\n localStorage.setItem('impersonating-email', email)\n localStorage.setItem('impersonating', 'true')\n this.impersonating = true\n this.impersonatingEmail = email\n return true\n }\n\n public cancelImpersonate() {\n this.impersonating = false\n this.impersonatingEmail = undefined\n localStorage.removeItem('impersonating-email')\n localStorage.setItem('impersonating', 'false')\n }\n\n private getUserGroups(): string[] {\n const payload = this._idTokenSignal()?.payload\n if (payload && 'cognito:groups' in payload) {\n return payload['cognito:groups'] as string[]\n }\n return []\n }\n\n private extractFromIdToken(property: string): string | undefined {\n const payload = this._idTokenSignal()?.payload\n if (!payload) return undefined\n return property in payload ? (payload[property] as string) : undefined\n }\n\n private errorMessage(error: unknown, operation: string, username?: string): string {\n const e = error as CognitoException\n if (e?.__type) {\n if (e.__type === 'UserNotFoundException' && username) return `The user \"${username}\" was not found.`\n if (e.__type === 'LimitExceededException') return `Too many ${operation} attempts.`\n if (e.__type === 'UsernameExistsException') return 'User already exists.'\n }\n if (e?.message) {\n return e.message.includes(':') ? e.message.split(':')[1].trim() : e.message\n }\n return 'An unknown error occurred.'\n }\n}\n","export type ValidationResult = {\n error: boolean\n message?: string\n}\n\nexport const AuthModes = {\n SIGN_IN: 'sign-in',\n SIGN_UP: 'sign-up',\n FORGOT_PASSWORD: 'forgot-password',\n CONFIRM_ACCOUNT: 'confirm-account',\n CONFIRM_PASSWORD_RESET: 'confirm-password-reset',\n} as const\n\nexport type AuthMode = keyof typeof AuthModes | string\n","import { Injectable, signal } from '@angular/core'\nimport { AuthMode, AuthModes } from './auth-types'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthStateService {\n private _usernameSignal = signal<string>('')\n private _passwordSignal = signal<string>('')\n private _emailSignal = signal<string>('')\n private _modeSignal = signal<AuthMode>(AuthModes.SIGN_IN)\n private _errorSignal = signal<string | null>(null)\n private _autoCloseSignal = signal<boolean>(false)\n private _displayingSignal = signal<boolean>(false)\n private _willCloseSignal = signal<boolean>(false)\n\n public get modeSignal() {\n return this._modeSignal.asReadonly()\n }\n\n public setMode(mode: AuthMode) {\n this._modeSignal.set(mode)\n }\n\n public get displayingSignal() {\n return this._displayingSignal.asReadonly()\n }\n\n public open() {\n this.setMode(AuthModes.SIGN_IN)\n this._displayingSignal.set(true)\n }\n\n public close() {\n this._willCloseSignal.set(true)\n }\n\n public didClose() {\n this._willCloseSignal.set(false)\n this._displayingSignal.set(false)\n }\n\n public get willCloseSignal() {\n return this._willCloseSignal.asReadonly()\n }\n\n public get usernameSignal() {\n return this._usernameSignal.asReadonly()\n }\n\n public setUsername(username: string) {\n this._usernameSignal.set(username)\n }\n\n public get passwordSignal() {\n return this._passwordSignal.asReadonly()\n }\n\n public setPassword(password: string) {\n this._passwordSignal.set(password)\n }\n\n public get emailSignal() {\n return this._emailSignal.asReadonly()\n }\n\n public setEmail(email: string) {\n this._emailSignal.set(email)\n }\n\n public get errorSignal() {\n return this._errorSignal.asReadonly()\n }\n\n public setError(error: string) {\n this._errorSignal.set(error)\n }\n\n public resetError() {\n this._errorSignal.set(null)\n }\n\n public get autoCloseSignal() {\n return this._autoCloseSignal.asReadonly()\n }\n\n public setAutoCloseError(message: string, delay: number = 4000) {\n this._autoCloseSignal.set(true)\n this.setError(message)\n setTimeout(() => {\n this._autoCloseSignal.set(false)\n this.resetError()\n }, delay)\n }\n}\n","import { Component, ElementRef, ViewChild, AfterViewInit, inject, Signal, computed, effect, ChangeDetectionStrategy } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { AuthService, AuthProvider, GOOGLE, AMAZON, FACEBOOK, SignInNextSteps } from '../auth.service'\nimport { AuthStateService } from '../auth-state.service'\nimport { AuthModes } from '../auth-types'\n\n@Component({\n selector: 'mma-auth-signin',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './auth-signin.component.html',\n styleUrls: ['./auth-signin.component.css', '../auth.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthSignInComponent implements AfterViewInit {\n private auth = inject(AuthService)\n protected authState = inject(AuthStateService)\n\n @ViewChild('usernameInput', { static: false }) usernameInput!: ElementRef\n\n public username = ''\n public password = ''\n public signInBusy = false\n\n public readonly amazon: AuthProvider = AMAZON\n public readonly google: AuthProvider = GOOGLE\n public readonly facebook: AuthProvider = FACEBOOK\n\n public readonly heading = 'Sign in to MarketMaker'\n public readonly welcome = 'Welcome back! Please sign in to continue.'\n\n public haveUsername: Signal<boolean> = computed(() => this.username.trim().length > 6)\n\n constructor() {\n effect(() => { this.password = this.authState.passwordSignal() })\n effect(() => { this.username = this.authState.usernameSignal() })\n }\n\n ngAfterViewInit() {\n this.usernameInput?.nativeElement.focus()\n }\n\n onSignIn() {\n this.signInBusy = true\n this.auth.signIn({ username: this.username, password: this.password }).then((res) => {\n this.signInBusy = false\n if (res.isSignedIn) {\n this.notifyClose()\n } else if (res.error) {\n this.authState.setError(res.error)\n } else if (res.nextStep === SignInNextSteps.CONFIRM_SIGN_UP) {\n this.onSwitchConfirmAccount()\n } else if (res.nextStep === SignInNextSteps.RESET_PASSWORD) {\n this.onSwitchPasswordReset()\n }\n })\n }\n\n onSocialSignIn(provider: AuthProvider) {\n this.signInBusy = true\n this.auth.socialSignIn(provider).then(() => {\n this.signInBusy = false\n this.notifyClose()\n })\n }\n\n private notifyClose() {\n this.saveCredentials()\n this.authState.close()\n }\n\n private saveCredentials() {\n this.authState.setPassword(this.password)\n this.authState.setUsername(this.username)\n }\n\n onSwitchSignUp() {\n this.saveCredentials()\n this.authState.setMode(AuthModes.SIGN_UP)\n }\n\n onSwitchPasswordReset() {\n this.saveCredentials()\n this.authState.setMode(AuthModes.FORGOT_PASSWORD)\n }\n\n onSwitchConfirmAccount() {\n this.saveCredentials()\n this.authState.setMode(AuthModes.CONFIRM_ACCOUNT)\n }\n}\n","<div class=\"auth-container\">\n <div class=\"messages\">\n <div class=\"sign-in-msg main\">{{ heading }}</div>\n <div class=\"sign-in-msg secondary\">{{ welcome }}</div>\n </div>\n <div class=\"sign-in-row row\"></div>\n\n <div class=\"social-buttons-container\">\n <button class=\"social-button\" (click)=\"onSocialSignIn(amazon)\" title=\"Sign in with Amazon\">\n <div class=\"social-button-inner\"><div class=\"social-logo amazon\"></div></div>\n </button>\n <button class=\"social-button\" (click)=\"onSocialSignIn(google)\" title=\"Sign in with Google\">\n <div class=\"social-button-inner\"><div class=\"social-logo google\"></div></div>\n </button>\n <button class=\"social-button\" (click)=\"onSocialSignIn(facebook)\" title=\"Sign in with Facebook\">\n <div class=\"social-button-inner\"><div class=\"social-logo facebook\"></div></div>\n </button>\n </div>\n\n <div class=\"method-divider\">\n <div class=\"divider\"></div>\n <span class=\"method-label\">or</span>\n <div class=\"divider\"></div>\n </div>\n\n <div class=\"sign-in-row column\">\n <label for=\"username\" class=\"sign-in-label\">Username</label>\n <input\n class=\"sign-in-input\"\n id=\"username\"\n name=\"username\"\n [(ngModel)]=\"username\"\n spellcheck=\"false\"\n autocomplete=\"username\"\n autocapitalize=\"none\"\n placeholder=\"Enter your username\"\n #usernameInput\n />\n </div>\n\n <div class=\"sign-in-row column\">\n <label for=\"password\" class=\"sign-in-label\">Password</label>\n <input\n class=\"sign-in-input\"\n id=\"password\"\n name=\"password\"\n [(ngModel)]=\"password\"\n type=\"password\"\n autocomplete=\"current-password\"\n spellcheck=\"false\"\n autocapitalize=\"none\"\n placeholder=\"Enter your password\"\n />\n <span class=\"forgot-password\" (click)=\"onSwitchPasswordReset()\">Forgot password?</span>\n </div>\n\n <div class=\"buttons-bottom\">\n <button class=\"btn btn-secondary\" (click)=\"authState.close()\">Cancel</button>\n <button class=\"btn btn-important\" [disabled]=\"signInBusy\" (click)=\"onSignIn()\">Sign In</button>\n </div>\n\n <div class=\"sign-in-row switch\">\n Don't have an account? \n <span class=\"switch-mode\" (click)=\"onSwitchSignUp()\">Sign up</span>\n </div>\n</div>\n","export const filterUsername = (value: string): string => {\n return value.replace(/\\s/g, '')\n}\n\nexport const filterPassword = (value: string): string => {\n return value.trim()\n}\n\nexport const validateOtpCode = (code: string): boolean => {\n if (!code || code.length !== 6) {\n return false\n }\n for (let i = 0; i < 6; i++) {\n if (code[i] < '0' || code[i] > '9') {\n return false\n }\n }\n return true\n}\n\nexport const validateEmail = (email: string): boolean => {\n const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\n return emailRegex.test(email)\n}\n\nexport const validatePassword = (password: string): boolean => {\n return password.length >= 8\n}\n","import { Component, ElementRef, ViewChild, AfterViewInit, inject, Signal, computed, effect, ChangeDetectionStrategy } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { AuthService, AuthProvider, GOOGLE, AMAZON, FACEBOOK, SignUpNextSteps, SignUpResponse } from '../auth.service'\nimport { AuthStateService } from '../auth-state.service'\nimport { AuthModes } from '../auth-types'\nimport { validateEmail, validatePassword } from '../auth-utils'\n\n@Component({\n selector: 'mma-auth-signup',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './auth-signup.component.html',\n styleUrls: ['./auth-signup.component.css', '../auth.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthSignUpComponent implements AfterViewInit {\n private auth = inject(AuthService)\n protected authState = inject(AuthStateService)\n\n @ViewChild('usernameInput', { static: false }) usernameInput!: ElementRef\n @ViewChild('emailInput', { static: false }) emailInput!: ElementRef\n @ViewChild('passwordInput', { static: false }) passwordInput!: ElementRef\n\n public username = ''\n public email = ''\n public password = ''\n public signUpBusy = false\n\n public readonly amazon: AuthProvider = AMAZON\n public readonly google: AuthProvider = GOOGLE\n public readonly facebook: AuthProvider = FACEBOOK\n\n public readonly heading = 'Sign up with MarketMaker'\n public readonly welcome = 'Welcome! Sign in with Amazon, Google or Facebook, or fill in your details to get started.'\n\n public haveUsername: Signal<boolean> = computed(() => this.username.trim().length > 5)\n\n constructor() {\n effect(() => { this.password = this.authState.passwordSignal() })\n effect(() => { this.username = this.authState.usernameSignal() })\n effect(() => { this.email = this.authState.emailSignal() })\n }\n\n ngAfterViewInit() {\n this.usernameInput?.nativeElement.focus()\n }\n\n onSignUp() {\n if (!this.validateInput()) return\n this.signUpBusy = true\n this.auth.signUp({ username: this.username, email: this.email, password: this.password }).then((res) => {\n this.signUpBusy = false\n this.handleSignUpResponse(res)\n })\n }\n\n private handleSignUpResponse(res: SignUpResponse) {\n if (res.error) {\n this.authState.setError(res.error)\n return\n }\n if (!res.isSignedUp && res.nextStep === SignUpNextSteps.CONFIRM_SIGN_UP) {\n this.onSwitchConfirmAccount()\n } else {\n this.saveCredentials()\n this.authState.close()\n }\n }\n\n onSocialSignIn(provider: AuthProvider) {\n this.auth.socialSignIn(provider)\n this.authState.close()\n }\n\n onSwitchSignIn() {\n this.saveCredentials()\n this.authState.setMode(AuthModes.SIGN_IN)\n }\n\n onSwitchConfirmAccount() {\n this.saveCredentials()\n this.authState.setMode(AuthModes.CONFIRM_ACCOUNT)\n }\n\n private saveCredentials() {\n this.authState.setPassword(this.password)\n this.authState.setUsername(this.username)\n this.authState.setEmail(this.email)\n }\n\n private validateInput(): boolean {\n if (this.username.length < 6) {\n this.usernameInput?.nativeElement.focus()\n this.authState.setAutoCloseError('Username must be at least six characters in length')\n return false\n }\n if (/\\s/.test(this.username)) {\n this.usernameInput?.nativeElement.focus()\n this.authState.setAutoCloseError('Username may not include whitespace characters')\n return false\n }\n if (!validateEmail(this.email)) {\n this.emailInput?.nativeElement.focus()\n this.authState.setAutoCloseError('Please enter a valid email address')\n return false\n }\n if (!validatePassword(this.password)) {\n this.passwordInput?.nativeElement.focus()\n this.authState.setAutoCloseError('Password must be at least 8 characters in length')\n return false\n }\n return true\n }\n}\n","<div class=\"auth-container\">\n <div class=\"messages\">\n <div class=\"sign-in-msg main\">{{ heading }}</div>\n <div class=\"sign-in-msg secondary\">{{ welcome }}</div>\n </div>\n <div class=\"sign-in-row row\"></div>\n\n <div class=\"social-buttons-container\">\n <button class=\"social-button\" (click)=\"onSocialSignIn(amazon)\" title=\"Sign in with Amazon\">\n <div class=\"social-button-inner\"><div class=\"social-logo amazon\"></div></div>\n </button>\n <button class=\"social-button\" (click)=\"onSocialSignIn(google)\" title=\"Sign in with Google\">\n <div class=\"social-button-inner\"><div class=\"social-logo google\"></div></div>\n </button>\n <button class=\"social-button\" (click)=\"onSocialSignIn(facebook)\" title=\"Sign in with Facebook\">\n <div class=\"social-button-inner\"><div class=\"social-logo facebook\"></div></div>\n </button>\n </div>\n\n <div class=\"method-divider\">\n <div class=\"divider\"></div>\n <span class=\"method-label\">or</span>\n <div class=\"divider\"></div>\n </div>\n\n <div class=\"sign-in-row column\">\n <label for=\"username\" class=\"sign-in-label\">Username</label>\n <input\n class=\"sign-in-input\"\n id=\"username\"\n name=\"username\"\n [(ngModel)]=\"username\"\n spellcheck=\"false\"\n autocomplete=\"username\"\n autocorrect=\"off\"\n autocapitalize=\"none\"\n placeholder=\"Enter your username\"\n #usernameInput\n />\n </div>\n\n <div class=\"sign-in-row column\">\n <label for=\"email\" class=\"sign-in-label\">Email address</label>\n <input\n class=\"sign-in-input\"\n id=\"email\"\n name=\"email\"\n [(ngModel)]=\"email\"\n type=\"email\"\n autocomplete=\"none\"\n spellcheck=\"false\"\n autocapitalize=\"none\"\n placeholder=\"Enter your email address\"\n #emailInput\n />\n </div>\n\n <div class=\"sign-in-row column\">\n <label for=\"password\" class=\"sign-in-label\">Password</label>\n <input\n class=\"sign-in-input\"\n id=\"password\"\n name=\"password\"\n [(ngModel)]=\"password\"\n type=\"password\"\n spellcheck=\"false\"\n autocomplete=\"new-password\"\n autocapitalize=\"none\"\n placeholder=\"Enter your password\"\n #passwordInput\n />\n </div>\n\n <div class=\"buttons-bottom\">\n <button class=\"btn btn-secondary\" (click)=\"authState.close()\">Cancel</button>\n <button class=\"btn btn-important\" [disabled]=\"signUpBusy\" (click)=\"onSignUp()\">Register</button>\n </div>\n\n <div class=\"sign-in-row switch\">\n Already have an account? \n <span class=\"switch-mode\" (click)=\"onSwitchSignIn()\">Sign in</span>\n </div>\n</div>\n","import { Component, ElementRef, ViewChild, AfterViewInit, inject, Signal, computed, effect, ChangeDetectionStrategy } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { AuthService, ResetPasswordNextSteps } from '../auth.service'\nimport { AuthStateService } from '../auth-state.service'\nimport { AuthModes } from '../auth-types'\n\n@Component({\n selector: 'mma-auth-forgot',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './auth-forgot.component.html',\n styleUrls: ['./auth-forgot.component.css', '../auth.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthForgotComponent implements AfterViewInit {\n private auth = inject(AuthService)\n protected authState = inject(AuthStateService)\n\n @ViewChild('usernameInput', { static: false }) usernameInput!: ElementRef\n\n public username = ''\n public forgotBusy = false\n\n public readonly heading = 'Forgot your password?'\n public readonly welcome = 'Enter your username and we will send a message to reset your password.'\n\n public haveUsername: Signal<boolean> = computed(() => this.username.trim().length > 6)\n\n constructor() {\n effect(() => { this.username = this.authState.usernameSignal() })\n }\n\n ngAfterViewInit() {\n this.usernameInput?.nativeElement.focus()\n }\n\n notifyClose() {\n this.authState.setUsername(this.username)\n this.authState.close()\n }\n\n onPasswordReset() {\n this.forgotBusy = true\n this.auth.resetPassword(this.username).then((res) => {\n this.forgotBusy = false\n if (res.isPasswordReset) {\n this.notifyClose()\n } else if (res.nextStep === ResetPasswordNextSteps.CONFIRM_RESET_PASSWORD_WITH_CODE) {\n this.authState.setUsername(this.username)\n this.authState.setMode(AuthModes.CONFIRM_PASSWORD_RESET)\n } else if (res.error) {\n this.authState.setError(res.error)\n }\n })\n }\n}\n","<div class=\"auth-container\">\n <div class=\"messages\">\n <div class=\"sign-in-msg main\">{{ heading }}</div>\n <div class=\"sign-in-msg secondary\">{{ welcome }}</div>\n </div>\n <div class=\"sign-in-row row\"></div>\n\n <div class=\"sign-in-row column\">\n <label for=\"username\" class=\"sign-in-label\">Username</label>\n <input\n class=\"sign-in-input\"\n id=\"username\"\n name=\"username\"\n [(ngModel)]=\"username\"\n spellcheck=\"false\"\n autocomplete=\"username\"\n autocorrect=\"off\"\n autocapitalize=\"none\"\n placeholder=\"Enter your username\"\n #usernameInput\n />\n </div>\n\n <div class=\"buttons-bottom forgot-password-buttons-bottom\">\n <button class=\"btn btn-secondary\" (click)=\"notifyClose()\">Cancel</button>\n <button class=\"btn btn-important\" [disabled]=\"forgotBusy\" (click)=\"onPasswordReset()\">Reset Password</button>\n </div>\n</div>\n","import { Component, ViewChild, inject, effect, ChangeDetectionStrategy } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { NgxOtpInputComponent } from 'ngx-otp-input'\nimport { AuthService, SignUpResponse, ResendCodeResponse } from '../auth.service'\nimport { AuthStateService } from '../auth-state.service'\nimport { AuthModes } from '../auth-types'\nimport { validateOtpCode } from '../auth-utils'\n\n@Component({\n selector: 'mma-auth-confirm-signup',\n standalone: true,\n imports: [FormsModule, NgxOtpInputComponent],\n templateUrl: './auth-confirm-signup.component.html',\n styleUrls: ['./auth-confirm-signup.component.css', '../auth.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthConfirmSignupComponent {\n private auth = inject(AuthService)\n protected authState = inject(AuthStateService)\n\n @ViewChild('confirmSignupOtp') confirmSignupOtp?: NgxOtpInputComponent\n\n public username = ''\n public email = ''\n public code = ''\n public confirmBusy = false\n\n public readonly heading = 'Confirm registration'\n public get welcome(): string {\n return `We have sent a code to ${this.concealEmail()}. Enter the code below to confirm your new account.`\n }\n\n constructor() {\n effect(() => { this.email = this.authState.emailSignal() })\n effect(() => { this.username = this.authState.usernameSignal() })\n }\n\n public onOtpChange(event: { value: string; isComplete: boolean }) {\n this.code = event.value\n }\n\n public onOtpComplete(otp: string) {\n this.code = otp\n }\n\n onConfirmAccount() {\n if (!validateOtpCode(this.code)) {\n this.authState.setAutoCloseError('Code must be exactly six numerals')\n return\n }\n this.confirmBusy = true\n this.auth.confirmSignUp(this.username, this.code).then((res: SignUpResponse) => {\n this.confirmBusy = false\n if (res.error) {\n this.authState.setError(res.error)\n } else if (res.isSignedUp) {\n this.authState.setMode(AuthModes.SIGN_IN)\n }\n }).finally(() => { this.confirmBusy = false })\n }\n\n onSendNewCode() {\n this.auth.resendSignUpCode(this.username).then((res: ResendCodeResponse) => {\n if (res.error) {\n this.authState.setError(res.error)\n }\n })\n }\n\n notifyClose() {\n this.authState.close()\n }\n\n private concealEmail(): string {\n if (!this.email || this.email.length < 5) return 'your email address'\n const [local, domain] = this.email.split('@')\n const conceal = (s: string) => s[0] + '*'.repeat(Math.max(s.length - 2, 1)) + s.slice(-1)\n return `${conceal(local)}@${conceal(domain)}`\n }\n}\n","<div class=\"auth-container\">\n <div class=\"messages\">\n <div class=\"sign-in-msg main\">{{ heading }}</div>\n <div class=\"sign-in-msg secondary\" [innerHTML]=\"welcome\"></div>\n </div>\n <div class=\"sign-in-row row\"></div>\n\n <div class=\"sign-in-row column\">\n <label for=\"username\" class=\"sign-in-label\">Username</label>\n <input class=\"sign-in-input readonly-input\" id=\"username\" name=\"username\" [value]=\"username\"\n spellcheck=\"false\" autocorrect=\"off\" autocapitalize=\"none\" readonly />\n </div>\n\n <div class=\"sign-in-row column confirmation-code\">\n <label class=\"sign-in-label\">Confirmation code</label>\n <div class=\"center-in-dialog\">\n <ngx-otp-input\n [length]=\"6\"\n [autoFocus]=\"true\"\n [autoBlur]=\"true\"\n [mask]=\"false\"\n [charPattern]=\"/^[0-9]+$/\"\n inputMode=\"numeric\"\n (otpChange)=\"onOtpChange($event)\"\n (otpComplete)=\"onOtpComplete($event)\"\n #confirmSignupOtp\n ></ngx-otp-input>\n </div>\n </div>\n\n <div class=\"buttons-bottom\">\n <button class=\"btn btn-secondary\" (click)=\"notifyClose()\">Cancel</button>\n <button class=\"btn btn-important\" [disabled]=\"confirmBusy\" (click)=\"onConfirmAccount()\">Confirm Account</button>\n </div>\n\n <div class=\"sign-in-row switch\">\n Didn't receive a code? \n <span class=\"switch-mode\" (click)=\"onSendNewCode()\">Send a new code</span>\n </div>\n</div>\n","import { Component, ElementRef, ViewChild, inject, effect, ChangeDetectionStrategy } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { NgxOtpInputComponent } from 'ngx-otp-input'\nimport { AuthService, ConfirmResetPasswordResponse } from '../auth.service'\nimport { AuthStateService } from '../auth-state.service'\nimport { AuthModes } from '../auth-types'\nimport { validateOtpCode, validatePassword } from '../auth-utils'\n\n@Component({\n selector: 'mma-auth-confirm-reset',\n standalone: true,\n imports: [FormsModule, NgxOtpInputComponent],\n templateUrl: './auth-confirm-reset.component.html',\n styleUrls: ['./auth-confirm-reset.component.css', '../auth.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthConfirmResetComponent {\n private auth = inject(AuthService)\n protected authState = inject(AuthStateService)\n\n @ViewChild('passwordInput', { static: false }) passwordInput!: ElementRef\n @ViewChild('confirmResetOtp') confirmResetOtp?: NgxOtpInputComponent\n\n public username = ''\n public password = ''\n public email = ''\n public code = ''\n\n public readonly heading = 'Set a new password'\n public get welcome(): string {\n return `We have sent a code to ${this.concealEmail()}. Enter the code, username and a new password below.`\n }\n\n constructor() {\n effect(() => { this.username = this.authState.usernameSignal() })\n effect(() => { this.email = this.authState.emailSignal() })\n }\n\n public onOtpChange(event: { value: string; isComplete: boolean }) {\n this.code = event.value\n }\n\n public onOtpComplete(otp: string) {\n this.code = otp\n }\n\n onConfirmPasswordReset() {\n if (!validateOtpCode(this.code)) {\n this.authState.setAutoCloseError('Confirmation code must be exactly six numerals')\n return\n }\n if (!validatePassword(this.password)) {\n this.passwordInput?.nativeElement.focus()\n this.authState.setAutoCloseError('Password must be at least 8 characters')\n return\n }\n this.auth.confirmResetPassword(this.username, this.password, this.code).then((res: ConfirmResetPasswordResponse) => {\n if (res.isPasswordReset) {\n this.authState.close()\n } else if (res.error) {\n this.authState.setError(res.error)\n }\n })\n }\n\n onSwitchPasswordReset() {\n this.authState.setUsername(this.username)\n this.authState.setMode(AuthModes.FORGOT_PASSWORD)\n }\n\n notifyClose() {\n this.authState.close()\n }\n\n private concealEmail(): string {\n if (!this.email || this.email.length < 5) return 'your email address'\n const [local, domain] = this.email.split('@')\n const conceal = (s: string) => s[0] + '*'.repeat(Math.max(s.length - 2, 1)) + s.slice(-1)\n return `${conceal(local)}@${conceal(domain)}`\n }\n}\n","<div class=\"auth-container\">\n <div class=\"messages\">\n <div class=\"sign-in-msg main\">{{ heading }}</div>\n <div class=\"sign-in-msg secondary\" [innerHTML]=\"welcome\"></div>\n </div>\n <div class=\"sign-in-row row\"></div>\n\n <div class=\"sign-in-row column confirmation-code\">\n <label class=\"sign-in-label\">Confirmation code</label>\n <div class=\"center-in-dialog\">\n <ngx-otp-input\n [length]=\"6\"\n [autoFocus]=\"true\"\n [autoBlur]=\"true\"\n [mask]=\"false\"\n [charPattern]=\"/^[0-9]+$/\"\n inputMode=\"numeric\"\n (otpChange)=\"onOtpChange($event)\"\n (otpComplete)=\"onOtpComplete($event)\"\n #confirmResetOtp\n ></ngx-otp-input>\n </div>\n </div>\n\n <div class=\"sign-in-row column\">\n <label for=\"username\" class=\"sign-in-label\">Username</label>\n <input\n class=\"sign-in-input\"\n id=\"username\"\n name=\"username\"\n [(ngModel)]=\"username\"\n spellcheck=\"false\"\n autocomplete=\"username\"\n autocorrect=\"off\"\n autocapitalize=\"none\"\n placeholder=\"Enter your username\"\n />\n </div>\n\n <div class=\"sign-in-row column\">\n <label for=\"password\" class=\"sign-in-label\">New password</label>\n <input\n class=\"sign-in-input\"\n id=\"password\"\n name=\"password\"\n [(ngModel)]=\"password\"\n type=\"password\"\n spellcheck=\"false\"\n autocomplete=\"new-password\"\n autocapitalize=\"none\"\n placeholder=\"Enter your new password\"\n #passwordInput\n />\n </div>\n\n <div class=\"buttons-bottom\">\n <button class=\"btn btn-secondary\" (click)=\"notifyClose()\">Cancel</button>\n <button class=\"btn btn-important\" (click)=\"onConfirmPasswordReset()\">Reset Password</button>\n </div>\n\n <div class=\"sign-in-row switch\">\n Didn't receive a reset code? \n <span class=\"switch-mode\" (click)=\"onSwitchPasswordReset()\">Try again</span>\n </div>\n</div>\n","import { Component, ElementRef, ViewChild, inject, effect, ChangeDetectionStrategy } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome'\nimport { faTimes } from '@fortawesome/pro-light-svg-icons'\nimport { AuthStateService } from '../auth-state.service'\nimport { AuthModes } from '../auth-types'\nimport { AuthSignInComponent } from '../auth-signin/auth-signin.component'\nimport { AuthSignUpComponent } from '../auth-signup/auth-signup.component'\nimport { AuthForgotComponent } from '../auth-forgot/auth-forgot.component'\nimport { AuthConfirmSignupComponent } from '../auth-confirm-signup/auth-confirm-signup.component'\nimport { AuthConfirmResetComponent } from '../auth-confirm-reset/auth-confirm-reset.component'\n\n@Component({\n selector: 'mma-auth-modal',\n standalone: true,\n imports: [\n CommonModule,\n FontAwesomeModule,\n AuthSignInComponent,\n AuthSignUpComponent,\n AuthForgotComponent,\n AuthConfirmSignupComponent,\n AuthConfirmResetComponent,\n ],\n templateUrl: './auth-modal.component.html',\n styleUrls: ['./auth-modal.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AuthModalComponent {\n protected authState = inject(AuthStateService)\n\n @ViewChild('authDialog') authDialog!: ElementRef<HTMLDialogElement>\n\n public readonly faTimes = faTimes\n public readonly AuthModes = AuthModes\n\n constructor() {\n effect(() => {\n const displaying = this.authState.displayingSignal()\n const dialog = this.authDialog?.nativeElement\n if (!dialog) return\n if (displaying) {\n dialog.showModal()\n } else {\n dialog.close()\n }\n })\n\n effect(() => {\n if (this.authState.willCloseSignal()) {\n this.authDialog?.nativeElement?.close()\n this.authState.didClose()\n }\n })\n }\n\n onDialogClose() {\n this.authState.didClose()\n }\n\n onBackdropClick(event: MouseEvent) {\n const target = event.target as HTMLElement\n if (target.tagName === 'DIALOG') {\n this.authState.close()\n }\n }\n\n dismissError() {\n this.authState.resetError()\n }\n}\n","<dialog class=\"auth-dialog\" #authDialog (close)=\"onDialogClose()\" (click)=\"onBackdropClick($event)\">\n @if (authState.displayingSignal()) {\n <div class=\"auth-dialog-inner\">\n\n <div class=\"auth-brand\">\n <img src=\"https://static.foodmarketmaker.com/brand-logo.png\" alt=\"MarketMaker\" class=\"brand-logo\" />\n </div>\n\n @if (authState.errorSignal()) {\n <div class=\"auth-error-banner\" (click)=\"dismissError()\">\n {{ authState.errorSignal() }}\n <fa-icon [icon]=\"faTimes\" class=\"dismiss-icon\"></fa-icon>\n </div>\n }\n\n @switch (authState.modeSignal()) {\n @case (AuthModes.SIGN_IN) { <mma-auth-signin /> }\n @case (AuthModes.SIGN_UP) { <mma-auth-signup /> }\n @case (AuthModes.FORGOT_PASSWORD) { <mma-auth-forgot /> }\n @case (AuthModes.CONFIRM_ACCOUNT) { <mma-auth-confirm-signup /> }\n @case (AuthModes.CONFIRM_PASSWORD_RESET) { <mma-auth-confirm-reset /> }\n }\n\n </div>\n }\n</dialog>\n","/*\n * Public API Surface of marketmaker-auth\n */\n\nexport { AuthService } from './lib/auth/auth.service'\nexport type {\n SignUpResponse,\n SignInResponse,\n ResetPasswordResponse,\n ConfirmResetPasswordResponse,\n ResendCodeResponse,\n SignUpNextSteps,\n SignInNextSteps,\n ResetPasswordNextSteps,\n SignInCredentials,\n SignUpCredentials,\n AuthProvider,\n} from './lib/auth/auth.service'\nexport { AMAZON, GOOGLE, FACEBOOK, APPLE } from './lib/auth/auth.service'\nexport { AuthStateService } from './lib/auth/auth-state.service'\nexport { AuthModalComponent } from './lib/auth/auth-modal/auth-modal.component'\nexport { AuthModes } from './lib/auth/auth-types'\nexport type { AuthMode } from './lib/auth/auth-types'\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;;AAkBO,MAAM,eAAe,GAAG;AAC7B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,eAAe,EAAE,iBAAiB;CAC1B;AAcH,MAAM,eAAe,GAAG;AAC7B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,cAAc,EAAE,gBAAgB;AAChC,IAAA,eAAe,EAAE,iBAAiB;CAC1B;AASH,MAAM,sBAAsB,GAAG;AACpC,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,gCAAgC,EAAE,kCAAkC;CAC5D;AAuBH,MAAM,MAAM,GAAG;AACf,MAAM,KAAK,GAAG;AACd,MAAM,QAAQ,GAAG;AACjB,MAAM,MAAM,GAAG;MAWT,WAAW,CAAA;IACL,WAAW,GAAG,4BAA4B;IAC1C,YAAY,GAAG,4BAA4B;AAEpD,IAAA,eAAe,GAAG,MAAM,CAAU,KAAK,sFAAC;AACxC,IAAA,eAAe,GAAG,MAAM,CAAqB,SAAS,sFAAC;AACvD,IAAA,cAAc,GAAG,MAAM,CAAkB,SAAS,qFAAC;AACnD,IAAA,kBAAkB,GAAG,MAAM,CAAkB,SAAS,yFAAC;IAExD,aAAa,GAAG,KAAK;IACrB,kBAAkB,GAAuB,SAAS;AAEzD,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,MAAK;AAC9B,YAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAC/C,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IAC1C;AAEA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;IACzC;AAEA,IAAA,IAAW,iBAAiB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;IAC7C;AAEA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IAC1C;AAEO,IAAA,iBAAiB,GAA+B,QAAQ,CAAC,MAAK;AACnE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,OAAO,KAAK,GAAG,UAAU,KAAK,CAAC,QAAQ,EAAE,CAAA,CAAE,GAAG,SAAS;AACzD,IAAA,CAAC,wFAAC;AAEF,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzD;AAEA,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxD;AAEA,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3D;AAEA,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IAC/B;AAEA,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;IACjC;AAEA,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC3B;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG;QACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACjD,OAAO;AACL,YAAA,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY;AAChE,YAAA,iBAAiB,EAAE,GAAG;AACtB,YAAA,kBAAkB,EAAE,GAAG;SACxB;IACH;IAEQ,QAAQ,GAAA;AACd,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,OAAO,CAAC,SAAS,CAAC;AAChB,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE;AACP,oBAAA,UAAU,EAAE,qBAAqB;oBACjC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;AACzC,oBAAA,cAAc,EAAE,gDAAgD;AAChE,oBAAA,SAAS,EAAE;AACT,wBAAA,KAAK,EAAE;AACL,4BAAA,MAAM,EAAE,oEAAoE;4BAC5E,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,+BAA+B,CAAC;AAChF,4BAAA,cAAc,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAC1C,4BAAA,eAAe,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC;AAC5C,4BAAA,YAAY,EAAE,MAAM;AACrB,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS;AACpE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;AACzD,QAAA,6BAA6B,CAAC,kBAAkB,CAC9C,IAAI,aAAa,CAAC;YAChB,MAAM;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,EAAE;YACX,MAAM;AACP,SAAA,CAAC,CACH;IACH;AAEQ,IAAA,aAAa,CAAC,GAAW,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;AAAE,YAAA,OAAO,WAAW;AACnD,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AAAE,YAAA,OAAO,yBAAyB;AAC/E,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC;AAAE,YAAA,OAAO,qBAAqB;AACvE,QAAA,OAAO,IAAI;IACb;IAEO,MAAM,MAAM,CAAC,WAA8B,EAAA;AAChD,QAAA,IAAI;YACF,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC;gBAC5C,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAC/B,aAAA,CAAC;YACF,IAAI,UAAU,EAAE;AACd,gBAAA,MAAM,IAAI,CAAC,cAAc,EAAE;AAC3B,gBAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;YAC7B;YACA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;QAC7D;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE;QAChG;IACF;IAEO,MAAM,MAAM,CAAC,WAA8B,EAAA;AAChD,QAAA,IAAI;YACF,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC;gBAClD,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,OAAO,EAAE,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,EAAE;AAC1D,aAAA,CAAC;AACF,YAAA,IAAI,gBAAgB;AAAE,gBAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;YACjD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;QAC7D;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE;QAChG;IACF;AAEO,IAAA,MAAM,aAAa,CAAC,QAAgB,EAAE,IAAY,EAAA;AACvD,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAChG,YAAA,IAAI,gBAAgB;AAAE,gBAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;YACjD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;QAC7D;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC5F;IACF;IAEO,MAAM,gBAAgB,CAAC,QAAgB,EAAA;AAC5C,QAAA,IAAI;AACF,YAAA,MAAM,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC;AACpC,YAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE;QAClC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE;QAC7F;IACF;IAEO,MAAM,YAAY,CAAC,QAAsB,EAAA;AAC9C,QAAA,IAAI;YACF,MAAM,kBAAkB,CAAC,EAAE,QAAQ,EAAE,QAAwB,EAAE,CAAC;AAChE,YAAA,MAAM,IAAI,CAAC,cAAc,EAAE;AAC3B,YAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;QAC7B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE;QACjF;IACF;AAEO,IAAA,MAAM,OAAO,GAAA;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AACpB,QAAA,IAAI;YACF,MAAM,OAAO,EAAE;QACjB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC;QACpD;gBAAU;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AAClC,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;QACxC;IACF;IAEO,MAAM,aAAa,CAAC,QAAgB,EAAA;AACzC,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AACvE,YAAA,IAAI,eAAe;AAAE,gBAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE;YACrD,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,EAAE;QACzE;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAChG;IACF;AAEO,IAAA,MAAM,oBAAoB,CAC/B,QAAgB,EAChB,WAAmB,EACnB,IAAY,EAAA;AAEZ,QAAA,IAAI;AACF,YAAA,MAAM,oBAAoB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC7E,YAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE;QAClC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,sBAAsB,EAAE,QAAQ,CAAC,EAAE;QACtG;IACF;AAEO,IAAA,MAAM,cAAc,GAAA;AACzB,QAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,gBAAgB,EAAE,EAAE,MAAM,IAAI,EAAE;AACxE,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE,EAAE;AACrC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC;QAC3C;AACA,QAAA,IAAI,WAAW,KAAK,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7C,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC;QAC1C;IACF;IAEO,OAAO,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B;AAEO,IAAA,OAAO,CAAC,QAAgB,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;QACnC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtC;AAEO,IAAA,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,KAAK;AACjC,QAAA,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC;AAClD,QAAA,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC;AAC7C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,OAAO,IAAI;IACb;IAEO,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnC,QAAA,YAAY,CAAC,UAAU,CAAC,qBAAqB,CAAC;AAC9C,QAAA,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC;IAChD;IAEQ,aAAa,GAAA;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO;AAC9C,QAAA,IAAI,OAAO,IAAI,gBAAgB,IAAI,OAAO,EAAE;AAC1C,YAAA,OAAO,OAAO,CAAC,gBAAgB,CAAa;QAC9C;AACA,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,kBAAkB,CAAC,QAAgB,EAAA;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO;AAC9C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AAC9B,QAAA,OAAO,QAAQ,IAAI,OAAO,GAAI,OAAO,CAAC,QAAQ,CAAY,GAAG,SAAS;IACxE;AAEQ,IAAA,YAAY,CAAC,KAAc,EAAE,SAAiB,EAAE,QAAiB,EAAA;QACvE,MAAM,CAAC,GAAG,KAAyB;AACnC,QAAA,IAAI,CAAC,EAAE,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,CAAC,MAAM,KAAK,uBAAuB,IAAI,QAAQ;gBAAE,OAAO,CAAA,UAAA,EAAa,QAAQ,CAAA,gBAAA,CAAkB;AACpG,YAAA,IAAI,CAAC,CAAC,MAAM,KAAK,wBAAwB;gBAAE,OAAO,CAAA,SAAA,EAAY,SAAS,CAAA,UAAA,CAAY;AACnF,YAAA,IAAI,CAAC,CAAC,MAAM,KAAK,yBAAyB;AAAE,gBAAA,OAAO,sBAAsB;QAC3E;AACA,QAAA,IAAI,CAAC,EAAE,OAAO,EAAE;AACd,YAAA,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO;QAC7E;AACA,QAAA,OAAO,4BAA4B;IACrC;wGAhRW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;AClFM,MAAM,SAAS,GAAG;AACvB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,eAAe,EAAE,iBAAiB;AAClC,IAAA,eAAe,EAAE,iBAAiB;AAClC,IAAA,sBAAsB,EAAE,wBAAwB;;;MCJrC,gBAAgB,CAAA;AACnB,IAAA,eAAe,GAAG,MAAM,CAAS,EAAE,sFAAC;AACpC,IAAA,eAAe,GAAG,MAAM,CAAS,EAAE,sFAAC;AACpC,IAAA,YAAY,GAAG,MAAM,CAAS,EAAE,mFAAC;AACjC,IAAA,WAAW,GAAG,MAAM,CAAW,SAAS,CAAC,OAAO,kFAAC;AACjD,IAAA,YAAY,GAAG,MAAM,CAAgB,IAAI,mFAAC;AAC1C,IAAA,gBAAgB,GAAG,MAAM,CAAU,KAAK,uFAAC;AACzC,IAAA,iBAAiB,GAAG,MAAM,CAAU,KAAK,wFAAC;AAC1C,IAAA,gBAAgB,GAAG,MAAM,CAAU,KAAK,uFAAC;AAEjD,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;IACtC;AAEO,IAAA,OAAO,CAAC,IAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;AAEA,IAAA,IAAW,gBAAgB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE;IAC5C;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC;IAEO,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;IAC3C;AAEA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IAC1C;AAEO,IAAA,WAAW,CAAC,QAAgB,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpC;AAEA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IAC1C;AAEO,IAAA,WAAW,CAAC,QAAgB,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpC;AAEA,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;IACvC;AAEO,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;IACvC;AAEO,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9B;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;IAC3C;AAEO,IAAA,iBAAiB,CAAC,OAAe,EAAE,KAAA,GAAgB,IAAI,EAAA;AAC5D,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,UAAU,EAAE;QACnB,CAAC,EAAE,KAAK,CAAC;IACX;wGAvFW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCSY,mBAAmB,CAAA;AACtB,IAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEC,IAAA,aAAa;IAErD,QAAQ,GAAG,EAAE;IACb,QAAQ,GAAG,EAAE;IACb,UAAU,GAAG,KAAK;IAET,MAAM,GAAiB,MAAM;IAC7B,MAAM,GAAiB,MAAM;IAC7B,QAAQ,GAAiB,QAAQ;IAEjC,OAAO,GAAG,wBAAwB;IAClC,OAAO,GAAG,2CAA2C;AAE9D,IAAA,YAAY,GAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,mFAAC;AAEtF,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAA,CAAC,CAAC,CAAC;AACjE,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAA,CAAC,CAAC,CAAC;IACnE;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE;IAC3C;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAClF,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,YAAA,IAAI,GAAG,CAAC,UAAU,EAAE;gBAClB,IAAI,CAAC,WAAW,EAAE;YACpB;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBACpB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YACpC;iBAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,CAAC,eAAe,EAAE;gBAC3D,IAAI,CAAC,sBAAsB,EAAE;YAC/B;iBAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,CAAC,cAAc,EAAE;gBAC1D,IAAI,CAAC,qBAAqB,EAAE;YAC9B;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,QAAsB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAK;AACzC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB,IAAI,CAAC,WAAW,EAAE;AACpB,QAAA,CAAC,CAAC;IACJ;IAEQ,WAAW,GAAA;QACjB,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;IAEQ,eAAe,GAAA;QACrB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC3C;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IAC3C;IAEA,qBAAqB,GAAA;QACnB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;IACnD;IAEA,sBAAsB,GAAA;QACpB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;IACnD;wGA3EW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdhC,w2EAkEA,EAAA,MAAA,EAAA,CAAA,kGAAA,EAAA,+iEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzDY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAKV,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,CAAC,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,w2EAAA,EAAA,MAAA,EAAA,CAAA,kGAAA,EAAA,+iEAAA,CAAA,EAAA;;sBAM9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AElBxC,MAAM,cAAc,GAAG,CAAC,KAAa,KAAY;IACtD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC,CAAC;AAEM,MAAM,cAAc,GAAG,CAAC,KAAa,KAAY;AACtD,IAAA,OAAO,KAAK,CAAC,IAAI,EAAE;AACrB,CAAC;AAEM,MAAM,eAAe,GAAG,CAAC,IAAY,KAAa;IACvD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,QAAA,OAAO,KAAK;IACd;AACA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;AAClC,YAAA,OAAO,KAAK;QACd;IACF;AACA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,aAAa,GAAG,CAAC,KAAa,KAAa;IACtD,MAAM,UAAU,GAAG,kDAAkD;AACrE,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,QAAgB,KAAa;AAC5D,IAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC;AAC7B,CAAC;;MCZY,mBAAmB,CAAA;AACtB,IAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEC,IAAA,aAAa;AAChB,IAAA,UAAU;AACP,IAAA,aAAa;IAErD,QAAQ,GAAG,EAAE;IACb,KAAK,GAAG,EAAE;IACV,QAAQ,GAAG,EAAE;IACb,UAAU,GAAG,KAAK;IAET,MAAM,GAAiB,MAAM;IAC7B,MAAM,GAAiB,MAAM;IAC7B,QAAQ,GAAiB,QAAQ;IAEjC,OAAO,GAAG,0BAA0B;IACpC,OAAO,GAAG,2FAA2F;AAE9G,IAAA,YAAY,GAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,mFAAC;AAEtF,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAA,CAAC,CAAC,CAAC;AACjE,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAA,CAAC,CAAC,CAAC;AACjE,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA,CAAC,CAAC,CAAC;IAC7D;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE;IAC3C;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAAE;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACrG,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AAChC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,oBAAoB,CAAC,GAAmB,EAAA;AAC9C,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;YACb,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC;QACF;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,KAAK,eAAe,CAAC,eAAe,EAAE;YACvE,IAAI,CAAC,sBAAsB,EAAE;QAC/B;aAAO;YACL,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QACxB;IACF;AAEA,IAAA,cAAc,CAAC,QAAsB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IAC3C;IAEA,sBAAsB,GAAA;QACpB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;IACnD;IAEQ,eAAe,GAAA;QACrB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC;IAEQ,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,oDAAoD,CAAC;AACtF,YAAA,OAAO,KAAK;QACd;QACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,gDAAgD,CAAC;AAClF,YAAA,OAAO,KAAK;QACd;QACA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,KAAK,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,oCAAoC,CAAC;AACtE,YAAA,OAAO,KAAK;QACd;QACA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,kDAAkD,CAAC;AACpF,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI;IACb;wGAjGW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfhC,4tFAmFA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA,+iEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzEY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAKV,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,CAAC,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4tFAAA,EAAA,MAAA,EAAA,CAAA,+iEAAA,CAAA,EAAA;;sBAM9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAC5C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBACzC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MEPlC,mBAAmB,CAAA;AACtB,IAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEC,IAAA,aAAa;IAErD,QAAQ,GAAG,EAAE;IACb,UAAU,GAAG,KAAK;IAET,OAAO,GAAG,uBAAuB;IACjC,OAAO,GAAG,wEAAwE;AAE3F,IAAA,YAAY,GAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,mFAAC;AAEtF,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAA,CAAC,CAAC,CAAC;IACnE;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE;IAC3C;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAClD,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,YAAA,IAAI,GAAG,CAAC,eAAe,EAAE;gBACvB,IAAI,CAAC,WAAW,EAAE;YACpB;iBAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,sBAAsB,CAAC,gCAAgC,EAAE;gBACnF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACzC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC;YAC1D;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBACpB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YACpC;AACF,QAAA,CAAC,CAAC;IACJ;wGAxCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdhC,47BA4BA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA,+iEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAKV,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAR/B,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,CAAC,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,47BAAA,EAAA,MAAA,EAAA,CAAA,+iEAAA,CAAA,EAAA;;sBAM9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;MEFlC,0BAA0B,CAAA;AAC7B,IAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEf,IAAA,gBAAgB;IAExC,QAAQ,GAAG,EAAE;IACb,KAAK,GAAG,EAAE;IACV,IAAI,GAAG,EAAE;IACT,WAAW,GAAG,KAAK;IAEV,OAAO,GAAG,sBAAsB;AAChD,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,0BAA0B,IAAI,CAAC,YAAY,EAAE,qDAAqD;IAC3G;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA,CAAC,CAAC,CAAC;AAC3D,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAA,CAAC,CAAC,CAAC;IACnE;AAEO,IAAA,WAAW,CAAC,KAA6C,EAAA;AAC9D,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK;IACzB;AAEO,IAAA,aAAa,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;IACjB;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,mCAAmC,CAAC;YACrE;QACF;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAmB,KAAI;AAC7E,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBACb,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YACpC;AAAO,iBAAA,IAAI,GAAG,CAAC,UAAU,EAAE;gBACzB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK,EAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA,CAAC,CAAC,CAAC;IAChD;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAuB,KAAI;AACzE,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBACb,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YACpC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;IAEQ,YAAY,GAAA;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,oBAAoB;AACrE,QAAA,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,QAAA,MAAM,OAAO,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzF,OAAO,CAAA,EAAG,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,MAAM,CAAC,CAAA,CAAE;IAC/C;wGA9DW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBvC,o+CAwCA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA,+iEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7BY,WAAW,+BAAE,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAKhC,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAAA,eAAA,EAG3B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,o+CAAA,EAAA,MAAA,EAAA,CAAA,+iEAAA,CAAA,EAAA;;sBAM9C,SAAS;uBAAC,kBAAkB;;;MEJlB,yBAAyB,CAAA;AAC5B,IAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEC,IAAA,aAAa;AAC9B,IAAA,eAAe;IAEtC,QAAQ,GAAG,EAAE;IACb,QAAQ,GAAG,EAAE;IACb,KAAK,GAAG,EAAE;IACV,IAAI,GAAG,EAAE;IAEA,OAAO,GAAG,oBAAoB;AAC9C,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,0BAA0B,IAAI,CAAC,YAAY,EAAE,sDAAsD;IAC5G;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAA,CAAC,CAAC,CAAC;AACjE,QAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA,CAAC,CAAC,CAAC;IAC7D;AAEO,IAAA,WAAW,CAAC,KAA6C,EAAA;AAC9D,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK;IACzB;AAEO,IAAA,aAAa,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;IACjB;IAEA,sBAAsB,GAAA;QACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,gDAAgD,CAAC;YAClF;QACF;QACA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,wCAAwC,CAAC;YAC1E;QACF;QACA,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAiC,KAAI;AACjH,YAAA,IAAI,GAAG,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBACpB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YACpC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,qBAAqB,GAAA;QACnB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;IACnD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;IAEQ,YAAY,GAAA;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,oBAAoB;AACrE,QAAA,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,QAAA,MAAM,OAAO,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzF,OAAO,CAAA,EAAG,OAAO,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,MAAM,CAAC,CAAA,CAAE;IAC/C;wGA/DW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBtC,y/DAiEA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA,+iEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtDY,WAAW,+mBAAE,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAKhC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBARrC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAAA,eAAA,EAG3B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,y/DAAA,EAAA,MAAA,EAAA,CAAA,+iEAAA,CAAA,EAAA;;sBAM9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAC5C,SAAS;uBAAC,iBAAiB;;;MEOjB,kBAAkB,CAAA;AACnB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAErB,IAAA,UAAU;IAEnB,OAAO,GAAG,OAAO;IACjB,SAAS,GAAG,SAAS;AAErC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;AACpD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa;AAC7C,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,IAAI,UAAU,EAAE;gBACd,MAAM,CAAC,SAAS,EAAE;YACpB;iBAAO;gBACL,MAAM,CAAC,KAAK,EAAE;YAChB;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE;AACpC,gBAAA,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE;AACvC,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC3B;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QACxB;IACF;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;IAC7B;wGAzCW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5B/B,qgCA0BA,EAAA,MAAA,EAAA,CAAA,m3BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVI,YAAY,8BACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,0BAA0B,oEAC1B,yBAAyB,EAAA,QAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAMhB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhB9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,mBAAmB;wBACnB,mBAAmB;wBACnB,mBAAmB;wBACnB,0BAA0B;wBAC1B,yBAAyB;qBAC1B,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qgCAAA,EAAA,MAAA,EAAA,CAAA,m3BAAA,CAAA,EAAA;;sBAK9C,SAAS;uBAAC,YAAY;;;AE/BzB;;AAEG;;ACFH;;AAEG;;;;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@foodmarketmaker/marketmaker-auth",
|
|
3
|
+
"version": "0.0.4",
|
|
4
|
+
"description": "Angular library for MarketMaker authentication, providing components and services for user login and session management",
|
|
5
|
+
"author": "Food Market Maker",
|
|
6
|
+
"peerDependencies": {
|
|
7
|
+
"@angular/common": "^21.2.0",
|
|
8
|
+
"@angular/core": "^21.2.0"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"tslib": "^2.3.0"
|
|
12
|
+
},
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"module": "fesm2022/foodmarketmaker-marketmaker-auth.mjs",
|
|
15
|
+
"typings": "types/foodmarketmaker-marketmaker-auth.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
"./package.json": {
|
|
18
|
+
"default": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./types/foodmarketmaker-marketmaker-auth.d.ts",
|
|
22
|
+
"default": "./fesm2022/foodmarketmaker-marketmaker-auth.mjs"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"type": "module"
|
|
26
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Signal, ElementRef } from '@angular/core';
|
|
3
|
+
import { JWT } from 'aws-amplify/auth';
|
|
4
|
+
import * as _fortawesome_fontawesome_common_types from '@fortawesome/fontawesome-common-types';
|
|
5
|
+
|
|
6
|
+
declare const SignUpNextSteps: {
|
|
7
|
+
readonly DONE: "DONE";
|
|
8
|
+
readonly CONFIRM_SIGN_UP: "CONFIRM_SIGN_UP";
|
|
9
|
+
};
|
|
10
|
+
type SignUpNextStep = keyof typeof SignUpNextSteps | string;
|
|
11
|
+
type SignUpResponse = {
|
|
12
|
+
isSignedUp: boolean;
|
|
13
|
+
nextStep?: SignUpNextStep;
|
|
14
|
+
error?: string;
|
|
15
|
+
};
|
|
16
|
+
type ResendCodeResponse = {
|
|
17
|
+
isCodeRequested: boolean;
|
|
18
|
+
error?: string;
|
|
19
|
+
};
|
|
20
|
+
declare const SignInNextSteps: {
|
|
21
|
+
readonly DONE: "DONE";
|
|
22
|
+
readonly RESET_PASSWORD: "RESET_PASSWORD";
|
|
23
|
+
readonly CONFIRM_SIGN_UP: "CONFIRM_SIGN_UP";
|
|
24
|
+
};
|
|
25
|
+
type SignInNextStep = keyof typeof SignInNextSteps | string;
|
|
26
|
+
type SignInResponse = {
|
|
27
|
+
isSignedIn: boolean;
|
|
28
|
+
nextStep?: SignInNextStep;
|
|
29
|
+
error?: string;
|
|
30
|
+
};
|
|
31
|
+
declare const ResetPasswordNextSteps: {
|
|
32
|
+
readonly DONE: "DONE";
|
|
33
|
+
readonly CONFIRM_RESET_PASSWORD_WITH_CODE: "CONFIRM_RESET_PASSWORD_WITH_CODE";
|
|
34
|
+
};
|
|
35
|
+
type ResetPasswordNextStep = keyof typeof ResetPasswordNextSteps | string;
|
|
36
|
+
type ResetPasswordResponse = {
|
|
37
|
+
isPasswordReset: boolean;
|
|
38
|
+
nextStep?: ResetPasswordNextStep;
|
|
39
|
+
error?: string;
|
|
40
|
+
};
|
|
41
|
+
type ConfirmResetPasswordResponse = {
|
|
42
|
+
isPasswordReset: boolean;
|
|
43
|
+
error?: string;
|
|
44
|
+
};
|
|
45
|
+
interface SignInCredentials {
|
|
46
|
+
username: string;
|
|
47
|
+
password: string;
|
|
48
|
+
}
|
|
49
|
+
interface SignUpCredentials extends SignInCredentials {
|
|
50
|
+
email: string;
|
|
51
|
+
}
|
|
52
|
+
declare const AMAZON = "Amazon";
|
|
53
|
+
declare const APPLE = "Apple";
|
|
54
|
+
declare const FACEBOOK = "Facebook";
|
|
55
|
+
declare const GOOGLE = "Google";
|
|
56
|
+
type AuthProvider = typeof AMAZON | typeof APPLE | typeof FACEBOOK | typeof GOOGLE;
|
|
57
|
+
declare class AuthService {
|
|
58
|
+
private readonly devClientId;
|
|
59
|
+
private readonly prodClientId;
|
|
60
|
+
private _signedInSignal;
|
|
61
|
+
private _usernameSignal;
|
|
62
|
+
private _idTokenSignal;
|
|
63
|
+
private _accessTokenSignal;
|
|
64
|
+
impersonating: boolean;
|
|
65
|
+
impersonatingEmail: string | undefined;
|
|
66
|
+
constructor();
|
|
67
|
+
get signedInSignal(): Signal<boolean>;
|
|
68
|
+
get idTokenSignal(): Signal<JWT | undefined>;
|
|
69
|
+
get accessTokenSignal(): Signal<JWT | undefined>;
|
|
70
|
+
get usernameSignal(): Signal<string | undefined>;
|
|
71
|
+
bearerTokenSignal: Signal<string | undefined>;
|
|
72
|
+
get emailSignal(): Signal<string | undefined>;
|
|
73
|
+
get nameSignal(): Signal<string | undefined>;
|
|
74
|
+
get pictureSignal(): Signal<string | undefined>;
|
|
75
|
+
get signedIn(): boolean;
|
|
76
|
+
get bearerToken(): string | undefined;
|
|
77
|
+
get email(): string | undefined;
|
|
78
|
+
private buildPoolConfig;
|
|
79
|
+
private initAuth;
|
|
80
|
+
private domainFromUrl;
|
|
81
|
+
signIn(credentials: SignInCredentials): Promise<SignInResponse>;
|
|
82
|
+
signUp(credentials: SignUpCredentials): Promise<SignUpResponse>;
|
|
83
|
+
confirmSignUp(username: string, code: string): Promise<SignUpResponse>;
|
|
84
|
+
resendSignUpCode(username: string): Promise<ResendCodeResponse>;
|
|
85
|
+
socialSignIn(provider: AuthProvider): Promise<SignInResponse>;
|
|
86
|
+
signOut(): Promise<void>;
|
|
87
|
+
resetPassword(username: string): Promise<ResetPasswordResponse>;
|
|
88
|
+
confirmResetPassword(username: string, newPassword: string, code: string): Promise<ConfirmResetPasswordResponse>;
|
|
89
|
+
refreshSession(): Promise<void>;
|
|
90
|
+
isAdmin(): boolean;
|
|
91
|
+
hasRole(rolename: string): boolean;
|
|
92
|
+
impersonate(email: string): boolean;
|
|
93
|
+
cancelImpersonate(): void;
|
|
94
|
+
private getUserGroups;
|
|
95
|
+
private extractFromIdToken;
|
|
96
|
+
private errorMessage;
|
|
97
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthService, never>;
|
|
98
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuthService>;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
declare const AuthModes: {
|
|
102
|
+
readonly SIGN_IN: "sign-in";
|
|
103
|
+
readonly SIGN_UP: "sign-up";
|
|
104
|
+
readonly FORGOT_PASSWORD: "forgot-password";
|
|
105
|
+
readonly CONFIRM_ACCOUNT: "confirm-account";
|
|
106
|
+
readonly CONFIRM_PASSWORD_RESET: "confirm-password-reset";
|
|
107
|
+
};
|
|
108
|
+
type AuthMode = keyof typeof AuthModes | string;
|
|
109
|
+
|
|
110
|
+
declare class AuthStateService {
|
|
111
|
+
private _usernameSignal;
|
|
112
|
+
private _passwordSignal;
|
|
113
|
+
private _emailSignal;
|
|
114
|
+
private _modeSignal;
|
|
115
|
+
private _errorSignal;
|
|
116
|
+
private _autoCloseSignal;
|
|
117
|
+
private _displayingSignal;
|
|
118
|
+
private _willCloseSignal;
|
|
119
|
+
get modeSignal(): _angular_core.Signal<string>;
|
|
120
|
+
setMode(mode: AuthMode): void;
|
|
121
|
+
get displayingSignal(): _angular_core.Signal<boolean>;
|
|
122
|
+
open(): void;
|
|
123
|
+
close(): void;
|
|
124
|
+
didClose(): void;
|
|
125
|
+
get willCloseSignal(): _angular_core.Signal<boolean>;
|
|
126
|
+
get usernameSignal(): _angular_core.Signal<string>;
|
|
127
|
+
setUsername(username: string): void;
|
|
128
|
+
get passwordSignal(): _angular_core.Signal<string>;
|
|
129
|
+
setPassword(password: string): void;
|
|
130
|
+
get emailSignal(): _angular_core.Signal<string>;
|
|
131
|
+
setEmail(email: string): void;
|
|
132
|
+
get errorSignal(): _angular_core.Signal<string | null>;
|
|
133
|
+
setError(error: string): void;
|
|
134
|
+
resetError(): void;
|
|
135
|
+
get autoCloseSignal(): _angular_core.Signal<boolean>;
|
|
136
|
+
setAutoCloseError(message: string, delay?: number): void;
|
|
137
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthStateService, never>;
|
|
138
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AuthStateService>;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
declare class AuthModalComponent {
|
|
142
|
+
protected authState: AuthStateService;
|
|
143
|
+
authDialog: ElementRef<HTMLDialogElement>;
|
|
144
|
+
readonly faTimes: _fortawesome_fontawesome_common_types.IconDefinition;
|
|
145
|
+
readonly AuthModes: {
|
|
146
|
+
readonly SIGN_IN: "sign-in";
|
|
147
|
+
readonly SIGN_UP: "sign-up";
|
|
148
|
+
readonly FORGOT_PASSWORD: "forgot-password";
|
|
149
|
+
readonly CONFIRM_ACCOUNT: "confirm-account";
|
|
150
|
+
readonly CONFIRM_PASSWORD_RESET: "confirm-password-reset";
|
|
151
|
+
};
|
|
152
|
+
constructor();
|
|
153
|
+
onDialogClose(): void;
|
|
154
|
+
onBackdropClick(event: MouseEvent): void;
|
|
155
|
+
dismissError(): void;
|
|
156
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AuthModalComponent, never>;
|
|
157
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AuthModalComponent, "mma-auth-modal", never, {}, {}, never, never, true, never>;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export { AMAZON, APPLE, AuthModalComponent, AuthModes, AuthService, AuthStateService, FACEBOOK, GOOGLE, ResetPasswordNextSteps, SignInNextSteps, SignUpNextSteps };
|
|
161
|
+
export type { AuthMode, AuthProvider, ConfirmResetPasswordResponse, ResendCodeResponse, ResetPasswordResponse, SignInCredentials, SignInResponse, SignUpCredentials, SignUpResponse };
|