tweb/public/392.a16c421c1f68b829c496.ch...

1 line
17 KiB
Plaintext

{"version":3,"file":"392.a16c421c1f68b829c496.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"],"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 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"],"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","i18n","innerText","select","removeAttribute","imageDiv","_authCode","evt","createEvent","initEvent","dispatchEvent","getElementsByClassName","key","args","sentCode","focus"],"sourceRoot":""}