mirror of
https://github.com/opelly27/streetmerchant.git
synced 2026-05-20 08:47:43 +00:00
refactor: use gts instead of xo
feat: add browser opening to test:notification feat: add c8 and mocha for testing feat: update Docker and ci style: update editorconfig
This commit is contained in:
+62
-64
@@ -6,99 +6,97 @@ import {logger} from './logger';
|
||||
import topUserAgents from 'top-user-agents';
|
||||
|
||||
export function getSleepTime(store: Store) {
|
||||
const minSleep = store.minPageSleep as number;
|
||||
return (
|
||||
minSleep + Math.random() * ((store.maxPageSleep as number) - minSleep)
|
||||
);
|
||||
const minSleep = store.minPageSleep as number;
|
||||
return minSleep + Math.random() * ((store.maxPageSleep as number) - minSleep);
|
||||
}
|
||||
|
||||
export async function delay(ms: number) {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(resolve, ms);
|
||||
});
|
||||
return new Promise(resolve => {
|
||||
setTimeout(resolve, ms);
|
||||
});
|
||||
}
|
||||
|
||||
export function noop() {
|
||||
// Do nothing
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
export function isStatusCodeInRange(
|
||||
statusCode: number,
|
||||
range: StatusCodeRangeArray
|
||||
statusCode: number,
|
||||
range: StatusCodeRangeArray
|
||||
) {
|
||||
for (const value of range) {
|
||||
let min: number;
|
||||
let max: number;
|
||||
if (typeof value === 'number') {
|
||||
min = value;
|
||||
max = value;
|
||||
} else {
|
||||
[min, max] = value;
|
||||
}
|
||||
for (const value of range) {
|
||||
let min: number;
|
||||
let max: number;
|
||||
if (typeof value === 'number') {
|
||||
min = value;
|
||||
max = value;
|
||||
} else {
|
||||
[min, max] = value;
|
||||
}
|
||||
|
||||
if (min <= statusCode && statusCode <= max) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (min <= statusCode && statusCode <= max) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
export async function usingResponse<T>(
|
||||
browser: Browser,
|
||||
url: string,
|
||||
cb: (response: Response | null, page: Page, browser: Browser) => Promise<T>
|
||||
browser: Browser,
|
||||
url: string,
|
||||
cb: (response: Response | null, page: Page, browser: Browser) => Promise<T>
|
||||
): Promise<T> {
|
||||
return usingPage(browser, async (page, browser) => {
|
||||
const response = await page.goto(url, {waitUntil: 'domcontentloaded'});
|
||||
return usingPage(browser, async (page, browser) => {
|
||||
const response = await page.goto(url, {waitUntil: 'domcontentloaded'});
|
||||
|
||||
return cb(response, page, browser);
|
||||
});
|
||||
return cb(response, page, browser);
|
||||
});
|
||||
}
|
||||
|
||||
export async function usingPage<T>(
|
||||
browser: Browser,
|
||||
cb: (page: Page, browser: Browser) => Promise<T>
|
||||
browser: Browser,
|
||||
cb: (page: Page, browser: Browser) => Promise<T>
|
||||
): Promise<T> {
|
||||
const page = await browser.newPage();
|
||||
page.setDefaultNavigationTimeout(config.page.timeout);
|
||||
await page.setUserAgent(await getRandomUserAgent());
|
||||
const page = await browser.newPage();
|
||||
page.setDefaultNavigationTimeout(config.page.timeout);
|
||||
await page.setUserAgent(await getRandomUserAgent());
|
||||
|
||||
try {
|
||||
return await cb(page, browser);
|
||||
} finally {
|
||||
try {
|
||||
await closePage(page);
|
||||
} catch (error: unknown) {
|
||||
logger.error('usingPage', error);
|
||||
}
|
||||
}
|
||||
try {
|
||||
return await cb(page, browser);
|
||||
} finally {
|
||||
try {
|
||||
await closePage(page);
|
||||
} catch (error: unknown) {
|
||||
logger.error('usingPage', error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function closePage(page: Page) {
|
||||
if (!config.browser.lowBandwidth) {
|
||||
await disableBlockerInPage(page);
|
||||
}
|
||||
if (!config.browser.lowBandwidth) {
|
||||
await disableBlockerInPage(page);
|
||||
}
|
||||
|
||||
await page.close();
|
||||
await page.close();
|
||||
}
|
||||
|
||||
export async function getRandomUserAgent(): Promise<string> {
|
||||
const deprecatedUserAgent = (process.env.USER_AGENT
|
||||
? process.env.USER_AGENT.includes('\n')
|
||||
? process.env.USER_AGENT.split('\n')
|
||||
: process.env.USER_AGENT.split(',')
|
||||
: []
|
||||
).map((s) => s.trim());
|
||||
const deprecatedUserAgent = (process.env.USER_AGENT
|
||||
? process.env.USER_AGENT.includes('\n')
|
||||
? process.env.USER_AGENT.split('\n')
|
||||
: process.env.USER_AGENT.split(',')
|
||||
: []
|
||||
).map(s => s.trim());
|
||||
|
||||
if (deprecatedUserAgent.length > 0) {
|
||||
return deprecatedUserAgent[
|
||||
Math.floor(Math.random() * deprecatedUserAgent.length)
|
||||
];
|
||||
}
|
||||
if (deprecatedUserAgent.length > 0) {
|
||||
return deprecatedUserAgent[
|
||||
Math.floor(Math.random() * deprecatedUserAgent.length)
|
||||
];
|
||||
}
|
||||
|
||||
const userAgent =
|
||||
topUserAgents[Math.floor(Math.random() * topUserAgents.length)];
|
||||
logger.debug('user agent', {userAgent});
|
||||
return userAgent;
|
||||
const userAgent =
|
||||
topUserAgents[Math.floor(Math.random() * topUserAgents.length)];
|
||||
logger.debug('user agent', {userAgent});
|
||||
return userAgent;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user