From 6413144c1cae89f33f852cc93870b407a784f2bb Mon Sep 17 00:00:00 2001 From: Nachi G Date: Mon, 21 Sep 2020 08:38:18 -0700 Subject: [PATCH] feat: temporarily pause requests if store has stock (#147) Co-authored-by: Jef LeCompte --- .env-example | 1 + README.md | 1 + src/config.ts | 3 ++- src/store/lookup.ts | 14 +++++++++++++- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.env-example b/.env-example index 6a5d422976..700c09c087 100644 --- a/.env-example +++ b/.env-example @@ -3,6 +3,7 @@ DISCORD_WEB_HOOK="https://discordapp.com/api/webhooks/23123123123/5dfsdfh3h2j5hd EMAIL_USERNAME="youremail@gmail.com" EMAIL_PASSWORD="secretpassword" HEADLESS="true" +IN_STOCK_WAIT_TIME="30" LOG_LEVEL="info" OPEN_BROWSER="true" PAGE_TIMEOUT="30000" diff --git a/README.md b/README.md index 71225c3361..0f97332a52 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ Here is a list of variables that you can use to customize your newly copied `.en | `EMAIL_USERNAME` | Gmail address | E.g.: `jensen.robbed.us@gmail.com` | | `EMAIL_PASSWORD` | Gmail password | See below if you have MFA | | `HEADLESS` | Puppeteer to run headless or not | Debugging related, default: `true` | +| `IN_STOCK_WAIT_TIME` | Time to wait between requests to the same store if it has cards in stock | In seconds, default: `0` | | `LOG_LEVEL` | [Logging levels](https://github.com/winstonjs/winston#logging-levels) | Debugging related, default: `info` | | `OPEN_BROWSER` | Toggle for whether or not the browser should open when item is found | Default: `true` | | `PAGE_TIMEOUT` | Navigation Timeout in milliseconds | `0` for infinite, default: `30000` | diff --git a/src/config.ts b/src/config.ts index 117eca2b5c..b16ea86f4f 100644 --- a/src/config.ts +++ b/src/config.ts @@ -56,7 +56,8 @@ const page = { width: 1920, height: 1080, navigationTimeout: Number(process.env.PAGE_TIMEOUT ?? 30000), - userAgent: 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' + userAgent: 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', + inStockWaitTime: Number(process.env.IN_STOCK_WAIT_TIME ?? 0) }; const store = { diff --git a/src/store/lookup.ts b/src/store/lookup.ts index 9a7f45249b..3a13c3a655 100644 --- a/src/store/lookup.ts +++ b/src/store/lookup.ts @@ -7,6 +7,8 @@ import {sendNotification} from '../notification'; import {includesLabels} from './includes-labels'; import {closePage, delay, getSleepTime} from '../util'; +const inStock: Record = {}; + /** * Returns true if the brand should be checked for stock * @@ -81,6 +83,12 @@ async function lookup(browser: Browser, store: Store) { } else { Logger.info(`🚀🚀🚀 [${store.name}] ${graphicsCard} IN STOCK 🚀🚀🚀`); Logger.info(link.url); + if (Config.page.inStockWaitTime) { + inStock[store.name] = true; + setTimeout(() => { + inStock[store.name] = false; + }, 1000 * Config.page.inStockWaitTime); + } if (Config.page.capture) { Logger.debug('ℹ saving screenshot'); @@ -109,7 +117,11 @@ async function lookup(browser: Browser, store: Store) { export async function tryLookupAndLoop(browser: Browser, store: Store) { Logger.debug(`[${store.name}] Starting lookup...`); try { - await lookup(browser, store); + if (Config.page.inStockWaitTime && inStock[store.name]) { + Logger.info(`[${store.name}] Has stock, waiting before trying to lookup again...`); + } else { + await lookup(browser, store); + } } catch (error) { Logger.error(error); }