|
1 | 1 | import { inject, injectable } from 'inversify'; |
2 | 2 | import { Page } from 'puppeteer'; |
3 | | -import bluebird, { AggregateError } from 'bluebird'; |
| 3 | +import { AggregateError } from 'bluebird'; |
4 | 4 | import { LoggerInterface } from '../../../../lib/logger.interface'; |
5 | 5 | import { ProxyInterface } from '../../proxy.interface'; |
6 | 6 | import { AccountException } from '../../rpc-handlers/account.exception'; |
7 | | -import { CaptchaService } from '../../../../lib/captcha.service'; |
| 7 | +import { ActionApplier } from './action-applier'; |
8 | 8 |
|
9 | 9 | @injectable() |
10 | 10 | export class VkAuthorizer { |
11 | 11 | constructor( |
12 | 12 | @inject('Logger') private readonly logger: LoggerInterface, |
13 | | - @inject(CaptchaService) private readonly captcha: CaptchaService, |
| 13 | + @inject(ActionApplier) private readonly actionApplier: ActionApplier, |
14 | 14 | ) {} |
15 | 15 |
|
16 | 16 | async signInWithCookie(page: Page, login: string, remixsid: string): Promise<boolean> { |
@@ -66,53 +66,19 @@ export class VkAuthorizer { |
66 | 66 | password, |
67 | 67 | ); |
68 | 68 |
|
69 | | - const loginNavigationPromise = page.waitForNavigation({ timeout: 10000 }); |
70 | | - const waitForCaptchaPromise = page.waitFor( |
71 | | - () => !!document.querySelector('.recaptcha iframe'), |
72 | | - { timeout: 10000 }, |
73 | | - ); |
74 | | - await page.click('#login_button'); |
75 | | - await bluebird |
76 | | - .any([loginNavigationPromise as Promise<any>, waitForCaptchaPromise as Promise<any>]) |
77 | | - .catch(async error => { |
78 | | - if (error instanceof AggregateError) { |
79 | | - return page.reload({ waitUntil: 'networkidle2' }); |
80 | | - } |
81 | | - |
82 | | - throw error; |
| 69 | + try { |
| 70 | + await this.actionApplier.click({ |
| 71 | + page, |
| 72 | + goalAction: () => page.waitForNavigation({ timeout: 10000 }), |
| 73 | + selector: '#login_button', |
| 74 | + login, |
83 | 75 | }); |
84 | | - |
85 | | - const hasCaptcha = await page.evaluate(() => !!document.querySelector('.recaptcha iframe')); |
86 | | - if (hasCaptcha) { |
87 | | - try { |
88 | | - const captchaUrl = await page.evaluate(() => |
89 | | - document.querySelector('.recaptcha iframe').getAttribute('src'), |
90 | | - ); |
91 | | - const urlObject = new URL(captchaUrl); |
92 | | - const siteKey = urlObject.searchParams.get('k'); |
93 | | - const result = await this.captcha.solveRecaptchaV2({ |
94 | | - pageUrl: 'https://vk.com/login', |
95 | | - siteKey, |
96 | | - }); |
97 | | - const captchaNavigationPromise = page.waitForNavigation(); |
98 | | - await page.evaluate( |
99 | | - token => { |
100 | | - document.querySelector<HTMLInputElement>( |
101 | | - '.recaptcha .g-recaptcha-response', |
102 | | - ).value = token; |
103 | | - document.querySelector<HTMLInputElement>('#quick_recaptcha').value = token; |
104 | | - document.querySelector<HTMLFormElement>('#quick_login_form').submit(); |
105 | | - }, |
106 | | - result, |
107 | | - siteKey, |
108 | | - ); |
109 | | - await captchaNavigationPromise; |
110 | | - } catch (error) { |
111 | | - error.code = 'captcha_failed'; |
112 | | - error.login = login; |
113 | | - error.canRetry = true; |
| 76 | + } catch (error) { |
| 77 | + if (!(error instanceof AggregateError)) { |
114 | 78 | throw error; |
115 | 79 | } |
| 80 | + |
| 81 | + await page.reload({ waitUntil: 'networkidle2' }); |
116 | 82 | } |
117 | 83 |
|
118 | 84 | await this.checkAccount(page, login); |
|
0 commit comments