tweb/public/14.0c3a1ae74a0c65edf059.chu...

1 line
38 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/helpers/fixBase64String.ts","webpack:///./src/helpers/bytes/bytesCmp.ts","webpack:///./src/components/languageChangeButton.ts","webpack:///./src/components/monkeys/tracking.ts","webpack:///./src/components/codeInputField.ts","webpack:///./src/helpers/bytes/bytesToBase64.ts","webpack:///./src/pages/pageSignQR.ts","webpack:///./src/pages/pageAuthCode.ts","webpack:///./src/lib/mtproto/serverTimeManager.ts"],"names":["fixBase64String","str","toUrl","replace","bytesCmp","bytes1","bytes2","len","length","i","cachedPromise","set","getLanguageChangeButton","appendTo","getConfig","then","config","suggested_lang_code","lastRequestedLangCode","Promise","all","getStrings","getCacheLangPack","strings","backup","forEach","string","backupString","get","key","push","btnChangeLanguage","text","lastElementChild","classList","remove","format","window","requestAnimationFrame","append","addEventListener","once","e","disabled","getLangPack","TrackingMonkey","inputField","size","max","needFrame","this","container","document","createElement","add","input","playAnimation","value","animation","frame","Math","min","round","idleAnimation","stop","canvas","style","display","direction","setDirection","setSpeed","play","loadPromise","loadAnimationAsAsset","loop","autoplay","width","height","waitForFirstFrame","_animation","currentFrame","pause","CodeInputField","options","super","plainText","type","setAttribute","autocomplete","lastLength","setLabel","slice","setValueSilently","onFill","uint6ToBase64","nUint6","onFirstMount","imageDiv","pageEl","querySelector","preloader","inputWrapper","btnBack","parentElement","h4","helpList","li","m","default","mount","QRCodeStyling","rootScope","prevToken","ignoreErrors","iterate","isLoop","loginToken","invokeApi","api_id","id","api_hash","hash","except_ids","_","dcId","dc_id","setBaseDcId","token","authorization","setUser","user","encoded","bytes","mod3","result","nLen","nUint24","nIdx","String","fromCharCode","bytesToBase64","url","getComputedStyle","documentElement","surfaceColor","getPropertyValue","trim","textColor","primaryColor","logoUrl","fetch","res","blob","Blob","resolve","reader","FileReader","onload","target","readAsDataURL","qrCode","devicePixelRatio","data","image","dotsOptions","color","cornersSquareOptions","imageOptions","imageSize","margin","backgroundOptions","qrOptions","errorCorrectionLevel","promise","lastChild","_drawingPromise","race","_canvas","_image","c","children","setTimeout","undefined","Array","from","el","timestamp","Date","now","diff","expires","serverTimeManager","serverTimeOffset","err","console","warn","handled","error","func","appStateManager","pushToState","codeInput","authCode","headerElement","sentTypeElement","page","CODELENGTH","codeInputField","label","name","code","submitCode","cleanup","monkey","params","phone_number","phone_code_hash","phone_code","response","catch","good","innerText","select","removeAttribute","isMobile","load","_authCode","evt","createEvent","initEvent","dispatchEvent","getElementsByClassName","args","sentCode","focus","to","addTaskListener","task","payload"],"mappings":"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","file":"14.0c3a1ae74a0c65edf059.chunk.js","sourcesContent":["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","export default function bytesCmp(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\n const len = bytes1.length;\n if(len !== bytes2.length) {\n return false;\n }\n\n for(let i = 0; i < len; ++i) {\n if(bytes1[i] !== bytes2[i]) {\n return false;\n }\n }\n\n return true;\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 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 apiManager from \"../lib/mtproto/mtprotoworker\";\nimport rootScope from \"../lib/rootScope\";\nimport Button from \"./button\";\nimport { putPreloader } from \"./misc\";\n\nlet set = false;\n\nfunction getLang(): Promise<[Config.config, LangPackString[], LangPackDifference.langPackDifference]> {\n if(cachedPromise) return cachedPromise;\n return cachedPromise = 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 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 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","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 type { ApiError } from '../lib/mtproto/apiManager';\r\nimport apiManager from '../lib/mtproto/mtprotoworker';\r\nimport Page from './page';\r\nimport serverTimeManager from '../lib/mtproto/serverTimeManager';\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 appStateManager from '../lib/appManagers/appStateManager';\r\nimport rootScope from '../lib/rootScope';\r\nimport { putPreloader } from '../components/misc';\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\nlet 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 let 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 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 apiManager.setBaseDcId(loginToken.dc_id);\r\n //continue;\r\n }\r\n \r\n loginToken = await 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 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 let encoded = bytesToBase64(loginToken.token);\r\n let 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 let timestamp = Date.now() / 1000;\r\n let diff = loginToken.expires - timestamp - serverTimeManager.serverTimeOffset;\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 console.warn('pageSignQR: 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 appStateManager.pushToState('authState', {_: 'authStateSignQr'});\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 mediaSizes from '../helpers/mediaSizes';\r\nimport { AuthSentCode, AuthSentCodeType, AuthSignIn } from '../layer';\r\nimport appStateManager from '../lib/appManagers/appStateManager';\r\nimport apiManager from '../lib/mtproto/mtprotoworker';\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\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 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 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 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 * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { ApplyServerTimeOffsetTask } from './timeManager';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\n// import { tsNow } from '../../helpers/date';\r\nimport sessionStorage from '../sessionStorage';\r\nimport apiManager from './mtprotoworker';\r\n\r\nexport class ServerTimeManager {\r\n /* private midnightNoOffset: number;\r\n private midnightOffseted: Date;\r\n\r\n private midnightOffset: number; */\r\n\r\n public serverTimeOffset: number; // in seconds\r\n /* private timeParams: {\r\n midnightOffset: number,\r\n serverTimeOffset: number\r\n }; */\r\n\r\n constructor() {\r\n /* const timestampNow = tsNow(true);\r\n this.midnightNoOffset = timestampNow - (timestampNow % 86400);\r\n this.midnightOffseted = new Date();\r\n this.midnightOffseted.setHours(0, 0, 0, 0);\r\n \r\n this.midnightOffset = this.midnightNoOffset - (Math.floor(+this.midnightOffseted / 1000)); */\r\n\r\n this.serverTimeOffset = 0;\r\n /* this.timeParams = {\r\n midnightOffset: this.midnightOffset,\r\n serverTimeOffset: this.serverTimeOffset\r\n }; */\r\n\r\n sessionStorage.get('server_time_offset').then((to) => {\r\n if(to) {\r\n this.serverTimeOffset = to;\r\n // this.timeParams.serverTimeOffset = to;\r\n }\r\n });\r\n\r\n apiManager.addTaskListener('applyServerTimeOffset', (task: ApplyServerTimeOffsetTask) => {\r\n this.serverTimeOffset = task.payload;\r\n });\r\n }\r\n}\r\n\r\nconst serverTimeManager = new ServerTimeManager();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.serverTimeManager = serverTimeManager);\r\nexport default serverTimeManager;\r\n"],"sourceRoot":""}