tweb/public/53.3829958682207da0768c.chu...

1 line
40 KiB
Plaintext

{"version":3,"file":"53.3829958682207da0768c.chunk.js","mappings":"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","sources":["webpack://tweb/./src/components/languageChangeButton.ts","webpack://tweb/./src/pages/pageAuthCode.ts","webpack://tweb/./src/pages/pageSignIn.ts","webpack://tweb/./src/helpers/bytes/bytesToBase64.ts","webpack://tweb/./src/pages/pageSignQR.ts","webpack://tweb/./src/helpers/fixBase64String.ts"],"sourcesContent":["/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport loadFonts from '../helpers/dom/loadFonts';\nimport {Config, LangPackDifference, LangPackString} from '../layer';\nimport I18n, {LangPackKey} from '../lib/langPack';\nimport rootScope from '../lib/rootScope';\nimport Button from './button';\nimport {putPreloader} from './putPreloader';\n\nlet set = false;\n\nfunction getLang(): Promise<[Config.config, LangPackString[], LangPackDifference.langPackDifference]> {\n if(cachedPromise) return cachedPromise;\n return cachedPromise = rootScope.managers.apiManager.getConfig().then((config) => {\n if(config.suggested_lang_code !== I18n.lastRequestedLangCode) {\n // I18n.loadLangPack(config.suggested_lang_code);\n\n return Promise.all([\n config,\n I18n.getStrings(config.suggested_lang_code, ['Login.ContinueOnLanguage']),\n I18n.getCacheLangPack()\n ]);\n } else {\n return [] as any;\n }\n });\n}\n\nlet cachedPromise: ReturnType<typeof getLang>;\n\nexport default function getLanguageChangeButton(appendTo: HTMLElement) {\n if(set) return;\n getLang().then(([config, strings]) => {\n if(!config) {\n return;\n }\n\n const backup: LangPackString[] = [];\n strings.forEach((string) => {\n const backupString = I18n.strings.get(string.key as LangPackKey);\n if(!backupString) {\n return;\n }\n\n backup.push(backupString);\n I18n.strings.set(string.key as LangPackKey, string);\n });\n\n const key: LangPackKey = 'Login.ContinueOnLanguage';\n const btnChangeLanguage = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: key});\n btnChangeLanguage.lastElementChild.classList.remove('i18n'); // prevent changing language\n loadFonts({text: [I18n.format(key, true)]}).then(() => {\n window.requestAnimationFrame(() => {\n appendTo.append(btnChangeLanguage);\n });\n });\n\n rootScope.addEventListener('language_change', () => {\n btnChangeLanguage.remove();\n }, {once: true});\n\n backup.forEach((string) => {\n I18n.strings.set(string.key as LangPackKey, string);\n });\n\n attachClickEvent(btnChangeLanguage, (e) => {\n cancelEvent(e);\n\n set = true;\n\n btnChangeLanguage.disabled = true;\n putPreloader(btnChangeLanguage);\n\n I18n.getLangPack(config.suggested_lang_code);\n });\n });\n}\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\nconst 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 Page from './page';\r\nimport CheckboxField from '../components/checkboxField';\r\nimport Button from '../components/button';\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 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 stateStorage from '../lib/stateStorage';\r\nimport rootScope from '../lib/rootScope';\r\nimport TelInputField from '../components/telInputField';\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\nconst 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 const 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 const 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 const 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 const 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 telInputField.simulateInputEvent();\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","export default function bytesToBase64(bytes: number[] | Uint8Array) {\n let mod3: number;\n let result = '';\n\n for(let nLen = bytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; ++nIdx) {\n mod3 = nIdx % 3;\n nUint24 |= bytes[nIdx] << (16 >>> mod3 & 24);\n if(mod3 === 2 || nLen - nIdx === 1) {\n result += String.fromCharCode(\n uint6ToBase64(nUint24 >>> 18 & 63),\n uint6ToBase64(nUint24 >>> 12 & 63),\n uint6ToBase64(nUint24 >>> 6 & 63),\n uint6ToBase64(nUint24 & 63)\n );\n nUint24 = 0;\n }\n }\n\n return result.replace(/A(?=A$|$)/g, '=');\n}\n\nexport function uint6ToBase64(nUint6: number) {\n return nUint6 < 26 ?\n nUint6 + 65 :\n nUint6 < 52 ?\n nUint6 + 71 :\n nUint6 < 62 ?\n nUint6 - 4 :\n nUint6 === 62 ?\n 43 :\n nUint6 === 63 ?\n 47 :\n 65;\n}\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 type {DcId} from '../types';\r\nimport Page from './page';\r\nimport {AuthAuthorization, AuthLoginToken} from '../layer';\r\nimport App from '../config/app';\r\nimport Button from '../components/button';\r\nimport {_i18n, i18n, LangPackKey} from '../lib/langPack';\r\nimport rootScope from '../lib/rootScope';\r\nimport {putPreloader} from '../components/putPreloader';\r\nimport getLanguageChangeButton from '../components/languageChangeButton';\r\nimport pause from '../helpers/schedulers/pause';\r\nimport fixBase64String from '../helpers/fixBase64String';\r\nimport bytesCmp from '../helpers/bytes/bytesCmp';\r\nimport bytesToBase64 from '../helpers/bytes/bytesToBase64';\r\n\r\nconst FETCH_INTERVAL = 3;\r\n\r\nconst onFirstMount = async() => {\r\n const pageElement = page.pageEl;\r\n const imageDiv = pageElement.querySelector('.auth-image') as HTMLDivElement;\r\n\r\n let preloader = putPreloader(imageDiv, true);\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const btnBack = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'Login.QR.Cancel'});\r\n inputWrapper.append(btnBack);\r\n\r\n getLanguageChangeButton(inputWrapper);\r\n\r\n const container = imageDiv.parentElement;\r\n\r\n const h4 = document.createElement('h4');\r\n _i18n(h4, 'Login.QR.Title');\r\n\r\n const helpList = document.createElement('ol');\r\n helpList.classList.add('qr-description');\r\n (['Login.QR.Help1', 'Login.QR.Help2', 'Login.QR.Help3'] as LangPackKey[]).forEach((key) => {\r\n const li = document.createElement('li');\r\n li.append(i18n(key));\r\n helpList.append(li);\r\n });\r\n\r\n container.append(h4, helpList, inputWrapper);\r\n\r\n btnBack.addEventListener('click', () => {\r\n import('./pageSignIn').then((m) => m.default.mount());\r\n stop = true;\r\n });\r\n\r\n const results = await Promise.all([\r\n import('qr-code-styling' as any)\r\n ]);\r\n const QRCodeStyling = results[0].default;\r\n\r\n let stop = false;\r\n rootScope.addEventListener('user_auth', () => {\r\n stop = true;\r\n cachedPromise = null;\r\n }, {once: true});\r\n\r\n const options: {dcId?: DcId, ignoreErrors: true} = {ignoreErrors: true};\r\n let prevToken: Uint8Array | number[];\r\n\r\n const iterate = async(isLoop: boolean) => {\r\n try {\r\n let loginToken = await rootScope.managers.apiManager.invokeApi('auth.exportLoginToken', {\r\n api_id: App.id,\r\n api_hash: App.hash,\r\n except_ids: []\r\n }, {ignoreErrors: true});\r\n\r\n if(loginToken._ === 'auth.loginTokenMigrateTo') {\r\n if(!options.dcId) {\r\n options.dcId = loginToken.dc_id as DcId;\r\n rootScope.managers.apiManager.setBaseDcId(loginToken.dc_id);\r\n // continue;\r\n }\r\n\r\n loginToken = await rootScope.managers.apiManager.invokeApi('auth.importLoginToken', {\r\n token: loginToken.token\r\n }, options) as AuthLoginToken.authLoginToken;\r\n }\r\n\r\n if(loginToken._ === 'auth.loginTokenSuccess') {\r\n const authorization = loginToken.authorization as any as AuthAuthorization.authAuthorization;\r\n rootScope.managers.apiManager.setUser(authorization.user);\r\n import('./pageIm').then((m) => m.default.mount());\r\n return true;\r\n }\r\n\r\n /* // to base64\r\n var decoder = new TextDecoder('utf8');\r\n var b64encoded = btoa(String.fromCharCode.apply(null, [...loginToken.token])); */\r\n\r\n if(!prevToken || !bytesCmp(prevToken, loginToken.token)) {\r\n prevToken = loginToken.token;\r\n\r\n const encoded = bytesToBase64(loginToken.token);\r\n const url = 'tg://login?token=' + fixBase64String(encoded, true);\r\n\r\n const style = window.getComputedStyle(document.documentElement);\r\n const surfaceColor = style.getPropertyValue('--surface-color').trim();\r\n const textColor = style.getPropertyValue('--primary-text-color').trim();\r\n const primaryColor = style.getPropertyValue('--primary-color').trim();\r\n\r\n const logoUrl = await fetch('assets/img/logo_padded.svg')\r\n .then((res) => res.text())\r\n .then((text) => {\r\n text = text.replace(/(fill:).+?(;)/, `$1${primaryColor}$2`);\r\n const blob = new Blob([text], {type: 'image/svg+xml;charset=utf-8'});\r\n\r\n // * because iOS Safari doesn't want to eat objectURL\r\n return new Promise<string>((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n resolve(e.target.result as string);\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n // return URL.createObjectURL(blob);\r\n });\r\n\r\n const qrCode = new QRCodeStyling({\r\n width: 240 * window.devicePixelRatio,\r\n height: 240 * window.devicePixelRatio,\r\n data: url,\r\n image: logoUrl,\r\n dotsOptions: {\r\n color: textColor,\r\n type: 'rounded'\r\n },\r\n cornersSquareOptions: {\r\n type: 'extra-rounded'\r\n },\r\n imageOptions: {\r\n imageSize: 1,\r\n margin: 0\r\n },\r\n backgroundOptions: {\r\n color: surfaceColor\r\n },\r\n qrOptions: {\r\n errorCorrectionLevel: 'L'\r\n }\r\n });\r\n\r\n qrCode.append(imageDiv);\r\n (imageDiv.lastChild as HTMLCanvasElement).classList.add('qr-canvas');\r\n\r\n let promise: Promise<void>;\r\n if(qrCode._drawingPromise) {\r\n promise = qrCode._drawingPromise;\r\n } else {\r\n promise = Promise.race([\r\n pause(1000),\r\n new Promise<void>((resolve) => {\r\n qrCode._canvas._image.addEventListener('load', () => {\r\n window.requestAnimationFrame(() => resolve());\r\n }, {once: true});\r\n })\r\n ]);\r\n }\r\n\r\n // * это костыль, но библиотека не предоставляет никаких событий\r\n await promise.then(() => {\r\n if(preloader) {\r\n preloader.style.animation = 'hide-icon .4s forwards';\r\n\r\n const c = imageDiv.children[1] as HTMLElement;\r\n c.style.display = 'none';\r\n c.style.animation = 'grow-icon .4s forwards';\r\n setTimeout(() => {\r\n c.style.display = '';\r\n }, 150);\r\n\r\n setTimeout(() => {\r\n c.style.animation = '';\r\n }, 500);\r\n preloader = undefined;\r\n } else {\r\n Array.from(imageDiv.children).slice(0, -1).forEach((el) => {\r\n el.remove();\r\n });\r\n }\r\n });\r\n }\r\n\r\n if(isLoop) {\r\n const timestamp = Date.now() / 1000;\r\n const diff = loginToken.expires - timestamp - await rootScope.managers.timeManager.getServerTimeOffset();\r\n\r\n await pause(diff > FETCH_INTERVAL ? 1e3 * FETCH_INTERVAL : 1e3 * diff | 0);\r\n }\r\n } catch(err) {\r\n switch((err as ApiError).type) {\r\n case 'SESSION_PASSWORD_NEEDED':\r\n (err as ApiError).handled = true;\r\n import('./pagePassword').then((m) => m.default.mount());\r\n stop = true;\r\n cachedPromise = null;\r\n break;\r\n default:\r\n console.error('pageSignQR: default error:', err);\r\n stop = true;\r\n break;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n // await iterate(false);\r\n\r\n return async() => {\r\n stop = false;\r\n\r\n do {\r\n if(stop) {\r\n break;\r\n }\r\n\r\n const needBreak = await iterate(true);\r\n if(needBreak) {\r\n break;\r\n }\r\n } while(true);\r\n };\r\n};\r\n\r\nlet cachedPromise: Promise<() => Promise<void>>;\r\nconst page = new Page('page-signQR', true, () => {\r\n return cachedPromise;\r\n}, () => {\r\n // console.log('onMount');\r\n if(!cachedPromise) cachedPromise = onFirstMount();\r\n cachedPromise.then((func) => {\r\n func();\r\n });\r\n\r\n rootScope.managers.appStateManager.pushToState('authState', {_: 'authStateSignQr'});\r\n});\r\n\r\nexport default page;\r\n","export default function fixBase64String(str: string, toUrl: boolean) {\n if(toUrl) {\n return str.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=+$/, '');\n } else {\n return str.replace(/-/g, '+').replace(/_/g, '/');\n }\n}\n"],"names":["cachedPromise","set","getLanguageChangeButton","appendTo","then","config","suggested_lang_code","Promise","all","strings","backup","forEach","string","backupString","key","push","btnChangeLanguage","text","lastElementChild","classList","remove","window","requestAnimationFrame","append","once","e","disabled","codeInput","authCode","headerElement","sentTypeElement","page","CODELENGTH","type","length","codeInputField","label","name","onFill","code","submitCode","input","pageEl","querySelector","container","addEventListener","cleanup","setTimeout","monkey","setAttribute","params","phone_number","phone_code_hash","phone_code","ignoreErrors","response","_","user","m","default","mount","catch","err","good","handled","value","add","innerText","select","removeAttribute","imageDiv","size","load","_authCode","evt","document","createEvent","initEvent","dispatchEvent","getElementsByClassName","args","sentCode","focus","btnQr","btnNext","inputWrapper","createElement","lastCountrySelected","lastCountryCodeSelected","countryInputField","onCountryChange","country","telInputField","lastValue","country_code","telEl","onInput","formatted","countryName","default_name","override","style","visibility","onSubmit","signedCheckboxField","withRipple","checked","keepSigned","state","toggle","api_id","api_hash","settings","Object","assign","setError","console","error","h4","subtitle","nearestDcResult","langPack","countries","hash","lang_code","simulateInputEvent","dcs","Set","done","this_dc","promise","nearest_dc","resolve","dcId","delete","_dcs","g","shift","dbKey","finally","selectCountryByIso2","undefined","uint6ToBase64","nUint6","preloader","putPreloader","btnBack","parentElement","helpList","li","stop","QRCodeStyling","rootScope","options","prevToken","iterate","isLoop","loginToken","except_ids","dc_id","token","authorization","bytesCmp","url","bytes","mod3","result","nLen","nUint24","nIdx","String","fromCharCode","replace","bytesToBase64","getComputedStyle","documentElement","surfaceColor","getPropertyValue","trim","textColor","primaryColor","logoUrl","fetch","res","blob","Blob","reader","FileReader","onload","target","readAsDataURL","qrCode","width","devicePixelRatio","height","data","image","dotsOptions","color","cornersSquareOptions","imageOptions","imageSize","margin","backgroundOptions","qrOptions","errorCorrectionLevel","lastChild","_drawingPromise","race","pause","_canvas","_image","animation","c","children","display","Array","from","slice","el","timestamp","Date","now","diff","expires","func"],"sourceRoot":""}