107 lines
3.1 KiB
JavaScript
107 lines
3.1 KiB
JavaScript
import * as fs from 'fs';
|
|
import path from 'path';
|
|
import BID_TYPE from '../system/bid-type.js';
|
|
import browser from '../system/browser.js';
|
|
import CONSTANTS from '../system/constants.js';
|
|
import { getPathProfile, sanitizeFileName } from '../system/utils.js';
|
|
import { Bid } from './bid.js';
|
|
|
|
export class ApiBid extends Bid {
|
|
id;
|
|
account;
|
|
children = [];
|
|
children_processing = [];
|
|
created_at;
|
|
updated_at;
|
|
origin_url;
|
|
active;
|
|
browser_context;
|
|
username;
|
|
password;
|
|
|
|
constructor({ url, username, password, id, children, created_at, updated_at, origin_url, active }) {
|
|
super(BID_TYPE.API_BID, url);
|
|
|
|
this.created_at = created_at;
|
|
this.updated_at = updated_at;
|
|
this.children = children;
|
|
this.origin_url = origin_url;
|
|
this.active = active;
|
|
this.username = username;
|
|
this.password = password;
|
|
this.id = id;
|
|
}
|
|
|
|
setNewData({ url, username, password, id, children, created_at, updated_at, origin_url, active }) {
|
|
this.created_at = created_at;
|
|
this.updated_at = updated_at;
|
|
this.children = children;
|
|
this.origin_url = origin_url;
|
|
this.active = active;
|
|
this.username = username;
|
|
this.password = password;
|
|
this.url = url;
|
|
}
|
|
|
|
puppeteer_connect = async () => {
|
|
this.browser_context = await browser.createBrowserContext();
|
|
|
|
const page = await this.browser_context.newPage();
|
|
|
|
this.page_context = page;
|
|
|
|
await this.restoreContext();
|
|
};
|
|
|
|
listen_events = async () => {
|
|
if (this.page_context) return;
|
|
|
|
await this.puppeteer_connect();
|
|
|
|
await this.action();
|
|
|
|
await this.saveContext();
|
|
};
|
|
|
|
async saveContext() {
|
|
if (!this.browser_context || !this.page_context) return;
|
|
|
|
try {
|
|
const cookies = await this.browser_context.cookies();
|
|
const localStorageData = await this.page_context.evaluate(() => JSON.stringify(localStorage));
|
|
|
|
const contextData = {
|
|
cookies,
|
|
localStorage: localStorageData,
|
|
};
|
|
|
|
const dirPath = path.join(CONSTANTS.PROFILE_PATH);
|
|
|
|
if (!fs.existsSync(dirPath)) {
|
|
fs.mkdirSync(dirPath, { recursive: true });
|
|
console.log(`📂 Save at folder: ${dirPath}`);
|
|
}
|
|
|
|
fs.writeFileSync(path.join(dirPath, sanitizeFileName(this.origin_url) + '.json'), JSON.stringify(contextData, null, 2));
|
|
console.log('✅ Context saved!');
|
|
} catch (error) {
|
|
console.log('Save Context: ', error.message);
|
|
}
|
|
}
|
|
|
|
async restoreContext() {
|
|
if (!this.browser_context || !this.page_context) return;
|
|
|
|
const filePath = getPathProfile(this.origin_url);
|
|
|
|
if (!fs.existsSync(filePath)) return;
|
|
|
|
const contextData = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
|
|
// Restore Cookies
|
|
await this.page_context.setCookie(...contextData.cookies);
|
|
|
|
console.log('🔄 Context restored!');
|
|
}
|
|
}
|