tweb/public/106.e317337dd2e7c9940c22.chunk.js.map
Eduard Kuzmenko d294e5cf52 Build
2022-07-18 15:41:46 +02:00

1 line
31 KiB
Plaintext

{"version":3,"file":"106.e317337dd2e7c9940c22.chunk.js","mappings":"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","sources":["webpack://tweb/./src/components/codeInputField.ts","webpack://tweb/./src/components/monkeys/tracking.ts","webpack://tweb/./src/pages/pageAuthCode.ts","webpack://tweb/./src/pages/pageSignIn.ts"],"sourcesContent":["/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport InputField, { InputFieldOptions } from \"./inputField\";\r\n\r\nexport default class CodeInputField extends InputField {\r\n constructor(options: InputFieldOptions & {\r\n length: number,\r\n onFill: (code: string) => void\r\n }) {\r\n super({\r\n plainText: true,\r\n ...options\r\n });\r\n\r\n const input = this.input as HTMLInputElement;\r\n input.type = 'tel';\r\n input.setAttribute('required', '');\r\n input.autocomplete = 'off';\r\n\r\n let lastLength = 0;\r\n this.input.addEventListener('input', (e) => {\r\n this.input.classList.remove('error');\r\n this.setLabel();\r\n \r\n const value = this.value.replace(/\\D/g, '').slice(0, options.length);\r\n this.setValueSilently(value);\r\n \r\n const length = this.value.length;\r\n if(length === options.length) { // submit code\r\n options.onFill(this.value);\r\n } else if(length === lastLength) {\r\n return;\r\n }\r\n \r\n lastLength = length;\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport InputField from \"../inputField\";\r\nimport lottieLoader from \"../../lib/rlottie/lottieLoader\";\r\nimport RLottiePlayer from \"../../lib/rlottie/rlottiePlayer\";\r\n\r\nexport default class TrackingMonkey {\r\n public container: HTMLElement;\r\n\r\n protected max = 45;\r\n protected needFrame = 0;\r\n\r\n protected animation: RLottiePlayer;\r\n protected idleAnimation: RLottiePlayer;\r\n\r\n protected loadPromise: Promise<any>;\r\n\r\n constructor(protected inputField: InputField, protected size: number) {\r\n this.container = document.createElement('div');\r\n this.container.classList.add('media-sticker-wrapper');\r\n\r\n const input = inputField.input;\r\n\r\n input.addEventListener('blur', () => {\r\n this.playAnimation(0);\r\n });\r\n\r\n input.addEventListener('input', (e) => {\r\n this.playAnimation(inputField.value.length);\r\n });\r\n\r\n /* codeInput.addEventListener('focus', () => {\r\n playAnimation(Math.max(codeInput.value.length, 1));\r\n }); */\r\n }\r\n\r\n // 1st symbol = frame 15\r\n // end symbol = frame 165\r\n public playAnimation(length: number) {\r\n if(!this.animation) return;\r\n\r\n length = Math.min(length, 30);\r\n let frame: number;\r\n if(length) {\r\n frame = Math.round(Math.min(this.max, length) * (165 / this.max) + 11.33);\r\n\r\n if(this.idleAnimation) {\r\n this.idleAnimation.stop(true);\r\n this.idleAnimation.canvas.style.display = 'none';\r\n }\r\n \r\n this.animation.canvas.style.display = '';\r\n } else {\r\n /* const cb = (frameNo: number) => {\r\n if(frameNo <= 1) { */\r\n /* idleAnimation.play();\r\n idleAnimation.canvas.style.display = '';\r\n animation.canvas.style.display = 'none'; */\r\n /* animation.removeListener('enterFrame', cb);\r\n }\r\n };\r\n animation.addListener('enterFrame', cb); */\r\n \r\n frame = 0;\r\n }\r\n //animation.playSegments([1, 2]);\r\n\r\n const direction = this.needFrame > frame ? -1 : 1;\r\n //console.log('keydown', length, frame, direction);\r\n\r\n this.animation.setDirection(direction);\r\n if(this.needFrame !== 0 && frame === 0) {\r\n this.animation.setSpeed(7);\r\n }\r\n /* let diff = Math.abs(needFrame - frame * direction);\r\n if((diff / 20) > 1) animation.setSpeed(diff / 20 | 0); */\r\n this.needFrame = frame;\r\n \r\n this.animation.play();\r\n\r\n /* animation.goToAndStop(15, true); */\r\n //animation.goToAndStop(length / max * );\r\n }\r\n\r\n public load() {\r\n if(this.loadPromise) return this.loadPromise;\r\n return this.loadPromise = Promise.all([\r\n lottieLoader.loadAnimationAsAsset({\r\n container: this.container,\r\n loop: true,\r\n autoplay: true,\r\n width: this.size,\r\n height: this.size\r\n }, 'TwoFactorSetupMonkeyIdle').then((animation) => {\r\n this.idleAnimation = animation;\r\n\r\n // ! animationIntersector will stop animation instantly\r\n if(!this.inputField.value.length) {\r\n animation.play();\r\n }\r\n\r\n return lottieLoader.waitForFirstFrame(animation);\r\n }),\r\n\r\n lottieLoader.loadAnimationAsAsset({\r\n container: this.container,\r\n loop: false,\r\n autoplay: false,\r\n width: this.size,\r\n height: this.size\r\n }, 'TwoFactorSetupMonkeyTracking').then((_animation) => {\r\n this.animation = _animation;\r\n\r\n if(!this.inputField.value.length) {\r\n this.animation.canvas.style.display = 'none';\r\n }\r\n\r\n this.animation.addEventListener('enterFrame', currentFrame => {\r\n //console.log('enterFrame', currentFrame, needFrame);\r\n //let currentFrame = Math.round(e.currentTime);\r\n \r\n if((this.animation.direction === 1 && currentFrame >= this.needFrame) ||\r\n (this.animation.direction === -1 && currentFrame <= this.needFrame)) {\r\n this.animation.setSpeed(1);\r\n this.animation.pause();\r\n }\r\n\r\n if(currentFrame === 0 && this.needFrame === 0) {\r\n //animation.curFrame = 0;\r\n \r\n if(this.idleAnimation) {\r\n this.idleAnimation.canvas.style.display = '';\r\n this.idleAnimation.play();\r\n this.animation.canvas.style.display = 'none';\r\n }\r\n }\r\n });\r\n //console.log(animation.getDuration(), animation.getDuration(true));\r\n\r\n return lottieLoader.waitForFirstFrame(_animation);\r\n })\r\n ]);\r\n }\r\n\r\n public remove() {\r\n if(this.animation) this.animation.remove();\r\n if(this.idleAnimation) this.idleAnimation.remove();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport mediaSizes from '../helpers/mediaSizes';\r\nimport { AuthSentCode, AuthSentCodeType, AuthSignIn } from '../layer';\r\nimport Page from './page';\r\nimport pageSignIn from './pageSignIn';\r\nimport TrackingMonkey from '../components/monkeys/tracking';\r\nimport CodeInputField from '../components/codeInputField';\r\nimport { i18n, LangPackKey } from '../lib/langPack';\r\nimport { randomLong } from '../helpers/random';\r\nimport replaceContent from '../helpers/dom/replaceContent';\r\nimport rootScope from '../lib/rootScope';\r\n\r\nlet authCode: AuthSentCode.authSentCode = null;\r\n\r\nlet headerElement: HTMLHeadElement = null;\r\nlet sentTypeElement: HTMLParagraphElement = null;\r\nlet codeInput: HTMLInputElement;\r\n\r\nlet onFirstMount = (): Promise<any> => {\r\n const CODELENGTH = (authCode.type as AuthSentCodeType.authSentCodeTypeApp).length;\r\n\r\n const codeInputField = new CodeInputField({\r\n label: 'Code',\r\n name: randomLong(),\r\n length: CODELENGTH,\r\n onFill: (code) => {\r\n submitCode(code);\r\n }\r\n });\r\n\r\n codeInput = codeInputField.input as HTMLInputElement;\r\n\r\n page.pageEl.querySelector('.input-wrapper').append(codeInputField.container);\r\n\r\n const editButton = page.pageEl.querySelector('.phone-edit') as HTMLElement;\r\n\r\n editButton.addEventListener('click', function() {\r\n return pageSignIn.mount();\r\n });\r\n\r\n const cleanup = () => {\r\n setTimeout(() => {\r\n monkey.remove();\r\n }, 300);\r\n };\r\n\r\n const submitCode = (code: string) => {\r\n codeInput.setAttribute('disabled', 'true');\r\n\r\n const params: AuthSignIn = {\r\n phone_number: authCode.phone_number,\r\n phone_code_hash: authCode.phone_code_hash,\r\n phone_code: code\r\n };\r\n\r\n //console.log('invoking auth.signIn with params:', params);\r\n\r\n rootScope.managers.apiManager.invokeApi('auth.signIn', params, {ignoreErrors: true})\r\n .then((response) => {\r\n //console.log('auth.signIn response:', response);\r\n \r\n switch(response._) {\r\n case 'auth.authorization':\r\n rootScope.managers.apiManager.setUser(response.user);\r\n\r\n import('./pageIm').then((m) => {\r\n m.default.mount();\r\n });\r\n cleanup();\r\n break;\r\n case 'auth.authorizationSignUpRequired':\r\n //console.log('Registration needed!');\r\n\r\n import('./pageSignUp').then((m) => {\r\n m.default.mount({\r\n 'phone_number': authCode.phone_number,\r\n 'phone_code_hash': authCode.phone_code_hash\r\n });\r\n });\r\n\r\n cleanup();\r\n break;\r\n /* default:\r\n codeInput.innerText = response._;\r\n break; */\r\n }\r\n }).catch(async(err) => {\r\n let good = false;\r\n switch(err.type) {\r\n case 'SESSION_PASSWORD_NEEDED':\r\n //console.warn('pageAuthCode: SESSION_PASSWORD_NEEDED');\r\n good = true;\r\n err.handled = true;\r\n await (await import('./pagePassword')).default.mount(); // lol\r\n setTimeout(() => {\r\n codeInput.value = '';\r\n }, 300);\r\n break;\r\n case 'PHONE_CODE_EXPIRED':\r\n codeInput.classList.add('error');\r\n replaceContent(codeInputField.label, i18n('PHONE_CODE_EXPIRED'));\r\n break;\r\n case 'PHONE_CODE_EMPTY':\r\n case 'PHONE_CODE_INVALID':\r\n codeInput.classList.add('error');\r\n replaceContent(codeInputField.label, i18n('PHONE_CODE_INVALID'));\r\n break;\r\n default:\r\n codeInputField.label.innerText = err.type;\r\n break;\r\n }\r\n\r\n if(!good) {\r\n codeInputField.select();\r\n }\r\n\r\n codeInput.removeAttribute('disabled');\r\n });\r\n };\r\n\r\n const imageDiv = page.pageEl.querySelector('.auth-image') as HTMLDivElement;\r\n const size = mediaSizes.isMobile ? 100 : 166;\r\n const monkey = new TrackingMonkey(codeInputField, size);\r\n imageDiv.append(monkey.container);\r\n return monkey.load();\r\n};\r\n\r\nconst page = new Page('page-authCode', true, onFirstMount, (_authCode: typeof authCode) => {\r\n authCode = _authCode;\r\n\r\n if(!headerElement) {\r\n headerElement = page.pageEl.getElementsByClassName('phone')[0] as HTMLHeadElement;\r\n sentTypeElement = page.pageEl.getElementsByClassName('sent-type')[0] as HTMLParagraphElement;\r\n } else {\r\n codeInput.value = '';\r\n\r\n const evt = document.createEvent('HTMLEvents');\r\n evt.initEvent('input', false, true);\r\n codeInput.dispatchEvent(evt);\r\n }\r\n\r\n headerElement.innerText = authCode.phone_number;\r\n let key: LangPackKey, args: any[];\r\n switch(authCode.type._) {\r\n case 'auth.sentCodeTypeSms':\r\n key = 'Login.Code.SentSms';\r\n break;\r\n case 'auth.sentCodeTypeApp': \r\n key = 'Login.Code.SentInApp';\r\n break;\r\n case 'auth.sentCodeTypeCall': \r\n key = 'Login.Code.SentCall';\r\n break;\r\n default:\r\n key = 'Login.Code.SentUnknown';\r\n args = [authCode.type._];\r\n break;\r\n }\r\n\r\n replaceContent(sentTypeElement, i18n(key, args));\r\n\r\n rootScope.managers.appStateManager.pushToState('authState', {_: 'authStateAuthCode', sentCode: _authCode});\r\n}, () => {\r\n codeInput.focus();\r\n});\r\n\r\nexport default page;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { putPreloader } from \"../components/putPreloader\";\r\nimport Scrollable from '../components/scrollable';\r\nimport Page from \"./page\";\r\nimport InputField from \"../components/inputField\";\r\nimport CheckboxField from \"../components/checkboxField\";\r\nimport Button from \"../components/button\";\r\nimport fastSmoothScroll from \"../helpers/fastSmoothScroll\";\r\nimport IS_TOUCH_SUPPORTED from \"../environment/touchSupport\";\r\nimport App from \"../config/app\";\r\nimport I18n, { _i18n, i18n } from \"../lib/langPack\";\r\nimport lottieLoader from \"../lib/rlottie/lottieLoader\";\r\nimport ripple from \"../components/ripple\";\r\nimport findUpTag from \"../helpers/dom/findUpTag\";\r\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\r\nimport { randomLong } from \"../helpers/random\";\r\nimport pageSignQR from \"./pageSignQR\";\r\nimport getLanguageChangeButton from \"../components/languageChangeButton\";\r\nimport cancelEvent from \"../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent } from \"../helpers/dom/clickEvent\";\r\nimport replaceContent from \"../helpers/dom/replaceContent\";\r\nimport toggleDisability from \"../helpers/dom/toggleDisability\";\r\nimport sessionStorage from \"../lib/sessionStorage\";\r\nimport { DcAuthKey } from \"../types\";\r\nimport placeCaretAtEnd from \"../helpers/dom/placeCaretAtEnd\";\r\nimport { HelpCountry, HelpCountryCode } from \"../layer\";\r\nimport { getCountryEmoji } from \"../vendor/emoji\";\r\nimport simulateEvent from \"../helpers/dom/dispatchEvent\";\r\nimport stateStorage from \"../lib/stateStorage\";\r\nimport rootScope from \"../lib/rootScope\";\r\nimport TelInputField from \"../components/telInputField\";\r\nimport IS_EMOJI_SUPPORTED from \"../environment/emojiSupport\";\r\nimport setInnerHTML from \"../helpers/dom/setInnerHTML\";\r\nimport wrapEmojiText from \"../lib/richTextProcessor/wrapEmojiText\";\r\nimport apiManagerProxy from \"../lib/mtproto/mtprotoworker\";\r\nimport CountryInputField from \"../components/countryInputField\";\r\n\r\n//import _countries from '../countries_pretty.json';\r\nlet btnNext: HTMLButtonElement = null, btnQr: HTMLButtonElement;\r\n\r\nlet onFirstMount = () => {\r\n /* if(Modes.test) {\r\n Countries.push({\r\n _: 'help.country',\r\n default_name: 'Test Country',\r\n country_codes: [{\r\n _: 'help.countryCode',\r\n country_code: '999 66',\r\n patterns: ['999 66 XXX XX']\r\n }],\r\n iso2: 'KK'\r\n });\r\n \r\n console.log('Added test country to list!');\r\n } */\r\n\r\n //const countries: Country[] = _countries.default.filter((c) => c.emoji);\r\n // const countries: Country[] = Countries.filter((c) => c.emoji).sort((a, b) => a.name.localeCompare(b.name));\r\n // const countries = I18n.countriesList.filter((country) => !country.pFlags?.hidden);\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n let lastCountrySelected: HelpCountry, lastCountryCodeSelected: HelpCountryCode;\r\n const countryInputField = new CountryInputField({\r\n onCountryChange: (country, code) => {\r\n lastCountrySelected = country, lastCountryCodeSelected = code;\r\n\r\n if(!code) {\r\n return;\r\n }\r\n\r\n telInputField.value = telInputField.lastValue = '+' + code.country_code;\r\n setTimeout(() => {\r\n telEl.focus();\r\n placeCaretAtEnd(telEl, true);\r\n }, 0);\r\n }\r\n });\r\n\r\n const telInputField = new TelInputField({\r\n onInput: (formatted) => {\r\n lottieLoader.loadLottieWorkers();\r\n\r\n const {country, code} = formatted || {};\r\n let countryName = country ? country.name || country.default_name : ''/* 'Unknown' */;\r\n if(countryName !== countryInputField.value && (\r\n !lastCountrySelected || \r\n !country ||\r\n !code || (\r\n lastCountrySelected !== country && \r\n lastCountryCodeSelected.country_code !== code.country_code\r\n )\r\n )\r\n ) {\r\n countryInputField.override(country, code, countryName);\r\n }\r\n \r\n //if(country && (telInputField.value.length - 1) >= (country.pattern ? country.pattern.length : 9)) {\r\n if(country || (telInputField.value.length - 1) > 1) {\r\n btnNext.style.visibility = '';\r\n } else {\r\n btnNext.style.visibility = 'hidden';\r\n }\r\n }\r\n });\r\n\r\n const telEl = telInputField.input;\r\n\r\n telEl.addEventListener('keypress', (e) => {\r\n //console.log('keypress', this.value);\r\n if(!btnNext.style.visibility &&/* this.value.length >= 9 && */ e.key === 'Enter') {\r\n return onSubmit();\r\n }\r\n });\r\n\r\n /* telEl.addEventListener('focus', function(this: typeof telEl, e) {\r\n this.removeAttribute('readonly'); // fix autocomplete\r\n });*/\r\n\r\n const signedCheckboxField = new CheckboxField({\r\n text: 'Login.KeepSigned', \r\n name: 'keepSession',\r\n withRipple: true,\r\n checked: true\r\n });\r\n\r\n signedCheckboxField.input.addEventListener('change', () => {\r\n const keepSigned = signedCheckboxField.checked;\r\n rootScope.managers.appStateManager.pushToState('keepSigned', keepSigned);\r\n \r\n apiManagerProxy.toggleStorages(keepSigned, true);\r\n });\r\n\r\n apiManagerProxy.getState().then((state) => {\r\n if(!stateStorage.isAvailable()) {\r\n signedCheckboxField.checked = false;\r\n signedCheckboxField.label.classList.add('checkbox-disabled');\r\n } else {\r\n signedCheckboxField.checked = state.keepSigned;\r\n }\r\n });\r\n\r\n btnNext = Button('btn-primary btn-color-primary', {text: 'Login.Next'});\r\n btnNext.style.visibility = 'hidden';\r\n\r\n const onSubmit = (e?: Event) => {\r\n if(e) {\r\n cancelEvent(e);\r\n }\r\n\r\n const toggle = toggleDisability([/* telEl, countryInput, */btnNext, btnQr], true);\r\n\r\n replaceContent(btnNext, i18n('PleaseWait'));\r\n putPreloader(btnNext);\r\n\r\n //return;\r\n\r\n let phone_number = telInputField.value;\r\n rootScope.managers.apiManager.invokeApi('auth.sendCode', {\r\n phone_number: phone_number,\r\n api_id: App.id,\r\n api_hash: App.hash,\r\n settings: {\r\n _: 'codeSettings' // that's how we sending Type\r\n }\r\n //lang_code: navigator.language || 'en'\r\n }).then((code) => {\r\n //console.log('got code', code);\r\n\r\n import('./pageAuthCode').then((m) => m.default.mount(Object.assign(code, {phone_number: phone_number})));\r\n }).catch((err) => {\r\n toggle();\r\n\r\n switch(err.type) {\r\n case 'PHONE_NUMBER_INVALID':\r\n telInputField.setError();\r\n replaceContent(telInputField.label, i18n('Login.PhoneLabelInvalid'));\r\n telEl.classList.add('error');\r\n replaceContent(btnNext, i18n('Login.Next'));\r\n break;\r\n default:\r\n console.error('auth.sendCode error:', err);\r\n btnNext.innerText = err.type;\r\n break;\r\n }\r\n });\r\n };\r\n\r\n attachClickEvent(btnNext, onSubmit);\r\n\r\n btnQr = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'Login.QR.Login'});\r\n\r\n let qrMounted = false;\r\n btnQr.addEventListener('click', () => {\r\n pageSignQR.mount();\r\n /* const promise = import('./pageSignQR');\r\n btnQr.disabled = true;\r\n\r\n let preloaderDiv: HTMLElement;\r\n if(!qrMounted) {\r\n preloaderDiv = putPreloader(btnQr);\r\n qrMounted = true;\r\n }\r\n\r\n promise.then((module) => {\r\n module.default.mount();\r\n\r\n setTimeout(() => {\r\n btnQr.removeAttribute('disabled');\r\n if(preloaderDiv) {\r\n preloaderDiv.remove();\r\n }\r\n }, 200);\r\n }); */\r\n });\r\n\r\n inputWrapper.append(countryInputField.container, telInputField.container, signedCheckboxField.label, btnNext, btnQr);\r\n\r\n const h4 = document.createElement('h4');\r\n h4.classList.add('text-center');\r\n _i18n(h4, 'Login.Title');\r\n\r\n const subtitle = document.createElement('div');\r\n subtitle.classList.add('subtitle', 'text-center');\r\n _i18n(subtitle, 'Login.StartText');\r\n\r\n page.pageEl.querySelector('.container').append(h4, subtitle, inputWrapper);\r\n\r\n let tryAgain = () => {\r\n rootScope.managers.apiManager.invokeApi('help.getNearestDc').then((nearestDcResult) => {\r\n const langPack = stateStorage.getFromCache('langPack');\r\n if(langPack && !langPack.countries?.hash) {\r\n I18n.getLangPack(langPack.lang_code).then(() => {\r\n simulateEvent(telEl, 'input');\r\n });\r\n }\r\n\r\n const dcs = new Set([1, 2, 3, 4, 5]);\r\n const done: number[] = [nearestDcResult.this_dc];\r\n\r\n let promise: Promise<any>;\r\n if(nearestDcResult.nearest_dc !== nearestDcResult.this_dc) {\r\n promise = rootScope.managers.apiManager.getNetworkerVoid(nearestDcResult.nearest_dc).then(() => {\r\n done.push(nearestDcResult.nearest_dc);\r\n });\r\n }\r\n\r\n (promise || Promise.resolve()).then(() => {\r\n done.forEach((dcId) => {\r\n dcs.delete(dcId);\r\n });\r\n\r\n const _dcs = [...dcs];\r\n const g = async(): Promise<void> => {\r\n const dcId = _dcs.shift();\r\n if(!dcId) return;\r\n\r\n const dbKey: DcAuthKey = `dc${dcId}_auth_key` as any;\r\n const key = await sessionStorage.get(dbKey);\r\n if(key) {\r\n return g();\r\n }\r\n\r\n setTimeout(() => { // * если одновременно запросить все нетворкеры, не будет проходить запрос на код\r\n rootScope.managers.apiManager.getNetworkerVoid(dcId/* , {fileDownload: true} */).finally(g);\r\n }, /* done.includes(dcId) ? 0 : */3000);\r\n };\r\n \r\n g();\r\n });\r\n \r\n return nearestDcResult;\r\n }).then((nearestDcResult) => {\r\n if(!countryInputField.value.length && !telInputField.value.length) {\r\n countryInputField.selectCountryByIso2(nearestDcResult.country);\r\n }\r\n \r\n //console.log('woohoo', nearestDcResult, country);\r\n })//.catch(tryAgain);\r\n };\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n setTimeout(() => {\r\n telEl.focus();\r\n }, 0);\r\n }\r\n\r\n getLanguageChangeButton(inputWrapper);\r\n\r\n tryAgain();\r\n};\r\n\r\nconst page = new Page('page-sign', true, onFirstMount, () => {\r\n if(btnNext) {\r\n replaceContent(btnNext, i18n('Login.Next'));\r\n ripple(btnNext, undefined, undefined, true);\r\n btnNext.removeAttribute('disabled');\r\n }\r\n\r\n if(btnQr) {\r\n btnQr.removeAttribute('disabled');\r\n }\r\n\r\n rootScope.managers.appStateManager.pushToState('authState', {_: 'authStateSignIn'});\r\n});\r\n\r\nexport default page;\r\n"],"names":["CodeInputField","constructor","options","super","plainText","input","this","type","setAttribute","autocomplete","lastLength","addEventListener","e","classList","remove","setLabel","value","replace","slice","length","setValueSilently","onFill","TrackingMonkey","inputField","size","max","needFrame","container","document","createElement","add","playAnimation","animation","frame","Math","min","round","idleAnimation","stop","canvas","style","display","direction","setDirection","setSpeed","play","load","loadPromise","Promise","all","loop","autoplay","width","height","then","_animation","currentFrame","pause","codeInput","authCode","headerElement","sentTypeElement","page","CODELENGTH","codeInputField","label","name","code","submitCode","pageEl","querySelector","append","cleanup","setTimeout","monkey","params","phone_number","phone_code_hash","phone_code","ignoreErrors","response","_","user","m","default","mount","catch","err","good","handled","innerText","select","removeAttribute","imageDiv","_authCode","evt","createEvent","initEvent","dispatchEvent","getElementsByClassName","key","args","sentCode","focus","btnQr","btnNext","inputWrapper","lastCountrySelected","lastCountryCodeSelected","countryInputField","onCountryChange","country","telInputField","lastValue","country_code","telEl","onInput","formatted","countryName","default_name","override","visibility","onSubmit","signedCheckboxField","text","withRipple","checked","keepSigned","state","toggle","api_id","api_hash","settings","Object","assign","setError","console","error","h4","subtitle","nearestDcResult","langPack","countries","hash","lang_code","dcs","Set","done","this_dc","promise","nearest_dc","push","resolve","forEach","dcId","delete","_dcs","g","shift","dbKey","finally","selectCountryByIso2","undefined"],"sourceRoot":""}