chore: update dependencies and configs

This commit is contained in:
2026-05-17 19:23:16 +00:00
parent 9cba552453
commit 3628719b3b
8 changed files with 881 additions and 1040 deletions
+13 -13
View File
@@ -13,31 +13,31 @@
"test:watch": "jest --watch"
},
"dependencies": {
"@cloneweb/types": "file:../../packages/types",
"@cloneweb/database": "file:../../packages/database",
"@cloneweb/shared": "file:../../packages/shared",
"express": "^4.18.2",
"cors": "^2.8.5",
"helmet": "^7.1.0",
"express-rate-limit": "^7.1.5",
"jsonwebtoken": "^9.0.2",
"@cloneweb/types": "file:../../packages/types",
"bcryptjs": "^2.4.3",
"zod": "^3.22.4",
"cors": "^2.8.5",
"dotenv": "^16.3.1",
"winston": "^3.11.0"
"express": "^4.18.2",
"express-rate-limit": "^7.1.5",
"helmet": "^7.1.0",
"jsonwebtoken": "^9.0.2",
"winston": "^3.11.0",
"zod": "^3.22.4"
},
"devDependencies": {
"@types/express": "^4.17.21",
"@types/cors": "^2.8.17",
"@types/jsonwebtoken": "^9.0.5",
"@types/bcryptjs": "^2.4.6",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/jest": "^29.5.5",
"@types/jsonwebtoken": "^9.0.5",
"@types/supertest": "^2.0.16",
"fast-check": "^3.13.2",
"jest": "^29.7.0",
"supertest": "^6.3.3",
"ts-jest": "^29.1.1",
"tsx": "^3.14.0",
"tsx": "^4.22.1",
"typescript": "^5.2.2"
}
}
}
File diff suppressed because one or more lines are too long
+14 -12
View File
@@ -11,27 +11,29 @@
"test:watch": "jest --watch"
},
"dependencies": {
"@bull-board/api": "^5.10.2",
"@bull-board/express": "^5.10.2",
"@cloneweb/database": "file:../../packages/database",
"@cloneweb/shared": "file:../../packages/shared",
"@cloneweb/types": "file:../../packages/types",
"express": "^4.18.2",
"puppeteer": "^21.5.2",
"bull": "^4.12.2",
"@bull-board/api": "^5.10.2",
"@bull-board/express": "^5.10.2",
"ioredis": "^5.3.2",
"robots-parser": "^3.0.1",
"url-parse": "^1.5.10",
"cheerio": "^1.0.0-rc.12",
"fast-check": "^3.15.0"
"express": "^4.18.2",
"fast-check": "^3.15.0",
"ioredis": "^5.3.2",
"playwright": "^1.60.0",
"playwright-extra": "^4.3.6",
"puppeteer-extra-plugin-stealth": "^2.11.2",
"robots-parser": "^3.0.1",
"url-parse": "^1.5.10"
},
"devDependencies": {
"@types/express": "^4.17.21",
"@types/jest": "^29.5.8",
"@types/node": "^20.10.4",
"@types/url-parse": "^1.4.11",
"typescript": "^5.3.3",
"ts-node-dev": "^2.0.0",
"jest": "^29.7.0",
"@types/jest": "^29.5.8"
"ts-node-dev": "^2.0.0",
"typescript": "^5.3.3"
}
}
}
+14 -13
View File
@@ -1,4 +1,4 @@
import puppeteer, { Browser, Page } from 'puppeteer';
import { chromium, Browser, Page, BrowserContext } from 'playwright';
import { URL } from 'url';
import * as cheerio from 'cheerio';
import robotsParser from 'robots-parser';
@@ -13,8 +13,8 @@ export class IntelligentCrawler {
private lastRequestTime = 0;
async initialize(): Promise<void> {
this.browser = await puppeteer.launch({
headless: 'new',
this.browser = await chromium.launch({
headless: true,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
@@ -26,7 +26,7 @@ export class IntelligentCrawler {
'--disable-gpu'
]
});
logger.info('Puppeteer browser initialized');
logger.info('Playwright browser initialized');
}
async crawlWebsite(startUrl: string, config: CrawlerConfig): Promise<SiteMap> {
@@ -89,18 +89,18 @@ export class IntelligentCrawler {
}
async extractPageInfo(url: string, depth: number, config: CrawlerConfig): Promise<PageInfo | null> {
const page = await this.browser!.newPage();
const context = await this.browser!.newContext({
viewport: config.viewport,
userAgent: config.userAgent
});
const page = await context.newPage();
try {
// Set viewport and user agent
await page.setViewport(config.viewport);
await page.setUserAgent(config.userAgent);
const startTime = Date.now();
// Navigate to page
const response = await page.goto(url, {
waitUntil: 'networkidle2',
waitUntil: 'networkidle',
timeout: config.timeout
});
@@ -162,7 +162,7 @@ export class IntelligentCrawler {
};
} finally {
await page.close();
await context.close();
}
}
@@ -224,7 +224,8 @@ export class IntelligentCrawler {
try {
const robotsUrl = `${origin}/robots.txt`;
const page = await this.browser!.newPage();
const context = await this.browser!.newContext();
const page = await context.newPage();
const response = await page.goto(robotsUrl, { timeout: 10000 });
@@ -235,7 +236,7 @@ export class IntelligentCrawler {
logger.info(`Loaded robots.txt for ${origin}`);
}
await page.close();
await context.close();
} catch (error) {
logger.warn(`Failed to load robots.txt for ${origin}:`, error);
this.robotsCache.set(origin, null);