update
This commit is contained in:
@@ -32,3 +32,42 @@ export function buildXCookies() {
|
||||
{name: "lang", value: "en"},
|
||||
];
|
||||
}
|
||||
|
||||
export function getAccount() {
|
||||
return {
|
||||
id: process.env.X_USERNAME!,
|
||||
api: {
|
||||
accessToken: '',
|
||||
accessSecret: '',
|
||||
appKey: process.env.TWITTER_CLIENT_ID + '',
|
||||
appSecret: process.env.TWITTER_CLIENT_SECRET!,
|
||||
},
|
||||
cookie: {
|
||||
authToken: process.env.X_COOKIE_AUTH_TOKEN!, // auth_token cookie
|
||||
ct0: process.env.X_COOKIE_CT0!, // ct0 cookie (CSRF token)
|
||||
kdt: process.env.X_COOKIE_KDT!, // ct0 cookie (CSRF token)
|
||||
proxy: '',
|
||||
},
|
||||
browser: {
|
||||
accountId: process.env.X_USERNAME!,
|
||||
cookies: [
|
||||
{
|
||||
name: 'auth_token',
|
||||
value: process.env.X_COOKIE_AUTH_TOKEN!,
|
||||
},
|
||||
{
|
||||
name: 'ct0',
|
||||
value: process.env.X_COOKIE_CT0!,
|
||||
},
|
||||
{
|
||||
name: 'kdt',
|
||||
value: process.env.X_COOKIE_KDT!,
|
||||
},
|
||||
],
|
||||
proxy: '',
|
||||
userAgent: process.env.BROWSER_USER_AGENT || '',
|
||||
headless: Number(process.env.BROWSER_IS_HEADLESS) === 1,
|
||||
},
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import {HttpException, Injectable, Logger, OnModuleDestroy, OnModuleInit,} from '@nestjs/common';
|
||||
import {Browser, BrowserContext, chromium, Page} from 'playwright';
|
||||
import {rand} from "../helper";
|
||||
import {getAccount} from "./utils/x-headers.util";
|
||||
|
||||
export interface BrowserAccount {
|
||||
accountId: string;
|
||||
@@ -13,6 +14,7 @@ export interface BrowserAccount {
|
||||
}>;
|
||||
proxy?: string;
|
||||
userAgent?: string;
|
||||
headless?: boolean;
|
||||
}
|
||||
|
||||
export interface BrowserTweetResult {
|
||||
@@ -38,13 +40,15 @@ export class XBrowserService implements OnModuleInit, OnModuleDestroy {
|
||||
setInterval(() => this.cleanupStaleContexts(), 60_000);
|
||||
}
|
||||
|
||||
private async ensureBrowser(): Promise<Browser> {
|
||||
private async ensureBrowser(headless = true): Promise<Browser> {
|
||||
if (this.browser && this.browser.isConnected()) return this.browser;
|
||||
this.logger.log('Launching Chromium...');
|
||||
this.browser = await chromium.launch({
|
||||
headless: true,
|
||||
headless,
|
||||
args: [
|
||||
'--disable-blink-features=AutomationControlled',
|
||||
'--disable-features=IsolateOrigins,site-per-process',
|
||||
'--disable-infobars',
|
||||
'--no-sandbox',
|
||||
'--disable-dev-shm-usage',
|
||||
],
|
||||
@@ -76,7 +80,7 @@ export class XBrowserService implements OnModuleInit, OnModuleDestroy {
|
||||
}
|
||||
console.log('getOrCreateContext:3')
|
||||
|
||||
const browser = await this.ensureBrowser();
|
||||
const browser = await this.ensureBrowser(account.headless);
|
||||
console.log('getOrCreateContext:4')
|
||||
|
||||
const ctx = await browser.newContext({
|
||||
@@ -115,7 +119,12 @@ export class XBrowserService implements OnModuleInit, OnModuleDestroy {
|
||||
return ctx;
|
||||
}
|
||||
|
||||
private async getPage(account: BrowserAccount): Promise<Page> {
|
||||
async newPage(): Promise<Page> {
|
||||
const account = getAccount();
|
||||
return this.getPage(account.browser)
|
||||
}
|
||||
|
||||
async getPage(account: BrowserAccount): Promise<Page> {
|
||||
let ctx = await this.getOrCreateContext(account);
|
||||
console.log('Đã khởi tạo ctx')
|
||||
if (ctx.isClosed()) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import {BrowserAccount, XBrowserService} from "./x-browser.service";
|
||||
import {XApiService} from "./x-api.service";
|
||||
import {XCookieService} from "./x-cookie.service";
|
||||
import {NotifyService} from "../notify.service";
|
||||
import {getAccount} from "./utils/x-headers.util";
|
||||
|
||||
export enum SUPPORT_SOCIAL_PROVIDERS {
|
||||
FB = 'fb',
|
||||
@@ -51,35 +52,7 @@ export class XPosterRouterService {
|
||||
private readonly browserSvc: XBrowserService,
|
||||
private readonly notifyService: NotifyService,
|
||||
) {
|
||||
this.X_UNIFIED_ACCOUNT = {
|
||||
id: process.env.X_USERNAME!,
|
||||
api: {
|
||||
accessToken: '',
|
||||
accessSecret: '',
|
||||
appKey: process.env.TWITTER_CLIENT_ID + '',
|
||||
appSecret: process.env.TWITTER_CLIENT_SECRET!,
|
||||
},
|
||||
cookie: {
|
||||
authToken: process.env.X_COOKIE_AUTH_TOKEN!, // auth_token cookie
|
||||
ct0: process.env.X_COOKIE_CT0!, // ct0 cookie (CSRF token)
|
||||
proxy: '',
|
||||
},
|
||||
browser: {
|
||||
accountId: process.env.X_USERNAME!,
|
||||
cookies: [
|
||||
{
|
||||
name: 'auth_token',
|
||||
value: process.env.X_COOKIE_AUTH_TOKEN!,
|
||||
},
|
||||
{
|
||||
name: 'ct0',
|
||||
value: process.env.X_COOKIE_CT0!,
|
||||
},
|
||||
],
|
||||
proxy: '',
|
||||
userAgent: process.env.BROWSER_USER_AGENT || '',
|
||||
},
|
||||
};
|
||||
this.X_UNIFIED_ACCOUNT = getAccount();
|
||||
|
||||
console.error(this.X_UNIFIED_ACCOUNT);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user