tweb/public/641.527b52a7a5052f57e455.ch...

1 line
31 KiB
Plaintext

{"version":3,"file":"641.527b52a7a5052f57e455.chunk.js","mappings":"oMAeA,IAmBIA,EAnBAC,GAAM,EAqBK,SAASC,EAAwBC,GAC3CF,IAnBAD,IACIA,EAAgB,oCAA0CI,MAAMC,GAClEA,EAAOC,sBAAwB,2BAGzBC,QAAQC,IAAI,CACjBH,EACA,gBAAgBA,EAAOC,oBAAqB,CAAC,6BAC7C,0BAGK,OASDF,MAAK,EAAEC,EAAQI,MACvB,IAAIJ,EACF,OAGF,MAAMK,EAA2B,GACjCD,EAAQE,SAASC,IACf,MAAMC,EAAe,iBAAiBD,EAAOE,KACzCD,IAIJH,EAAOK,KAAKF,GACZ,iBAAiBD,EAAOE,IAAoBF,GAAO,IAGrD,MAAME,EAAmB,2BACnBE,GAAoB,OAAO,4DAA6D,CAACC,KAAMH,IACrGE,EAAkBE,iBAAiBC,UAAUC,OAAO,SACpD,OAAU,CAACH,KAAM,CAAC,YAAYH,GAAK,MAASV,MAAK,KAC/CiB,OAAOC,uBAAsB,KAC3BnB,EAASoB,OAAOP,EAAkB,GAClC,IAGJ,qBAA2B,mBAAmB,KAC5CA,EAAkBI,QAAQ,GACzB,CAACI,MAAM,IAEVd,EAAOC,SAASC,IACd,iBAAiBA,EAAOE,IAAoBF,EAAO,KAGrD,QAAiBI,GAAoBS,KACnC,OAAYA,GAEZxB,GAAM,EAENe,EAAkBU,UAAW,GAC7B,OAAaV,GAEb,iBAAiBX,EAAOC,oBAAoB,GAC5C,GAEN,C,4QClDA,IAAuCqB,EAAnCC,EAA6B,KAEjC,MAyQMC,EAAO,IAAI,IAAK,aAAa,GAzQd,KAoBnB,MAAMC,EAAeC,SAASC,cAAc,OAG5C,IAAIC,EAAkCC,EAFtCJ,EAAaX,UAAUgB,IAAI,iBAG3B,MAAMC,EAAoB,IAAI,IAAkB,CAC9CC,gBAAiB,CAACC,EAASC,KACzBN,EAAsBK,EAASJ,EAA0BK,EAErDA,IAIJC,EAAcC,MAAQD,EAAcE,UAAY,IAAMH,EAAKI,aAC3DC,YAAW,KACTC,EAAMC,SACN,OAAgBD,GAAO,EAAK,GAC3B,GAAE,IAIHL,EAAgB,IAAI,IAAc,CACtCO,QAAUC,IACR,wBAEA,MAAM,QAACV,EAAO,KAAEC,GAAQS,GAAa,CAAC,EAChCC,EAAcX,EAAUA,EAAQY,MAAQZ,EAAQa,aAAe,GAClEF,IAAgBb,EAAkBK,OAClCR,GACEK,GACAC,IACDN,IAAwBK,GACtBJ,EAAwBS,eAAiBJ,EAAKI,eAIlDP,EAAkBgB,SAASd,EAASC,EAAMU,GAIzCX,GAAYE,EAAcC,MAAMY,OAAS,EAAK,EAC/CzB,EAAQ0B,MAAMC,WAAa,GAE3B3B,EAAQ0B,MAAMC,WAAa,Q,IAK3BV,EAAQL,EAAcgB,MAE5BX,EAAMY,iBAAiB,YAAahC,IAElC,IAAIG,EAAQ0B,MAAMC,YAAuD,UAAV9B,EAAEX,IAC/D,OAAO4C,G,IAQX,MAAMC,EAAsB,IAAI,IAAc,CAC5C1C,KAAM,mBACNiC,KAAM,cACNU,YAAY,EACZC,SAAS,IAGXF,EAAoBH,MAAMC,iBAAiB,UAAU,KACnD,MAAMK,EAAaH,EAAoBE,QACvC,yCAA+C,aAAcC,GAE7D,mBAA+BA,GAAY,EAAK,IAGlD,eAA2B1D,MAAM2D,IAC3B,kBAIFJ,EAAoBE,QAAUE,EAAMD,YAHpCH,EAAoBE,SAAU,EAC9BF,EAAoBK,MAAM7C,UAAUgB,IAAI,qB,IAM5CP,GAAU,OAAO,gCAAiC,CAACX,KAAM,eACzDW,EAAQ0B,MAAMC,WAAa,SAE3B,MAAMG,EAAYjC,IACbA,IACD,OAAYA,GAGd,MAAMwC,GAAS,OAAiB,CAA4BrC,EAASD,IAAQ,IAE7E,OAAeC,GAAS,QAAK,gBAC7B,OAAaA,GAIb,MAAMsC,EAAe1B,EAAcC,MACnC,kCAAwC,gBAAiB,CACvDyB,aAAcA,EACdC,OAAQ,OACRC,SAAU,SACVC,SAAU,CACRC,EAAG,eACHC,OAAQ,CAAC,KAGVnE,MAAMmC,IAGP,GAAc,yBAAXA,EAAK+B,EAA8B,CACpC,MAAM,cAACE,GAAiBjC,EACD,uBAApBiC,EAAcF,IACf,gCAAsCE,EAAcC,MAEpD,8BAAmBrE,MAAMsE,IACvBA,EAAEC,QAAQC,OAAO,I,CAKvB,8BAAyBxE,MAAMsE,GAAMA,EAAEC,QAAQC,MAAMC,OAAOC,OAAOvC,EAAM,CAAC2B,aAAcA,MAAgB,IACvGa,OAAOC,IACRf,IAGO,yBADAe,EAAIC,MAEPzC,EAAc0C,YACd,OAAe1C,EAAcwB,OAAO,QAAK,4BACzCnB,EAAM1B,UAAUgB,IAAI,UACpB,OAAeP,GAAS,QAAK,iBAG7BuD,QAAQC,MAAM,uBAAwBJ,GACtCpD,EAAQyD,UAAYL,EAAIC,K,GAG5B,GAGJ,QAAiBrD,EAAS8B,GAE1B/B,GAAQ,OAAO,4DAA6D,CAACV,KAAM,mBAGnFU,EAAM8B,iBAAiB,SAAS,KAC9B,iBAAkB,IAsBpB3B,EAAaP,OAAOa,EAAkBkD,UAAW9C,EAAc8C,UAAW3B,EAAoBK,MAAOpC,EAASD,GAE9G,MAAM4D,EAAKxD,SAASC,cAAc,MAClCuD,EAAGpE,UAAUgB,IAAI,gBACjB,QAAMoD,EAAI,eAEV,MAAMC,EAAWzD,SAASC,cAAc,OACxCwD,EAASrE,UAAUgB,IAAI,WAAY,gBACnC,QAAMqD,EAAU,mBAEhB3D,EAAK4D,OAAOC,cAAc,cAAcnE,OAAOgE,EAAIC,EAAU1D,GAuDzD,KACFc,YAAW,KACTC,EAAMC,OAAO,GACZ,IAGL,OAAwBhB,GA1DtB,kCAAwC,qBAAqB1B,MAAMuF,I,MACjE,MAAMC,EAAW,iBAA0B,YACxCA,KAA+B,QAAlB,EAAAA,EAASC,iBAAS,eAAEC,OAClC,iBAAiBF,EAASG,WAAW3F,MAAK,KACxCoC,EAAcwD,oBAAoB,IAItC,MAAMC,EAAM,IAAIC,IAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAC3BC,EAAiB,CAACR,EAAgBS,SAExC,IAAIC,EA+BJ,OA9BGV,EAAgBW,aAAeX,EAAgBS,UAChDC,EAAU,yCAA+CV,EAAgBW,YAAYlG,MAAK,KACxF+F,EAAKpF,KAAK4E,EAAgBW,WAAW,MAIxCD,GAAW9F,QAAQgG,WAAWnG,MAAK,KAClC+F,EAAKxF,SAAS6F,IACZP,EAAIQ,OAAOD,EAAK,IAGlB,MAAME,EAAO,IAAIT,GACXU,EAAI,KAA0B,O,OAAD,E,OAAA,E,EAAA,YACjC,MAAMH,EAAOE,EAAKE,QAClB,IAAIJ,EAAM,OAEV,MAAMK,EAAmB,KAAKL,aAE9B,SADkB,QAAmBK,GAEnC,OAAOF,IAGT/D,YAAW,KACT,yCAA+C4D,GAAkCM,QAAQH,EAAE,GAC1D,IACrC,E,YAbmC,K,6QAalC,EAEDA,GAAG,IAGEhB,CAAe,IACrBvF,MAAMuF,IACHvD,EAAkBK,MAAMY,QAAWb,EAAcC,MAAMY,QACzDjB,EAAkB2E,oBAAoBpB,EAAgBrD,Q,GAelD,IAG2C,KAClDV,KACD,OAAeA,GAAS,QAAK,gBAC7B,OAAOA,OAASoF,OAAWA,GAAW,GACtCpF,EAAQqF,gBAAgB,aAGvBtF,GACDA,EAAMsF,gBAAgB,YAGxB,yCAA+C,YAAa,CAAC3C,EAAG,mBAAmB,IAGrF,G,4ICpSO,SAAS4C,EAAcC,GAC5B,OAAOA,EAAS,GACdA,EAAS,GACTA,EAAS,GACPA,EAAS,GACTA,EAAS,GACPA,EAAS,EACE,KAAXA,EACE,GACW,KAAXA,EACE,GACA,EACZ,C,oTCoMA,IAAInH,EACJ,MAAM,EAAO,IAAI,IAAK,eAAe,GAAM,IAClCA,IACN,KAEGA,IAAeA,EAnNW,OAAD,6BAC7B,MACMoH,EADc,EAAK3B,OACIC,cAAc,eAE3C,IAAI2B,GAAY,EAAAC,EAAA,GAAaF,GAAU,GAEvC,MAAMtF,EAAeC,SAASC,cAAc,OAC5CF,EAAaX,UAAUgB,IAAI,iBAE3B,MAAMoF,GAAU,OAAO,4DAA6D,CAACtG,KAAM,oBAC3Fa,EAAaP,OAAOgG,IAEpB,OAAwBzF,GAExB,MAAMwD,EAAY8B,EAASI,cAErBjC,EAAKxD,SAASC,cAAc,OAClC,QAAMuD,EAAI,kBAEV,MAAMkC,EAAW1F,SAASC,cAAc,MACxCyF,EAAStG,UAAUgB,IAAI,kBACtB,CAAC,iBAAkB,iBAAkB,kBAAoCxB,SAASG,IACjF,MAAM4G,EAAK3F,SAASC,cAAc,MAClC0F,EAAGnG,QAAO,QAAKT,IACf2G,EAASlG,OAAOmG,EAAG,IAGrBpC,EAAU/D,OAAOgE,EAAIkC,EAAU3F,GAE/ByF,EAAQ9D,iBAAiB,SAAS,KAChC,6BAAuBrD,MAAMsE,GAAMA,EAAEC,QAAQC,UAC7C+C,GAAO,CAAI,IAGb,MAGMC,SAHgBrH,QAAQC,IAAI,CAChC,sCAE4B,GAAGmE,QAEjC,IAAIgD,GAAO,EACXE,EAAA,mBAA2B,aAAa,KACtCF,GAAO,EACP3H,EAAgB,IAAI,GACnB,CAACwB,MAAM,IAEV,MAAMsG,EAA6C,CAACC,cAAc,GAClE,IAAIC,EAEJ,MAAMC,EAAgBC,GAAoB,OAAD,6BACvC,IACE,IAAIC,QAAmBN,EAAA,gCAAwC,wBAAyB,CACtF1D,OAAQ,OACRC,SAAU,SACVgE,WAAY,IACX,CAACL,cAAc,IAclB,GAZoB,6BAAjBI,EAAW7D,IACRwD,EAAQtB,OACVsB,EAAQtB,KAAO2B,EAAWE,MAC1BR,EAAA,kCAA0CM,EAAWE,QAIvDF,QAAmBN,EAAA,gCAAwC,wBAAyB,CAClFS,MAAOH,EAAWG,OACjBR,IAGe,2BAAjBK,EAAW7D,EAAgC,CAC5C,MAAME,EAAgB2D,EAAW3D,cAGjC,OAFAqD,EAAA,8BAAsCrD,EAAcC,MACpD,8BAAmBrE,MAAMsE,GAAMA,EAAEC,QAAQC,WAClC,C,CAOT,IAAIoD,KAAc,EAAAO,EAAA,GAASP,EAAWG,EAAWG,OAAQ,CACvDN,EAAYG,EAAWG,MAEvB,MACME,EAAM,oBD1GL,SAAuBC,GACpC,IAAIC,EACAC,EAAS,GAEb,IAAI,IAAIC,EAAOH,EAAMpF,OAAQwF,EAAU,EAAGC,EAAO,EAAGA,EAAOF,IAAQE,EACjEJ,EAAOI,EAAO,EACdD,GAAWJ,EAAMK,KAAU,KAAOJ,EAAO,IAC7B,IAATA,GAAcE,EAAOE,GAAS,IAC/BH,GAAUI,OAAOC,aACf9B,EAAc2B,IAAY,GAAK,IAC/B3B,EAAc2B,IAAY,GAAK,IAC/B3B,EAAc2B,IAAY,EAAI,IAC9B3B,EAAwB,GAAV2B,IAEhBA,EAAU,GAId,OAAOF,EAAOM,QAAQ,aAAc,IACtC,CCsFwBC,CAAcf,EAAWG,OCvGlCW,QAAQ,MAAO,KAAKA,QAAQ,MAAO,KAAKA,QAAQ,OAAQ,ID0GzD3F,EAAQjC,OAAO8H,iBAAiBpH,SAASqH,iBACzCC,EAAe/F,EAAMgG,iBAAiB,mBAAmBC,OACzDC,EAAYlG,EAAMgG,iBAAiB,wBAAwBC,OAC3DE,EAAenG,EAAMgG,iBAAiB,mBAAmBC,OAEzDG,QAAgBC,MAAM,8BAC3BvJ,MAAMwJ,GAAQA,EAAI3I,SAClBb,MAAMa,IACLA,EAAOA,EAAKgI,QAAQ,gBAAiB,KAAKQ,QACnC,EAAAI,EAAA,GAAa5I,MAGhB6I,EAAS,IAAIlC,EAAc,CAC/BmC,MAAO,IAAM1I,OAAO2I,iBACpBC,OAAQ,IAAM5I,OAAO2I,iBACrBE,KAAM1B,EACN2B,MAAOT,EACPU,YAAa,CACXC,MAAOb,EACPvE,KAAM,WAERqF,qBAAsB,CACpBrF,KAAM,iBAERsF,aAAc,CACZC,UAAW,EACXC,OAAQ,GAEVC,kBAAmB,CACjBL,MAAOhB,GAETsB,UAAW,CACTC,qBAAsB,OAO1B,IAAIvE,EAHJyD,EAAOvI,OAAO6F,GACbA,EAASyD,UAAgC1J,UAAUgB,IAAI,aAItDkE,EADCyD,EAAOgB,gBACEhB,EAAOgB,gBAEPvK,QAAQwK,KAAK,EACrB,EAAAC,EAAA,GAAM,KACN,IAAIzK,SAAegG,IACjBuD,EAAOmB,QAAQC,OAAOzH,iBAAiB,QAAQ,KAC7CpC,OAAOC,uBAAsB,IAAMiF,KAAU,GAC5C,CAAC/E,MAAM,GAAM,YAMhB6E,EAAQjG,MAAK,KACjB,GAAGiH,EAAW,CACZA,EAAU/D,MAAM6H,UAAY,yBAE5B,MAAMC,EAAIhE,EAASiE,SAAS,GAC5BD,EAAE9H,MAAMgI,QAAU,OAClBF,EAAE9H,MAAM6H,UAAY,yBACpBvI,YAAW,KACTwI,EAAE9H,MAAMgI,QAAU,EAAE,GACnB,KAEH1I,YAAW,KACTwI,EAAE9H,MAAM6H,UAAY,EAAE,GACrB,KACH9D,OAAYL,C,MAEZuE,MAAMC,KAAKpE,EAASiE,UAAUI,MAAM,GAAI,GAAG9K,SAAS+K,IAClDA,EAAGtK,QAAQ,G,IAMnB,GAAG8G,EAAQ,CACT,MAAMyD,EAAYC,KAAKC,MAAQ,IACzBC,EAAO3D,EAAW4D,QAAUJ,SAAkB9D,EAAA,oDAE9C,EAAAmD,EAAA,GAAMc,EAxKG,EAwKqB,IAAuB,IAAMA,EAAO,E,EAE1E,MAAM9G,GAcN,MAZO,4BADCA,EAAiBC,MAEpBD,EAAiBgH,SAAU,EAC5B,8BAAyB5L,MAAMsE,GAAMA,EAAEC,QAAQC,UAC/C+C,GAAO,EACP3H,EAAgB,OAGhBmF,QAAQC,MAAM,6BAA8BJ,GAC5C2C,GAAO,IAIJ,C,CAGT,OAAO,CACT,IAIA,MAAO,IAAW,OAAD,6BAGf,IAFAA,GAAO,GAGFA,WAIqBM,GAAQ,MAKpC,GACF,KAQEjI,EAAcI,MAAM6L,IAClBA,GAAM,IAGRpE,EAAA,uCAA+C,YAAa,CAACvD,EAAG,mBAAmB,IAGrF,G","sources":["webpack://tweb/./src/components/languageChangeButton.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","/*\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 {putPreloader} from '../components/putPreloader';\nimport Page from './page';\nimport CheckboxField from '../components/checkboxField';\nimport Button from '../components/button';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport App from '../config/app';\nimport I18n, {_i18n, i18n} from '../lib/langPack';\nimport lottieLoader from '../lib/rlottie/lottieLoader';\nimport ripple from '../components/ripple';\nimport pageSignQR from './pageSignQR';\nimport getLanguageChangeButton from '../components/languageChangeButton';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport toggleDisability from '../helpers/dom/toggleDisability';\nimport sessionStorage from '../lib/sessionStorage';\nimport {DcAuthKey} from '../types';\nimport placeCaretAtEnd from '../helpers/dom/placeCaretAtEnd';\nimport {HelpCountry, HelpCountryCode} from '../layer';\nimport stateStorage from '../lib/stateStorage';\nimport rootScope from '../lib/rootScope';\nimport TelInputField from '../components/telInputField';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport CountryInputField from '../components/countryInputField';\n\n// import _countries from '../countries_pretty.json';\nlet btnNext: HTMLButtonElement = null, btnQr: HTMLButtonElement;\n\nconst onFirstMount = () => {\n /* if(Modes.test) {\n Countries.push({\n _: 'help.country',\n default_name: 'Test Country',\n country_codes: [{\n _: 'help.countryCode',\n country_code: '999 66',\n patterns: ['999 66 XXX XX']\n }],\n iso2: 'KK'\n });\n\n console.log('Added test country to list!');\n } */\n\n // const countries: Country[] = _countries.default.filter((c) => c.emoji);\n // const countries: Country[] = Countries.filter((c) => c.emoji).sort((a, b) => a.name.localeCompare(b.name));\n // const countries = I18n.countriesList.filter((country) => !country.pFlags?.hidden);\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n let lastCountrySelected: HelpCountry, lastCountryCodeSelected: HelpCountryCode;\n const countryInputField = new CountryInputField({\n onCountryChange: (country, code) => {\n lastCountrySelected = country, lastCountryCodeSelected = code;\n\n if(!code) {\n return;\n }\n\n telInputField.value = telInputField.lastValue = '+' + code.country_code;\n setTimeout(() => {\n telEl.focus();\n placeCaretAtEnd(telEl, true);\n }, 0);\n }\n });\n\n const telInputField = new TelInputField({\n onInput: (formatted) => {\n lottieLoader.loadLottieWorkers();\n\n const {country, code} = formatted || {};\n const countryName = country ? country.name || country.default_name : ''/* 'Unknown' */;\n if(countryName !== countryInputField.value && (\n !lastCountrySelected ||\n !country ||\n !code || (\n lastCountrySelected !== country &&\n lastCountryCodeSelected.country_code !== code.country_code\n )\n )\n ) {\n countryInputField.override(country, code, countryName);\n }\n\n // if(country && (telInputField.value.length - 1) >= (country.pattern ? country.pattern.length : 9)) {\n if(country || (telInputField.value.length - 1) > 1) {\n btnNext.style.visibility = '';\n } else {\n btnNext.style.visibility = 'hidden';\n }\n }\n });\n\n const telEl = telInputField.input;\n\n telEl.addEventListener('keypress', (e) => {\n // console.log('keypress', this.value);\n if(!btnNext.style.visibility &&/* this.value.length >= 9 && */ e.key === 'Enter') {\n return onSubmit();\n }\n });\n\n /* telEl.addEventListener('focus', function(this: typeof telEl, e) {\n this.removeAttribute('readonly'); // fix autocomplete\n });*/\n\n const signedCheckboxField = new CheckboxField({\n text: 'Login.KeepSigned',\n name: 'keepSession',\n withRipple: true,\n checked: true\n });\n\n signedCheckboxField.input.addEventListener('change', () => {\n const keepSigned = signedCheckboxField.checked;\n rootScope.managers.appStateManager.pushToState('keepSigned', keepSigned);\n\n apiManagerProxy.toggleStorages(keepSigned, true);\n });\n\n apiManagerProxy.getState().then((state) => {\n if(!stateStorage.isAvailable()) {\n signedCheckboxField.checked = false;\n signedCheckboxField.label.classList.add('checkbox-disabled');\n } else {\n signedCheckboxField.checked = state.keepSigned;\n }\n });\n\n btnNext = Button('btn-primary btn-color-primary', {text: 'Login.Next'});\n btnNext.style.visibility = 'hidden';\n\n const onSubmit = (e?: Event) => {\n if(e) {\n cancelEvent(e);\n }\n\n const toggle = toggleDisability([/* telEl, countryInput, */btnNext, btnQr], true);\n\n replaceContent(btnNext, i18n('PleaseWait'));\n putPreloader(btnNext);\n\n // return;\n\n const phone_number = telInputField.value;\n rootScope.managers.apiManager.invokeApi('auth.sendCode', {\n phone_number: phone_number,\n api_id: App.id,\n api_hash: App.hash,\n settings: {\n _: 'codeSettings', // that's how we sending Type\n pFlags: {}\n }\n // lang_code: navigator.language || 'en'\n }).then((code) => {\n // console.log('got code', code);\n\n if(code._ === 'auth.sentCodeSuccess') {\n const {authorization} = code;\n if(authorization._ === 'auth.authorization') {\n rootScope.managers.apiManager.setUser(authorization.user);\n\n import('./pageIm').then((m) => {\n m.default.mount();\n });\n }\n }\n\n import('./pageAuthCode').then((m) => m.default.mount(Object.assign(code, {phone_number: phone_number})));\n }).catch((err) => {\n toggle();\n\n switch(err.type) {\n case 'PHONE_NUMBER_INVALID':\n telInputField.setError();\n replaceContent(telInputField.label, i18n('Login.PhoneLabelInvalid'));\n telEl.classList.add('error');\n replaceContent(btnNext, i18n('Login.Next'));\n break;\n default:\n console.error('auth.sendCode error:', err);\n btnNext.innerText = err.type;\n break;\n }\n });\n };\n\n attachClickEvent(btnNext, onSubmit);\n\n btnQr = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'Login.QR.Login'});\n\n const qrMounted = false;\n btnQr.addEventListener('click', () => {\n pageSignQR.mount();\n /* const promise = import('./pageSignQR');\n btnQr.disabled = true;\n\n let preloaderDiv: HTMLElement;\n if(!qrMounted) {\n preloaderDiv = putPreloader(btnQr);\n qrMounted = true;\n }\n\n promise.then((module) => {\n module.default.mount();\n\n setTimeout(() => {\n btnQr.removeAttribute('disabled');\n if(preloaderDiv) {\n preloaderDiv.remove();\n }\n }, 200);\n }); */\n });\n\n inputWrapper.append(countryInputField.container, telInputField.container, signedCheckboxField.label, btnNext, btnQr);\n\n const h4 = document.createElement('h4');\n h4.classList.add('text-center');\n _i18n(h4, 'Login.Title');\n\n const subtitle = document.createElement('div');\n subtitle.classList.add('subtitle', 'text-center');\n _i18n(subtitle, 'Login.StartText');\n\n page.pageEl.querySelector('.container').append(h4, subtitle, inputWrapper);\n\n const tryAgain = () => {\n rootScope.managers.apiManager.invokeApi('help.getNearestDc').then((nearestDcResult) => {\n const langPack = stateStorage.getFromCache('langPack');\n if(langPack && !langPack.countries?.hash) {\n I18n.getLangPack(langPack.lang_code).then(() => {\n telInputField.simulateInputEvent();\n });\n }\n\n const dcs = new Set([1, 2, 3, 4, 5]);\n const done: number[] = [nearestDcResult.this_dc];\n\n let promise: Promise<any>;\n if(nearestDcResult.nearest_dc !== nearestDcResult.this_dc) {\n promise = rootScope.managers.apiManager.getNetworkerVoid(nearestDcResult.nearest_dc).then(() => {\n done.push(nearestDcResult.nearest_dc);\n });\n }\n\n (promise || Promise.resolve()).then(() => {\n done.forEach((dcId) => {\n dcs.delete(dcId);\n });\n\n const _dcs = [...dcs];\n const g = async(): Promise<void> => {\n const dcId = _dcs.shift();\n if(!dcId) return;\n\n const dbKey: DcAuthKey = `dc${dcId}_auth_key` as any;\n const key = await sessionStorage.get(dbKey);\n if(key) {\n return g();\n }\n\n setTimeout(() => { // * если одновременно запросить все нетворкеры, не будет проходить запрос на код\n rootScope.managers.apiManager.getNetworkerVoid(dcId/* , {fileDownload: true} */).finally(g);\n }, /* done.includes(dcId) ? 0 : */3000);\n };\n\n g();\n });\n\n return nearestDcResult;\n }).then((nearestDcResult) => {\n if(!countryInputField.value.length && !telInputField.value.length) {\n countryInputField.selectCountryByIso2(nearestDcResult.country);\n }\n\n // console.log('woohoo', nearestDcResult, country);\n })// .catch(tryAgain);\n };\n\n if(!IS_TOUCH_SUPPORTED) {\n setTimeout(() => {\n telEl.focus();\n }, 0);\n }\n\n getLanguageChangeButton(inputWrapper);\n\n tryAgain();\n};\n\nconst page = new Page('page-sign', true, onFirstMount, () => {\n if(btnNext) {\n replaceContent(btnNext, i18n('Login.Next'));\n ripple(btnNext, undefined, undefined, true);\n btnNext.removeAttribute('disabled');\n }\n\n if(btnQr) {\n btnQr.removeAttribute('disabled');\n }\n\n rootScope.managers.appStateManager.pushToState('authState', {_: 'authStateSignIn'});\n});\n\nexport default page;\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","/*\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 type {DcId} from '../types';\nimport Page from './page';\nimport {AuthAuthorization, AuthLoginToken} from '../layer';\nimport App from '../config/app';\nimport Button from '../components/button';\nimport {_i18n, i18n, LangPackKey} from '../lib/langPack';\nimport rootScope from '../lib/rootScope';\nimport {putPreloader} from '../components/putPreloader';\nimport getLanguageChangeButton from '../components/languageChangeButton';\nimport pause from '../helpers/schedulers/pause';\nimport fixBase64String from '../helpers/fixBase64String';\nimport bytesCmp from '../helpers/bytes/bytesCmp';\nimport bytesToBase64 from '../helpers/bytes/bytesToBase64';\nimport textToSvgURL from '../helpers/textToSvgURL';\n\nconst FETCH_INTERVAL = 3;\n\nconst onFirstMount = async() => {\n const pageElement = page.pageEl;\n const imageDiv = pageElement.querySelector('.auth-image') as HTMLDivElement;\n\n let preloader = putPreloader(imageDiv, true);\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const btnBack = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'Login.QR.Cancel'});\n inputWrapper.append(btnBack);\n\n getLanguageChangeButton(inputWrapper);\n\n const container = imageDiv.parentElement;\n\n const h4 = document.createElement('h4');\n _i18n(h4, 'Login.QR.Title');\n\n const helpList = document.createElement('ol');\n helpList.classList.add('qr-description');\n (['Login.QR.Help1', 'Login.QR.Help2', 'Login.QR.Help3'] as LangPackKey[]).forEach((key) => {\n const li = document.createElement('li');\n li.append(i18n(key));\n helpList.append(li);\n });\n\n container.append(h4, helpList, inputWrapper);\n\n btnBack.addEventListener('click', () => {\n import('./pageSignIn').then((m) => m.default.mount());\n stop = true;\n });\n\n const results = await Promise.all([\n import('qr-code-styling' as any)\n ]);\n const QRCodeStyling = results[0].default;\n\n let stop = false;\n rootScope.addEventListener('user_auth', () => {\n stop = true;\n cachedPromise = null;\n }, {once: true});\n\n const options: {dcId?: DcId, ignoreErrors: true} = {ignoreErrors: true};\n let prevToken: Uint8Array | number[];\n\n const iterate = async(isLoop: boolean) => {\n try {\n let loginToken = await rootScope.managers.apiManager.invokeApi('auth.exportLoginToken', {\n api_id: App.id,\n api_hash: App.hash,\n except_ids: []\n }, {ignoreErrors: true});\n\n if(loginToken._ === 'auth.loginTokenMigrateTo') {\n if(!options.dcId) {\n options.dcId = loginToken.dc_id as DcId;\n rootScope.managers.apiManager.setBaseDcId(loginToken.dc_id);\n // continue;\n }\n\n loginToken = await rootScope.managers.apiManager.invokeApi('auth.importLoginToken', {\n token: loginToken.token\n }, options) as AuthLoginToken.authLoginToken;\n }\n\n if(loginToken._ === 'auth.loginTokenSuccess') {\n const authorization = loginToken.authorization as any as AuthAuthorization.authAuthorization;\n rootScope.managers.apiManager.setUser(authorization.user);\n import('./pageIm').then((m) => m.default.mount());\n return true;\n }\n\n /* // to base64\n var decoder = new TextDecoder('utf8');\n var b64encoded = btoa(String.fromCharCode.apply(null, [...loginToken.token])); */\n\n if(!prevToken || !bytesCmp(prevToken, loginToken.token)) {\n prevToken = loginToken.token;\n\n const encoded = bytesToBase64(loginToken.token);\n const url = 'tg://login?token=' + fixBase64String(encoded, true);\n\n const style = window.getComputedStyle(document.documentElement);\n const surfaceColor = style.getPropertyValue('--surface-color').trim();\n const textColor = style.getPropertyValue('--primary-text-color').trim();\n const primaryColor = style.getPropertyValue('--primary-color').trim();\n\n const logoUrl = await fetch('assets/img/logo_padded.svg')\n .then((res) => res.text())\n .then((text) => {\n text = text.replace(/(fill:).+?(;)/, `$1${primaryColor}$2`);\n return textToSvgURL(text);\n });\n\n const qrCode = new QRCodeStyling({\n width: 240 * window.devicePixelRatio,\n height: 240 * window.devicePixelRatio,\n data: url,\n image: logoUrl,\n dotsOptions: {\n color: textColor,\n type: 'rounded'\n },\n cornersSquareOptions: {\n type: 'extra-rounded'\n },\n imageOptions: {\n imageSize: 1,\n margin: 0\n },\n backgroundOptions: {\n color: surfaceColor\n },\n qrOptions: {\n errorCorrectionLevel: 'L'\n }\n });\n\n qrCode.append(imageDiv);\n (imageDiv.lastChild as HTMLCanvasElement).classList.add('qr-canvas');\n\n let promise: Promise<void>;\n if(qrCode._drawingPromise) {\n promise = qrCode._drawingPromise;\n } else {\n promise = Promise.race([\n pause(1000),\n new Promise<void>((resolve) => {\n qrCode._canvas._image.addEventListener('load', () => {\n window.requestAnimationFrame(() => resolve());\n }, {once: true});\n })\n ]);\n }\n\n // * это костыль, но библиотека не предоставляет никаких событий\n await promise.then(() => {\n if(preloader) {\n preloader.style.animation = 'hide-icon .4s forwards';\n\n const c = imageDiv.children[1] as HTMLElement;\n c.style.display = 'none';\n c.style.animation = 'grow-icon .4s forwards';\n setTimeout(() => {\n c.style.display = '';\n }, 150);\n\n setTimeout(() => {\n c.style.animation = '';\n }, 500);\n preloader = undefined;\n } else {\n Array.from(imageDiv.children).slice(0, -1).forEach((el) => {\n el.remove();\n });\n }\n });\n }\n\n if(isLoop) {\n const timestamp = Date.now() / 1000;\n const diff = loginToken.expires - timestamp - await rootScope.managers.timeManager.getServerTimeOffset();\n\n await pause(diff > FETCH_INTERVAL ? 1e3 * FETCH_INTERVAL : 1e3 * diff | 0);\n }\n } catch(err) {\n switch((err as ApiError).type) {\n case 'SESSION_PASSWORD_NEEDED':\n (err as ApiError).handled = true;\n import('./pagePassword').then((m) => m.default.mount());\n stop = true;\n cachedPromise = null;\n break;\n default:\n console.error('pageSignQR: default error:', err);\n stop = true;\n break;\n }\n\n return true;\n }\n\n return false;\n };\n\n // await iterate(false);\n\n return async() => {\n stop = false;\n\n do {\n if(stop) {\n break;\n }\n\n const needBreak = await iterate(true);\n if(needBreak) {\n break;\n }\n } while(true);\n };\n};\n\nlet cachedPromise: Promise<() => Promise<void>>;\nconst page = new Page('page-signQR', true, () => {\n return cachedPromise;\n}, () => {\n // console.log('onMount');\n if(!cachedPromise) cachedPromise = onFirstMount();\n cachedPromise.then((func) => {\n func();\n });\n\n rootScope.managers.appStateManager.pushToState('authState', {_: 'authStateSignQr'});\n});\n\nexport default page;\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","btnQr","btnNext","page","inputWrapper","document","createElement","lastCountrySelected","lastCountryCodeSelected","add","countryInputField","onCountryChange","country","code","telInputField","value","lastValue","country_code","setTimeout","telEl","focus","onInput","formatted","countryName","name","default_name","override","length","style","visibility","input","addEventListener","onSubmit","signedCheckboxField","withRipple","checked","keepSigned","state","label","toggle","phone_number","api_id","api_hash","settings","_","pFlags","authorization","user","m","default","mount","Object","assign","catch","err","type","setError","console","error","innerText","container","h4","subtitle","pageEl","querySelector","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","removeAttribute","uint6ToBase64","nUint6","imageDiv","preloader","putPreloader","btnBack","parentElement","helpList","li","stop","QRCodeStyling","rootScope","options","ignoreErrors","prevToken","iterate","isLoop","loginToken","except_ids","dc_id","token","bytesCmp","url","bytes","mod3","result","nLen","nUint24","nIdx","String","fromCharCode","replace","bytesToBase64","getComputedStyle","documentElement","surfaceColor","getPropertyValue","trim","textColor","primaryColor","logoUrl","fetch","res","textToSvgURL","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","handled","func"],"sourceRoot":""}