Skip to content

Commit

Permalink
feat: fix metadata in logging, lint prettier, typed Models (#747)
Browse files Browse the repository at this point in the history
  • Loading branch information
jef authored Nov 10, 2020
1 parent 0bf9ba2 commit 318e626
Show file tree
Hide file tree
Showing 78 changed files with 2,414 additions and 1,019 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,11 @@
"xo": "^0.33.1"
},
"xo": {
"prettier": true,
"rules": {
"sort-imports": "error",
"sort-keys": "error",
"sort-vars": "error",
"max-params": 0
"sort-vars": "error"
}
},
"husky": {
Expand Down
17 changes: 9 additions & 8 deletions src/banner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,17 @@ export const banner = {
██████ ▄▄▄█████▓ ██▀███ ▓█████ ▓█████▄▄▄█████▓ ███▄ ▄███▓▓█████ ██▀███ ▄████▄ ██░ ██ ▄▄▄ ███▄ █ ▄▄▄█████▓
▒██ ▒ ▓ ██▒ ▓▒▓██ ▒ ██▒▓█ ▀ ▓█ ▀▓ ██▒ ▓▒▓██▒▀█▀ ██▒▓█ ▀ ▓██ ▒ ██▒▒██▀ ▀█ ▓██░ ██▒▒████▄ ██ ▀█ █ ▓ ██▒ ▓▒
░ ▓██▄ ▒ ▓██░ ▒░▓██ ░▄█ ▒▒███ ▒███ ▒ ▓██░ ▒░▓██ ▓██░▒███ ▓██ ░▄█ ▒▒▓█ ▄ ▒██▀▀██░▒██ ▀█▄ ▓██ ▀█ ██▒▒ ▓██░ ▒░
▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░
▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░
▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░
░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░
░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
▒ ██▒░ ▓██▓ ░ ▒██▀▀█▄ ▒▓█ ▄ ▒▓█ ▄░ ▓██▓ ░ ▒██ ▒██ ▒▓█ ▄ ▒██▀▀█▄ ▒▓▓▄ ▄██▒░▓█ ░██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒░ ▓██▓ ░
▒██████▒▒ ▒██▒ ░ ░██▓ ▒██▒░▒████▒░▒████▒ ▒██▒ ░ ▒██▒ ░██▒░▒████▒░██▓ ▒██▒▒ ▓███▀ ░░▓█▒░██▓ ▓█ ▓██▒▒██░ ▓██░ ▒██▒ ░
▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒▓ ░▒▓░░░ ▒░ ░░░ ▒░ ░ ▒ ░░ ░ ▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░░ ░▒ ▒ ░ ▒ ░░▒░▒ ▒▒ ▓▒█░░ ▒░ ▒ ▒ ▒ ░░
░ ░▒ ░ ░ ░ ░▒ ░ ▒░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░▒ ░ ▒░ ░ ▒ ▒ ░▒░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░ ░
░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░░ ░ ░ ▒ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
${version}`,
render(ascii: boolean, hexColor: string) {
return chalk.hex(hexColor).bold(ascii ? this.asciiVersion : this.stringVersion);
return chalk
.hex(hexColor)
.bold(ascii ? this.asciiVersion : this.stringVersion);
},
stringVersion: `STREETMERCHANT
${version}`
Expand Down
131 changes: 104 additions & 27 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,29 @@ import path from 'path';

config_({path: path.resolve(__dirname, '../.env')});

console.info(banner.render(envOrBoolean(process.env.ASCII_BANNER, false), envOrString(process.env.BANNER_COLOR, '#808080')));
console.info(
banner.render(
envOrBoolean(process.env.ASCII_BANNER, false),
envOrString(process.env.BANNER_COLOR, '#808080')
)
);

/**
* Returns environment variable, given array, or default array.
*
* @param environment Interested environment variable.
* @param array Default array. If not set, is `[]`.
*/
function envOrArray(environment: string | undefined, array?: string[]): string[] {
return (environment ? (
environment.includes('\n') ? environment.split('\n') : environment.split(',')
) : (array ?? [])).map(s => s.trim());
function envOrArray(
environment: string | undefined,
array?: string[]
): string[] {
return (environment
? environment.includes('\n')
? environment.split('\n')
: environment.split(',')
: array ?? []
).map((s) => s.trim());
}

/**
Expand All @@ -25,8 +36,11 @@ function envOrArray(environment: string | undefined, array?: string[]): string[]
* @param environment Interested environment variable.
* @param boolean Default boolean. If not set, is `true`.
*/
function envOrBoolean(environment: string | undefined, boolean?: boolean): boolean {
return environment ? environment === 'true' : (boolean ?? true);
function envOrBoolean(
environment: string | undefined,
boolean?: boolean
): boolean {
return environment ? environment === 'true' : boolean ?? true;
}

/**
Expand All @@ -36,7 +50,7 @@ function envOrBoolean(environment: string | undefined, boolean?: boolean): boole
* @param string Default string. If not set, is `''`.
*/
function envOrString(environment: string | undefined, string?: string): string {
return environment ? environment : (string ?? '');
return environment ? environment : string ?? '';
}

/**
Expand All @@ -46,7 +60,7 @@ function envOrString(environment: string | undefined, string?: string): string {
* @param number Default number. If not set, is `0`.
*/
function envOrNumber(environment: string | undefined, number?: number): number {
return environment ? Number(environment) : (number ?? 0);
return environment ? Number(environment) : number ?? 0;
}

/**
Expand All @@ -61,14 +75,24 @@ function envOrNumber(environment: string | undefined, number?: number): number {
* @param environmentMax Max environment variable of Min/Max pair.
* @param number Default number. If not set, is `0`.
*/
function envOrNumberMin(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) {
function envOrNumberMin(
environmentMin: string | undefined,
environmentMax: string | undefined,
number?: number
) {
if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) {
return Number(Number(environmentMin) < Number(environmentMax) ? environmentMin : environmentMax);
return Number(
Number(environmentMin) < Number(environmentMax)
? environmentMin
: environmentMax
);
}

if (environmentMax) {
return Number(environmentMax) < (number ?? 0) ? Number(environmentMax) : (number ?? 0);
return Number(environmentMax) < (number ?? 0)
? Number(environmentMax)
: number ?? 0;
}

if (environmentMin) {
Expand All @@ -91,14 +115,24 @@ function envOrNumberMin(environmentMin: string | undefined, environmentMax: stri
* @param environmentMax Max environment variable of Min/Max pair.
* @param number Default number. If not set, is `0`.
*/
function envOrNumberMax(environmentMin: string | undefined, environmentMax: string | undefined, number?: number) {
function envOrNumberMax(
environmentMin: string | undefined,
environmentMax: string | undefined,
number?: number
) {
if (environmentMin || environmentMax) {
if (environmentMin && environmentMax) {
return Number(Number(environmentMin) < Number(environmentMax) ? environmentMax : environmentMax);
return Number(
Number(environmentMin) < Number(environmentMax)
? environmentMax
: environmentMax
);
}

if (environmentMin) {
return Number(environmentMin) > (number ?? 0) ? Number(environmentMin) : (number ?? 0);
return Number(environmentMin) > (number ?? 0)
? Number(environmentMin)
: number ?? 0;
}

if (environmentMax) {
Expand All @@ -114,10 +148,26 @@ const browser = {
isIncognito: envOrBoolean(process.env.INCOGNITO, false),
isTrusted: envOrBoolean(process.env.BROWSER_TRUSTED, false),
lowBandwidth: envOrBoolean(process.env.LOW_BANDWIDTH, false),
maxBackoff: envOrNumberMax(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 3600000),
maxSleep: envOrNumberMax(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 10000),
minBackoff: envOrNumberMin(process.env.PAGE_BACKOFF_MIN, process.env.PAGE_BACKOFF_MAX, 10000),
minSleep: envOrNumberMin(process.env.PAGE_SLEEP_MIN, process.env.PAGE_SLEEP_MAX, 5000),
maxBackoff: envOrNumberMax(
process.env.PAGE_BACKOFF_MIN,
process.env.PAGE_BACKOFF_MAX,
3600000
),
maxSleep: envOrNumberMax(
process.env.PAGE_SLEEP_MIN,
process.env.PAGE_SLEEP_MAX,
10000
),
minBackoff: envOrNumberMin(
process.env.PAGE_BACKOFF_MIN,
process.env.PAGE_BACKOFF_MAX,
10000
),
minSleep: envOrNumberMin(
process.env.PAGE_SLEEP_MIN,
process.env.PAGE_SLEEP_MAX,
5000
),
open: envOrBoolean(process.env.OPEN_BROWSER)
};

Expand All @@ -135,7 +185,10 @@ const notifications = {
password: envOrString(process.env.EMAIL_PASSWORD),
smtpAddress: envOrString(process.env.SMTP_ADDRESS),
smtpPort: envOrNumber(process.env.SMTP_PORT, 25),
to: envOrString(process.env.EMAIL_TO, envOrString(process.env.EMAIL_USERNAME)),
to: envOrString(
process.env.EMAIL_TO,
envOrString(process.env.EMAIL_USERNAME)
),
username: envOrString(process.env.EMAIL_USERNAME)
},
mqtt: {
Expand Down Expand Up @@ -230,7 +283,9 @@ const page = {
inStockWaitTime: envOrNumber(process.env.IN_STOCK_WAIT_TIME),
screenshot: envOrBoolean(process.env.SCREENSHOT),
timeout: envOrNumber(process.env.PAGE_TIMEOUT, 30000),
userAgents: envOrArray(process.env.USER_AGENT, ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36']),
userAgents: envOrArray(process.env.USER_AGENT, [
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
]),
width: 1920
};

Expand All @@ -241,7 +296,9 @@ const proxy = {

// Check for deprecated configuration values
if (process.env.MAX_PRICE) {
console.warn('ℹ MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}');
console.warn(
'ℹ MAX_PRICE is deprecated, please use MAX_PRICE_SERIES_{{series}}'
);
}

const store = {
Expand All @@ -264,19 +321,39 @@ const store = {
},
microCenterLocation: envOrArray(process.env.MICROCENTER_LOCATION, ['web']),
showOnlyBrands: envOrArray(process.env.SHOW_ONLY_BRANDS),
showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map(entry => {
showOnlyModels: envOrArray(process.env.SHOW_ONLY_MODELS).map((entry) => {
const [name, series] = entry.match(/[^:]+/g) ?? [];
return {
name: envOrString(name),
series: envOrString(series)
};
}),
showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, ['3070', '3080', '3090', 'ryzen5600', 'ryzen5800', 'ryzen5900', 'ryzen5950', 'sonyps5c', 'sonyps5de', 'xboxsx', 'xboxss']),
stores: envOrArray(process.env.STORES, ['nvidia']).map(entry => {
showOnlySeries: envOrArray(process.env.SHOW_ONLY_SERIES, [
'3070',
'3080',
'3090',
'ryzen5600',
'ryzen5800',
'ryzen5900',
'ryzen5950',
'sonyps5c',
'sonyps5de',
'xboxsx',
'xboxss'
]),
stores: envOrArray(process.env.STORES, ['nvidia']).map((entry) => {
const [name, minPageSleep, maxPageSleep] = entry.match(/[^:]+/g) ?? [];
return {
maxPageSleep: envOrNumberMax(minPageSleep, maxPageSleep, browser.maxSleep),
minPageSleep: envOrNumberMin(minPageSleep, maxPageSleep, browser.minSleep),
maxPageSleep: envOrNumberMax(
minPageSleep,
maxPageSleep,
browser.maxSleep
),
minPageSleep: envOrNumberMin(
minPageSleep,
maxPageSleep,
browser.minSleep
),
name: envOrString(name)
};
})
Expand Down
17 changes: 12 additions & 5 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ import {tryLookupAndLoop} from './store';

puppeteer.use(stealthPlugin());
if (config.browser.lowBandwidth) {
puppeteer.use(resourceBlock({
blockedTypes: new Set(['image', 'font'] as const)
}));
puppeteer.use(
resourceBlock({
blockedTypes: new Set(['image', 'font'] as const)
})
);
} else {
puppeteer.use(adBlocker);
}
Expand All @@ -41,7 +43,9 @@ async function main() {

// Add the address of the proxy server if defined
if (config.proxy.address) {
args.push(`--proxy-server=http://${config.proxy.address}:${config.proxy.port}`);
args.push(
`--proxy-server=http://${config.proxy.address}:${config.proxy.port}`
);
}

await stop();
Expand Down Expand Up @@ -91,7 +95,10 @@ async function loopMain() {
try {
await main();
} catch (error) {
logger.error('✖ something bad happened, resetting streetmerchant in 5 seconds', error);
logger.error(
'✖ something bad happened, resetting streetmerchant in 5 seconds',
error
);
setTimeout(loopMain, 5000);
}
}
Expand Down
Loading

0 comments on commit 318e626

Please sign in to comment.